반응형
<!doctype html>
PART 1. 객체 지향
객체 지향
- 시스템을 상호작용하는 자율적인 객체들을 공동체로 보고 객체들을 이용해서 시스템을 분할하는 방식
자율적인 객체란?
- 상태와 행위를 가지고 자신의 일을 스스로 책임질 수 있는 객체
절차 지향 / 객체 지향
-
절차 지향
- 데이터 중심의 프로시저로 프로그래밍을 구성하는 기법
-
객체 지향
- 데이터와 관련된 프로시저를 객체라는 단위로 묶어 객체들이 모여 프로그래밍을 구성하는 기법
객체 지향의 핵심
- 기능을 제공하는 것
- 말 그대로 객체를 지향하는 것이지 클래스를 지향하는 것이 아님
객체 지향의 장점
-
한 곳의 구현 변경이 다른 곳에 변경을 시키지 않도록 해줌
- 캡슐화
- 추상화
오퍼레이션 / 시그니처
-
오퍼레이션
- 객체가 제공하는 기능
-
시그니쳐
-
오퍼레이션의 사용법
-
다음 3가지로 구성
- 기능 식별 이름
- 파라미터 및 파라미터 타입
- 기능 실행 결과 값
-
-
-
인터페이스
- 객체가 제공하는 모든 오퍼레이션의 집합
- 자바의 인터페이스와는 다름
- 객체 지향에서 오퍼레이션 집합을 표현할 때 사용되는 용어
- 객체를 사용하기 위한 일종의 명세나 규칙
다형성
- 한 객체가 여러 타입을 가질 수 있다는 뜻
추상화
- 데이터나 프로세스등을 의미가 비슷한 개념이나 표현으로 정의하는 과정
- ex) '이상한 나라의 앨리스' 동화전집에서 병사 스페이스 트럼프, 병사 하트 트럼프, 왕비 트럼프, 왕 트럼프 들을 앨리스가 보고 '고작 트럼프에 불과해!'라는 말로 트럼프로 추상화 했다
콘크리트 클래스 (concrete class)
- 인터페이스에 정의된 기능을 하위 타입에게 실제 구현을 제공한다는 의미로 하위 타입들을 콘크리트 클래스로 부름
콘크리트 클래스 타입을 쓰지 않고 추상 타입을 쓰는 이유
- 유연함
- 추상화는 책임을 분리시키는 촉매제 역할을 함
TDD
- 테스트 주도 개발
- 구현할 코드에 대한 테스트를 먼저 작성하고, 작성한 테스트를 성공시키는 코드를 점진적으로 완성
- 테스트를 강제함으로써 알맞은 책임을 가진 객체를 만들도록 유도하여 객체 지향 설계를 유도하는 개발 방식이다
상속보단 조립
- 상속의 단점
-
상위 클래스 변경의 어려움
- 클래스의 계층도가 커질수록 상위 클래스를 변경하는 것은 점점 어려워진다
-
클래스의 불필요한 증가
- 다중 상속을 지원하지 않기 때문에 동일한 기능을 2개이상 사용하려면 클래스를 하나 더 만들어야 하는 불상사 발생
-
상속자체를 잘못 사용할 수 있다
-
- 조립
-
여러 객체를 묶어 더 복잡한 기능을 제공하는 객체를 만드는 것
- 조립의 장점
- 필요한 객체를 붙이면 되므로 클래스를 불필요하게 증가하지 않는다
- 런타임에 조립 대상 객체를 교체할 수 있다
- 조립의 단점
-
상속에 비해 상대적으로 런타임 구조가 복잡해진다
-
상속보다 구현이 더 어렵다
- 하지만 장기적 관점에서 구현 / 구조의 복잡함보다 변경의 유연함을 확보하는 데서 오는 장점이 더 크므로, 기능을 재사용해야 할 경우 상속보다는 조립을 먼저 고려할 것
-
-
모든 상황에서 조립을 사용하라는 것은 아님 상속을 사용하다 보면 변경의 관점에서 유연함이 떨어질 가능성이 높으니 조립을 먼저 고려하라는 것이다
위임
-
내가 할 일을 다른 객체에게 넘긴다
-
보통 조립 방식으로 구현
- 위임의 단점
-
내가 바로 실행할 수있는 것을 다른 객체에게 한 번 더 요청하므로 실행 시간이 증가한다
- 연산 속도가 매우 중요한 시스템에서는 많은 위임 코드가 성능에 문제를 일으킬 수 있지만, 대부분의 경우에는 위임으로 인해 발생하는 미세한 성능 저하보다 위임을 통해서 얻을 수 있는 유연함 / 재사용의 장점이 더 크다
-
그럼 상속은 언제 사용하나
- 재사용이 아닌 기능의 확장이라는 관점에서 상속을 적용해야 한다
- 명확한 IS-A 관계가 성립되어야 한다
- 최초에는 명확한 IS-A 관계로 보여서 상속을 이용해 기능을 확장했다고 하더라도, 이후에 클래스의 개수가 불필요하게 증가하는 문제가 발생하거나 상위 클래스의 변경이 어려워지는 등 상위 클래스를 상속받을 때의 단점이 발생한다면 조립으로 전환하는 것을 고려하라
참고
- 개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴 - 최범균
반응형
'개발 도서' 카테고리의 다른 글
[이펙티브 자바] 아이템 2 - 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2023.03.14 |
---|---|
[이펙티브 자바] 아이템 1 - 생성자 대신 정적 팩터리 메서드를 고려하라 (0) | 2023.03.14 |
[객체지향의 사실과 오해] 이상한 나라의 객체 (0) | 2020.04.03 |
[객체지향의 사실과 오해] 협력하는 객체들의 공동체 (0) | 2020.04.01 |
if - else 는 왜 있는걸까? (6) | 2019.04.29 |
댓글