분류 전체보기 1341

Ch05 객체지향 구현 - 메시지와 메서드의 분리

메시지와 메서드메시지는 한 객체가 다른 객체와 의사소통할 수 있는 유일한 방법이다.객체가 다른 객체에게 협력을 요청하기 위해서는 메시지를 전송해야 한다.메서드는 메시지를 수신한 객체가 메시지를 처리하기 위해 수행하는 행동을 의미한다.동일한 메시지를 전송하더라도 메시지를 수신한 객체는 자신의 타입에 맞는 적절한 메서드를 선택한 후 실행할 수 있다.메시지를 수신할 수 있는 어떤 객체라도 협력에 참여할 수 있다. 즉, 메시지는 협력 대상을 플러그인 할 수 있는 슬롯 역할이 되는 것이다.메시지와 메서드를 분리하는 이유는? 의존성을 제어해서 내부의 데이터가 변경되거나 타입이 바뀔 때의 파급 효과를 제어하기 위해서이다. 즉 쉽게 수정할 수 있는 코드를 작성하기 위해서이다. 변경하기 쉬운 구조를 설계하기 위해서는 메..

오브젝트 2024.10.09

Ch05 객체지향 구현 - 객체 구현하기

역할 구현하기역할이 오직 하나의 객체만 표현한다면 구체 클래스를 이용해서 구현할 수 있다.여러 객체에 대체될 수 있고 코드를 공유할 필요가 있다면 추상 클래스를 이용해서 구현할 수 있다.코드를 공유할 필요도 없고 결합도를 낮추기 위한 메시지 수신자의 역할만 명시하기를 원한다면 인터페이스를 이용해서 구현할 수 있다.절차적인 방식과 객체지향 방식의 차이절차적인 방식으로 설계된 경우에는 피해 속성이 사용될 문맥을 고려하지 않고 추측을 기반으로 모든 필드에 대해 Getter와 Setter를 추가했다.객체지향 방식으로 설계된 경우에는 협력을 제공하는 책임을 먼저 할당했고, 이 책임을 구현하는데 필요한 피해 필드를 나중에 추가했다.협력이라는 문맥을 기반으로 꼭 필요한 메서드만 제공했다.변경에 있어서 더 유리한 위치..

오브젝트 2024.10.09

Ch12. 스레드 풀과 Executor 프레임워크 - Future

Runnable과 Callable 비교Runnablepackage java.lang;public interface Runnable { void run();}Runnable의 run() 은 반환 타입이 void이다. 따라서 값을 반환할 수 없다.예외가 선언되어 있지 않다. 따라서 해당 인터페이스를 구현하는 모든 메서드는 체크 예외를 던질 수 없다.참고로 자식은 부모의 예외 범위를 넘어설 수 없다. 부모에 예외가 선언되어 있지 않으므로 예외를 던질 수 없다.물론 런타임(비체크) 예외는 제외다.Callablepackage java.util.concurrent;public interface Callable { V call() throws Exception;}java.util.concurrent 에서 제공되는 기..

Ch04 책임 할당하기 - 변경 보호

다형적인 메시지메시지는 한 객체지향에서 한 객체가 다른 객체와 협력하기 위해 보내는 요청이며, 객체가 협력을 위해 사용할 수 있는 유일한 의사소통 수단이다. 영화는 비율 할인 정책 클래스에게 비율 할인을 계산하라는 메시지를 전송하고 있다.영화는 금액 할인 정책 클래스에게 금액 할인을 계산하라는 메시지를 전송하고 있다.영화의 입장에서는 할인 금액을 계산하고 계산된 할인 금액을 반환한다는 점에서는 두 정책은 다르지 않다.영화는 협력하는 대상이 할인 금액만 반환할 수 있다면 조건문을 이용해서 누구에게 메시지를 전송할지 고민할 필요가 없다.따라서 메시지를 통일해서 영화가 할인 정책의 타입과 무관하게 동일한 메시지를 전송하도록 변경해야 한다.객체지향에서는 메시지를 수신한 객체가 메시지를 처리할 방식을 스스로 선택..

오브젝트 2024.10.05

Ch04. 책임 할당하기 - 다형성

다형성이 필요한 이유할인 금액을 계산할 책임을 도메인 모델에서 찾아야 한다. 할인 정책 CRC 카드를 작성하고, 필요한 책임을 작성한다.금액 할인 계산식을 알고 있다.비율 할인 계산식을 알고 있다.비율 할인을 계산한다.금액 할인을 계산한다.이렇게 설계를 하게 된다면 2가지 방식으로 영화와 할인 정책이 협력을 해야한다. 비율 할인을 계산하라는 책임을 할인 정책에 요청한다.금액 할인을 계산하라는 책임을 할인 정책에 요청한다.이러한 설계는 영화가 할인 정책에게 서로 다른 책임을 요청해야 하는 문제가 발생한다. Movie의 calculateFee 메서드에 조건문이 들어가며, DiscountPolicy에 서로 다른 책임을 반환하는 메서드가 존재해야한다.DiscountPolicy는 서로 상관없는 비율 할인 계산하는..

오브젝트 2024.10.05

