본문 바로가기
[용어] CQRS 란? ( Command Query Responsibility Segregation ) CQRS 란? ( Command Query Responsibility Segregation ) - CQRS 는 Command Query Responsibility Segregation 의 약자. ( Segregation 은 구분, 분리의 뜻 ) - CQRS 의 핵심은 정보에 대한 update 와 read 를 다른 model 을 사용하자는 것으로 Command 는 update( create, update, delete 포함 ), Query 는 read 에 매핑된다. - 우리가 DB 에서 데이터를 읽는 것이 update에 비해 훨~~씬 많기 때문에 read 에 더 큰 비중을 두기 위해 read 와 update 를 분리하자는 데서 CQRS의 이론은 시작된다. 이렇게 read 와 update 를 분리시키면 따로.. 2012. 10. 20.
[Design Pattern/Java] 추상 클래스보다는 인터페이스를 사용하자. 안녕하세요 돼지왕 왕돼지입니다. 오늘은 "추상 클래스보다는 인터페이스를 사용하자" 라는 주제로 이야기를 해볼가 합니다. 이 글은 "Effective Java" 의 내용을 요약 정리한 것입니다. 추상 클래스와 인터페이스의 General 한 차이점 - 추상 클래스는 구현된 메소드( 메소드 몸체 코드가 있는.. ) 를 포함할 수 있는 반면, 인터페이스는 그렇지 못합니다. - 추상 클래스로 정의된 타입을 구현하는 클래스는 반드시 추상 클래스의 서브 클래스가 되어야 합니다. 반면 인터페이스를 구현하는 클래스의 경우는, 인터페이스에 정의된 모든 메소드를 구현하고 인터페이스 구현 계약을 지키면 됩니다. 즉 클래스 상속 계층과는 무관합니다. - 클래스 간의 상속은 단일상속만을 허용하므로, 추상 클래스로 타입을 정의할 .. 2012. 3. 29.
[Design Pattern/Java] 상속을 위한 설계와 문서화를 하자. 그렇지 않다면 상속의 사용을 금지시킨다. 안녕하세요 돼지왕 왕돼지입니다. 오늘은 "상속을 위한 설계와 문서화를 하자. 그렇지 않다면 상속의 사용을 금지시킨다" 라는 내용을 다뤄보고자 합니다. 이 글은 "Effective Java" 의 내용을 요약 정리한 글입니다. 이 글을 읽기 전에 이 글을 먼저 읽으시길 권장해드립니다. 2012/03/29 - [프로그래밍 놀이터/디자인 패턴] - [Design Pattern/Java] 가급적 상속(Inheritance) 보다는 컴포지션(composition)을 사용하자. 무엇을 문서화해야 하는가? - 메소드 오버라이딩으로 인한 파급 효과를 분명하게 문서화해야 합니다. 일반적으로 말하면, 오버라이드 가능한 메소드를 호출할 수 있는 어떤 상황에 대해서도 문서화해야 한다. - 오버라이딩 가능한 메소드들의 자체 사용.. 2012. 3. 29.
[Design Pattern/Java] 가급적 상속(Inheritance) 보다는 컴포지션(composition)을 사용하자. 안녕하세요 돼지왕왕돼지입니다. 오늘은 "가급적 상속(Inheritance)보다는 컴포지션(composition)을 사용하자" 라는 주제로 이야기하고자 합니다. 이 글은 "Effective Java" 의 내용을 요약 정리한 내용입니다. 상속의 안전함과 위험함. 안전함 - 동일한 프로그래머가 서브 클래스와 슈퍼 클래스의 구현을 관장하는, 같은 패키지 내에서 상속을 하는 것은 안전합니다. ( 아래 다뤄질 상속의 문제점들을 커버할 수 있기 때문입니다. ) - 클래스가 상속을 위해 특별히 설계되었으며, 문서화가 잘 된 클래스를 "확장(extends)"의 목적으로 상속하는 것도 안전합니다. 위험함. - 서로 다른 패키지에 있으며, 확장을 목적으로 설계되지 않은 일반적인 클래스를 상속받는 것은 위험합니다. 무엇이 그.. 2012. 3. 29.
[Design Pattern/Java] 가변성을 최소화 하자. 안녕하세요 돼지왕왕돼지입니다. 오늘은 "가변성을 최소화 하자" 라는 주제로 이야기해볼까 합니다. 이 글은 "Effective Java" 의 내용을 정리한 글입니다. 불변 클래스가 필요한 이유 불변 클래스는 가변 클래스에 비해 설계와 구현 및 사용이 더 쉽습니다. 또한 에러 발생이 적으며 보안이나 사용 측면에서 더 안전합니다. Thread-safe 한 점도 빼놓을 수 없죠. 불변 클래스를 만들 때 지켜야 하는 규칙 1. 객체의 상태를 변경하는 그 어떤 메소드도 제공하지 않는다. 2. 상속( inheritance )를 할 수 없도록 하자. - class 를 final 로 선언할 수도 있고, 생성자를 private 으로 만들고, static factory 메소드를 제공할 수도 있다. 3. 모든 필드를 fina.. 2012. 3. 27.
[Design Pattern/Java] public 클래스에서는 public 필드가 아닌 접근자 ( accessor ) 메소드를 사용한다. 안녕하세요 돼지왕 왕돼지입니다 오늘은 "public 클래스에서는 public 필드가 아닌 접근자 ( accessor ) 메소드를 사용한다." 를 주제로 이야기하고자 합니다. 이 글은 "Effective Java" 의 내용을 정리한 것입니다. 오늘 내용은 매우 simple 합니다. 결론적으로. public 클래스는 자신의 가변 필드를 절대로 외부에 노출시키지 않아야 하며, 논란의 여지는 있으나 불변 필드를 노출하는 것은 그나마 덜 해롭다. 패키지 전용이나 private 중첩 클래스의 경우 필요하다면 필드( 가변이나 불변에 관계 없이 ) 를 노출 할 수 있다. 요 녀석입니다. 즉, 이전 시간에 다뤘던 encapsulation 에서도 말했듯이 public field 를 노출시키는 것은 매우 해롭다는 것입니다... 2012. 3. 14.
[Design Pattern/Java] 클래스와 그 멤버의 접근성을 최소화하자. 안녕하세요 돼지왕 왕돼지입니다. 오늘은 "클래스와 그 멤버의 접근성을 최소화하자." 라는 주제로 이야기하고자 합니다. 이 글은 "Effective Java" 의 내용을 정리한 것입니다. 잘 설계된 모듈과 그렇지 않은 모듈 잘 설계된 모듈과 그렇지 않은 모듈을 구분 짓는 가장 중요한 잣대는, 모듈 자신의 내부 데이터 및 그 외의 상세한 구현부분을 다른 모듈로부터 얼마나 숨기느냐에 달려 있습니다. 즉 정보 은닉 ( information hiding ) 과 캡슐화 ( encapsulation ) 이 얼마나 잘 지켜졌냐는 것이죠. 모듈화를 잘 하면 뭐가 좋은데? - 개발, 테스트, 최적화, 사용 및 수정이 편리합니다. - 개발부분에서는 모듈이 나뉘어져 있으면 병행 개발이 가능해져 개발이 매우 빨라집니다. 모듈들.. 2012. 3. 13.
[Design Pattern/Java] Comparable 인터페이스의 구현을 고려하자. 안녕하세요 돼지왕 왕돼지입니다. 오늘은 "Comparable 인터페이스의 구현을 고려하자." 라는 주제로 이야기하고자 합니다. 이 글은 "Effective Java" 를 정리한 내용입니다. - compareTo 메소드는 Object 클래스에 정의되어 있지 않으며, 대신에 Comparable 인터페이스에 유일하게 존재하는 메소드이다. Object 의 equals 메소드와 유사한 특성을 갖는다. 차이점이라면, 두 객체가 동일한지를 비교하는 것과 더불어 순서까지 비교할 수 있으며, 제네릭 타입을 지원한다. Comparable 에 대해 조금만 더 설명해봐. - 자바 라이브러리의 모든 값 클래스들은 Comparable 인터페이스를 구현했데. - 알파벳 순, 숫자 순, 날짜 순과 같은 자연율을 갖는 값 클래스들은 .. 2012. 3. 13.
[Design Pattern/Java] clone 메소드는 신중하게 오버라이드 하자. 안녕하세요 돼지왕 왕돼지입니다. 오늘은 "clone 메소드는 신중하게 오버라이드 하자" 라는 주제로 이야기하고자 합니다. 이 글은 "Effective Java" 를 정리한 내용입니다. - Cloneable 인터페이스는 복제를 허용하는 객체라는 것을 알리는 목적으로 사용하는 믹스인 인터페이스( Mixin interface ) 이다. Cloneable 이놈은 뭐하는 놈이야? - Clonable interface 는 아무런 추상 메소드도 가지고 있지 않다. - Object 클래스의 protected 메소드인 clone을 사용할 것인지의 여부를 결정한다. 어떤 클래스에서 Cloneable 인터페이스 implement 하고, clone 메소드를 호출하면, 그 클래스 객체의 복제본을 만들어 반환한다. 이 때 복제 .. 2012. 3. 12.
반응형