목록분류 전체보기 (75)
Kim Jinung
Callback pattern Callback은 실행 가능한 코드 조각을 의미한다. 메서드에 콜백을 인자로 넘기면 콜백을 인자로 받는 메서드는 콜백을 원하는 시점에 실행할 수 있다. (주로 비동기 처리를 위한 목적으로 사용하는 개념이라고 한다.) Example public interface Callback { void call(); } public abstract class Task { final void executeWith(Callback callback) { execute(); Optional.ofNullable(callback).ifPresent(Callback::call); } public abstract void execute(); } @Slf4j public final class Simple..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/l8vez/btsiOH2Igol/ecYCPckCjFWMqJd22OQBhk/img.jpg)
Strategy pattern(Policy pattern) 전략 패턴은 인터페이스와 구현체를 사용해서 로직을 유연하게 변경하는 패턴이다. 구현 코드만 보면 DI랑 뭐가 다른거지 싶은데 목적이 다르다. 전략 패턴은 클라이언트가 전략을 사전에 숙지해서 주도권을 쥐고 런타임 시 전략(알고리즘)을 동적으로 변경한다면, DI는 의존성을 외부에서 주입해주는 방식을 통해서 객체간의 결합을 느슨하게 만드는 것이 목적이다. 템플릿 메서드 패턴이 상속을 이용한다면, 전략 패턴은 컴포지션을 이용하는 방식이다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bFMjAb/btsiOJ7anUh/UEyuuhzmtYxWicov9IWtmK/img.jpg)
Template method pattern 위 이미지에서 추상 클래스와 이를 상속하는 서브 클래스가 존재한다. AbstarctClass의 templateMethod 메서드 로직은 primitive1, 2 메서드를 실행하는 것이고, 두 메서드는 모두 추상 메서드다. 그리고 이를 상속하는 서브 클래스에서는 primitive1, 2메서드를 구현했다. 서브 클래스에서 templateMethod 메서드를 실행하면 서브 클래스에서 정의한 primitive1, 2 메서드가 templateMethod 메서드의 로직으로 동작한다. 즉 템플릿 메서드 패턴은 추상 클래스에서 공통 로직을 정의하고 서브 클래스에서 세부사항을 구현하는 패턴이다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b3KXlR/btsiPi2pmSO/IMMEsjNTne2WTXPketCuQk/img.png)
AOP(Aspect-oriented programming) 직역하면 관점 지향 프로그래밍이다. 객체 지향은 객체에게 책임과 역할을 부여하고 객체 간의 협력을 통해 시스템을 구성하는 방법이다. 그렇다면 관점 지향의 관점은 무엇을 의미하는가. 관점 지향 프로그래밍은 Cross-cutting concern을 분리해서 모듈성을 증가시키는 패러다임이다. 여기서 Cross-cutting concern은 직역하면 횡단 관심사인데, 각 컴포넌트의 공통 관심사 라는 표현이 의도에 더 적합한 것 같다. 그렇다면 컴포넌트의 공통 관심사란 무엇인가. 프레젠테이션 레이어, 비지니스 레이어, 데이터 액세스 레이어는 각각 목적에 따른 핵심 기능이 존재한다. 그리고 트랜잭션, 보안, 로깅과 같은 부수적인 기능을 필요로 한다. 여기서..
JPA Cache 1st Cache: 트랜잭션 단위 2nd Cache: 앱 내에서 공유하는 캐시 Why need default constructor? JPA는 동적으로 객체를 생성하기 위해서 자바 리플렉션 기능 등을 사용한다. 이를 위해서 기본으로 제공해주어야 한다. Undirectional Mapping vs Bidirectional Mapping 양방향 매핑은 2개의 단방향 매핑이다. 디비 테이블은 외래키 조인을 통해 양방향 관계가 성립된다. 반면 객체는 단뱡향 2개로 양방향 참조를 구현해주어야 한다. 일반적으로 FK를 가지고 있는 객체가 연관 관계의 주인이 되고, 반대편 객체는 읽기 전용으로만 사용한다. mappedBy 파라미터의 역할이 여기에 해당한다. 즉 JPA는 mappedBy로 지정된 필드는..
동시에 여러 개의 트랜잭션이 같은 엔티티를 수정하려고 할 때 데이터 충돌이 발생
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b2d3po/btsgEe3fvq6/hi3UxCRaM6jpZTYyQi5SV1/img.png)
Arrays ps를 하다보면 asList 메서드를 사용할 일이 꽤 잦다. 그런데 내부 구현이 어떻게 되어있는 걸까 뜯어본 적은 없다. 막연히 인자를 던져주면 리스트를 던져주는구나 싶었다. 그런데 가끔은 ArrayList로 래핑하기도 하고, 안 할때도 있다. 블랙박스는 위험하다. asList method Arrays 클래스의 asList메서드는 인자를 받아서 리스트 인스턴스를 반환한다. 나는 당연히 반환 객체의 타입이 ArrayList가 아닐까 생각했다. 그런데 값을 추가하면 UnsupportedOperationException이 발생한다. 내부 코드를 보면 반환 타입을 ArrayList로 준다. ??? Arrays.ArrayList type class 컬렉션 프레임워크의 ArrayList가 아니라, Ar..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/wn3n1/btsgu7hzU7p/1saZdmAdk3l1uDthccDpH0/img.png)
Java Socket Programming Client-Server 구조에서의 소켓 프로그래밍 흐름 예시다. Server example import java.io.*; import java.net.*; public class MyServer { public static void main(String[] args){ try{ ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection DataInputStream dis=new DataInputStream(s.getInputStream()); String str=(String)dis.readUTF(); System.out.println("message= "+str)..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/VN3vq/btsgiDhVINB/kJh8FxI3DR01syLrLYaIok/img.png)
Multithreading 프로세스에서 스레드 여러 개를 동시에 실행하는 기법이다. Thread 프로세싱의 가장 작은 유닛 단위로, 가벼운 서브 프로세스에 해당한다. 멀티쓰레딩과 멀티프로세싱 모두 멀티태스킹을 위해 사용한다. 보통 멀티쓰레딩을 멀티프로세싱보다 더 많이 사용한다. 멀티쓰레딩은 공유 메모리 영역을 사용하기 때문에 별도의 메모리 영역을 분리해서 사용하지 않는다. 따라서 컨텍스트 스위칭(Context Switching) 과정에서 멀티프로세싱 보다 더 적은 시간을 필요로 한다. (오버 헤드가 적다.) JVM의 메모리 영역에는 Heap과 Thread stack이 존재한다. Heap은 쓰레드들이 공유하는 메모리 영역이다. Thread stack은 개별 쓰레드마다 할당 받고 프레임을 생성해서 지역 변수..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bnibPV/btsgdBEkUA5/6KZWGLZ2L5qBxdMGPtWmX0/img.png)
Hierarchy of Java Exception classes Overview Throwable 클래스가 모든 예외 클래스의 루트 클래스다. Throwable 클래스 하위에는 두 개의 클래스가 존재한다. Exception Error Types of Java Exceptions 1) Checked Exception 컴파일 타임에 체크되는 에러다. Error와 Runtime exception을 제외하면 모두 여기에 해당한다. IOException, SQLException, ClassNotFoundException등이 체크 예외에 해당한다. 현재 메서드에서 예외를 처리하지 못하면 반드시 예외를 발생시켜서 던져주어야 한다. 2) Unchecked Exception Runtime exception을 상속하는 예..