🏷️

OOP

OOP 태그가 포함된 포스트들입니다.

35개의 포스트 모든 태그 보기 →

Ch12 요약(다형성)

챕터 12 `다형성`의 내용은 `객체지향 설계`에 대한 내용이라기 보다는 `상속이 다형성을 구현하는 메커니즘`에 대한 내용이다.

Ch11 요약(합성과 유연한 설계)

`코드 재사용`과 관련하여 `상속`은 간편한 방법이지만 부모 클래스와 자식 클래스의 `결합` 때문에 변경에 불안정하고 유연하지 못하다.

Ch8 요약(의존성 관리)

6장까지 이르며 `자율적인 객체`, `캡슐화`, `응집도`, `결합도`에 대한 개념과 `책임 주도 설계` 에 따른 `책임 할당 방법`을 학습했다.

Ch5 요약(책임 할당하기)

이전 4장에서는 `캡슐화`, `응집도`, `결합도`를 설계 품질의 기준으로 삼고 `데이터 중심 설계`가 어떻게 `캡슐화`를 위반하면서 변경하기 어려운 설계가 되는지에 대해 살펴보았다.

Ch4 요약(설계 품질과 트레이드오프)

앞선 챕터를 통해서 우리는 객체지향 설계에 있어 `협력`, `책임`, `역할`을 가장 먼저 고려해야 하고, 그 중 `책임`이 가장 중요하다는 것을 알았다.

Ch3 요약(역할, 책임, 협력)

앞선 챕터에서는 간단한 `영화 예매` 코드를 통해서 `구현 관점`의 객체지향 설계에 대해서 배웠다. `캡슐화`, `상속`, `합성`, `다형성`, `추상화`, `메시지와 메서드`의 개념을 확인하고 `컴파일 타임 의존성`과 `런타임 의존성`을 다르게 함으로써 보다 ...

Ch2 요약(객체지향 프로그래밍)

`객체지향 프로그래밍`에서 사용되는 전반적인 주제들을 `영화 표 예매(할인 조건, 할인 정책)` 코드와 함께 대략적으로 설명한다.

Ch1 요약(객체, 설계)

`오브젝트`의 첫 챕터로써 간단한 `극장 표 판매` 코드를 프로세스와 데이터가 격리된 `절차 지향적 코드`에서 데이터와 프로세스가 통합된 `객체 지향적 코드`로 적절하게 리팩토링 하는 과정을 보여주며 객체 지향적인 설계란 무엇인가에 대해 보여준다.

디자인 패턴과 프레임워크

디자인 패턴과 프레임워크 애플리케이션을 설계하다 보면 어떤 요구사항을 해결하기 위해 과거에 경험했던 유사한 해결 방법을 다시 사용하는 경우가 있다.

일관성있는 협력