Ch04. 책임 할당하기 - 설계 트레이드오프(높은 응집도)

높은 응집도 패턴(High Cohesion)문제 - 어떻게 낮은 결합도를 유지하고, 변경에 따른 영향을 줄이면서 재사용성을 높일 수 있을까?해결 방법 - 높은 응집도를 유지하도록 책임을 할당하라높은 응집도의 취지는 여러 개의 책임을 할당할 경우 하나의 객체에 함께 할당할 수 있는 책임들의 특성을 제한하자는 것이다. 즉 서로 밀접한 관련성을 가진 책임들만 같은 객체에 할당해야 한다. 연관성이 높은 책임들을 객체에 할당하고 연관성이 낮은 책임들을 다른 객체로 이동시키면, 하나의 객체가 너무 많은 일을 하는 것을 방지할 수 있다. 높은 응집도가 중요한 이유는 설계하기 쉬운 코드를 만들기 위해서이다. 서로 연관성이 적은 책임이 하나의 객체 안에 모여 있다면 코드를 읽을 때 수정할 부분을 찾기가 어려워진다. 서..

오브젝트 2024.10.05

Ch04. 책임 할당하기 - 설계 트레이드오프(창조자와 낮은 결합도)

창조자 패턴(Creator)문제 - 새로운 인스턴스를 생성하는 책임을 어떤 객체에게 할당할 것인가?해결 방법 - 아래 조건 중 한 가지라도 만족한다면, A의 인스턴스를 생성할 책임을 B에게 할당하라B가 A를 포함하거나, 참조한다.B가 A를 기록한다.B가 A를 긴밀하게 사용한다.B가 A를 초기화하는데 필요한 정보를 알고 있다.생성할 책임을 맡게 될 객체는 생성되는 객체와 밀접한 관계를 맺고 있는 객체이다.EX) 상영이 예매의 생성을 책임을 지는게 좋은 이유상영은 창조자 패턴 중 2가지 조건을 만족한다.영화는 창조자 패턴 중 1가지 조건을 만족한다.영화보다는 상영이 예매를 생성할 책임을 할당하는 게 더 좋은 선택이다(상영이 2가지 조건을 만족하기 때문) 낮은 결합도 패턴(Low Coupling)결합도는 어느..

오브젝트 2024.10.05

Ch04. 책임 할당하기 - 정보와 책임 할당(정보 전문가)

도메인 협력 설계시스템 내부의 상태 변경을 도메인 모델에 기반한 개념들의 집합으로 가시화기능이 실행된 후의 결과를 정리해 본다(ex. 상영을 예매하라는 실행 결과로 예매를 반환한다)기능을 실행한 후의 상태 변경을 정리해 본다.( ex. 상영을 예매한 후에는 시스템 안에 예매라는 도메인 모델이 생성되며, 이는 상영과 연결된다.)상태 변경을 기반으로 객체 협력을 설계한다.애플리케이션을 기능을 시스템의 책임으로, 시스템을 책임을 다시 객체의 책임으로 변환한다.초점이 기능을 시작하는 책임을 어떤 객체에게 할당할지를 결정하는 문제로 전환이 된다.책임을 수행할 후보 객체를 찾을 때는 도메인 모델에서 어떤 객체가 적합한지 찾아봐야 한다.정보 전문가 패턴(Information Expert)정보 전문가 패턴은 책임 할당..

오브젝트 2024.10.05

Ch02. L2 수준에서 외울 것들

NIC, L2 Frame, LAN 카드 그리고 MAC 주소NIC(Network Interface Card)는 흔히 LAN(Local Area Network) 카드이다.LAN은 네트워크 규모를 나타내며, WAN > MAN > LAN 으로 LAN이 가장 규모가 작다.유/무선 NIC이 있지만 굳이 구별하지 않고 NIC이라고 할 때가 많다.NIC은 H/W이며 MAC주소를 갖는다.Packet은 L2에서의 유통되는 데이터 단위이다.L2 Access SwitchEnd-Point와 직접 연결되는 스위치각각의 포트를 Interface라고 한다.Mac 주소를 근거로 스위치L2 Access에서 Router로 가는 Link를 UpLink라고 하며, PC에서 L2 Access에 물리적 접근이 실패시에는 Link-Down, 성공..

Ch01. Internet 기반 네트워크 입문

OSI 7 Layer와 식별자OSI 7 Layer 계층으로 H/W, S/W , User mode/ Kernel mode로 나뉘어 있으며, 각각의 계층을 프로토콜에 대한 설명이다.각 계층별 식별자 2계층(L2 Frame) : MAC 주소Driver 별 식별자로 구분한다.48Bit이며 보통 16진수로 표기3 계층(L3 Packet) : IP 주소Host 별로 구분한다.IPv4에서는 32bit며, 10진수(8bit)씩 끊어 점으로 구분해 표기4 계층(L4) : Port 번호사용하는 사용자에 따라 Process/ 인터페이스 / 서비스로 구분한다.16Bit 양의 정수HostHost는 Computer + Network로 이해하자Swithch는 네트워크 그 자체를 이루는 Host를 의미한다.대표적으로 Router, ..