앞서 11장에서 구현한 `핸드폰 과금 시스템`의 요금 정책을 수정해야 한다고 가정하자. 지금까지 `기본 정책`에는 `일반 요금제`와 `심야 할인 요금제`의 두 가지 종류가 있었다. 이번 장에서는 `기본 정책`을 아래 표와 같이 4가지 방식으로 확장할 것이다. `부...

타입 계층의 구현

객체지향을 처음 접한 입문자들이 흔히 오해하는 부분이 을 동일한 것으로 간주하는 것이다.

서브클래싱과 서브타이핑

`객체지향 프로그래밍에서의 타입`에 대해서 이해를 하기 위해서는 먼저 `프로그래밍 언어 관점에서의 타입`과 `개념 관점에서의 타입`을 함께 살펴볼 필요가 있다.

계약에 의한 설계

`인터페이스` 만으로는 객체의 행동에 관한 다양한 관점을 전달하기 어렵다. 우리에게 필요한 것은 `명령의 부수효과를 쉽고 명확하게 표현할 수 있는 커뮤니케이션 수단`이다. 이 시점이 되면 **_계약에 의한 설계(Design By Contract, DBC)_** 가...

다형성

`다형성(Polymorphism)`이라는 단어는 컴퓨터 과학에서 **_하나의 추상 인터페이스에 대해 코드를 작성하고 이 추상 인터페이스에 대해 서로 다른 구현을 연결할 수 있는 능력_** 으로 정의한다. 간단히 말해서 다형성은 여러 타입을 대상으로 동작할 수 있는...

합성과 유연한 설계

`상속`과 `합성`은 객체지향 프로그래밍에서 가장 널리 사용되는 `코드 재사용` 기법이다. 상속이 부모 클래스와 자식 클래스를 연결해서 부모 클래스의 코드를 재사용하는데 비해 **_합성은 전체를 표현하는 객체가 부분을 표현하는 객체를 포함해서 부분 객체의 코드를 ...

상속과 코드 재사용

객체지향 프로그래밍의 장점 중 하나는 `코드 재사용`이 용이하다는 것이다. 전통적인 패러다임에서 코드를 재사용하는 방법은 코드를 복사한 후 수정하는 것이다. 객체지향은 조금 다른 방법을 취한다. **_객체지향에서는 코드를 재사용하기 위해 새로운 코드를 추가한다._...

유연한 설계

확장 가능하고 변화에 유연하게 대응할 수 있는 설계를 만들 수 있는 원칙 중 하나는 `개방-폐쇄 원칙(OCP)`이다. 개방-폐쇄 원칙은 다음과 같은 문장으로 요약할 수 있다.

요약 정리

`의존성`은 `변경`과 관련이 깊다. 의존하는 대상(**_의존 객체_**)이 변경 될 경우 함께 변경 될 가능성이 바로 `의존성`이다.

의존성 관리하기

잘 설계된 객체지향 애플리케이션은 작고 응집도 높은 객체들로 구성된다. **_작고 응집도 높은 객체란 책임의 초점이 명확하고 한 가지 일만 잘 하는 객체를 의미한다._** 이런 작은 객체들이 단독으로 수행할 수 있는 작업은 거의 없기 때문에 일반적인 애플리케이션의...

객체 분해

`추상화`의 목적은 복잡하게 얽히고 섥힌 문제에서 `공통점을 취하고 세부적인 사항은 생략`함으로써 인지과부화를 최소화하고 `문제 해결에 필요한 핵심`에 집중하는 것이다. 다시말해 한 번에 다뤄야 하는 정보의 수를 줄이기 위해 `본질적인 정보만 남기고 불필요한 세부...

메시지와 인터페이스

협력은 어떤 객체가 다른 객체에게 무언가를 __요청__ 할 때 시작된다. **_메시지는 객체 사이의 협력을 가능하게 하는 유일한 매개체이다._** 즉, 어떤 객체가 다른 객체에게 접근할 수 있는 유일한 방법은 바로 메시지를 전송하는 것 뿐이다.

책임 할당하기

앞 절에서는 __데이터 중심의 접근법__ 을 취할 경우 직면하게 되는 다양한 문제에 대해서 살펴보았다. 데이터 중심의 설계는 __행동보다 데이터를 먼저 결정__ 하게 되고 협력이라는 문맥을 벗어나 __고립된 객체의 상태에 초점__ 을 맞추기 때문에 캡슐화를 위반하...

캡슐화, 응집도, 결합도

앞선 챕터에서 __역할, 책임, 협력__ 의 관점에서 객체지향 설계를 하는것의 중요성을 살펴보았다.

역할,책임,협력

앞선 챕터에서 객체지향 프로그래밍을 구성하는 다양한 요소와 구현 기법을 살펴보았다. __클래스__ / __추상 클래스__ / __인터페이스__ 를 조합하여 객체지향 프로그램을 __구조화__ 하는 기본적인 방법과 상속을 이용해 __다형성__ 을 구현하는 기법을 소개...

객체, 설계

__객체지향의 사실과 오해__ 도서 1독 이후 개념적으로나마 객체지향 설계에 대한 맥락을 짚어보았다.

추상화

추상화 OOP 기본 '추상화' Java 코드를 숱하게 접하면서 가장 기본적인 개념이 부족함을 많이 느낀다. 보다 세련된 코드를 작성하거나 세련된 코드를 독해하기 위해서는 객체지향에 녹아있는 철학과 소스코드에 점철된 여러 디자인 요법들에 대해 알아두면 도움이 된다.