OOP
객체 지향 프로그래밍(Object Oriented Programming), 객체라는 기본단위로 나누고 객체의 상호작용을 서술하는 방식, 쉽게 현실 세계를 프로그램 언어로 서술한 것
추상화
- 어떤 영역에서 필요로하는 하는 속성이나 행동을 추출하는 작업
- 여러 개체들의 집합을 클래스라고 부름 (일반화하다)
캡슐화
정보 은닉
- 알 필요가 없는 정보에 대해서 외부에서 접근하지 못하도록 제한하는 것
- 내부 속성의 타입이나 로직이 변경되었다고 해서, 메서드의 반환 타입을 기존과 같이 유지한다면 참조하고 있는 다른 코드를 변경할 필요가 없음
- 변경이 필요하다면, 추 후에 deprecated 등의 신택스를 사용해 서서히 옳바른 코드로 변경해나가면 됨
일반화 관계
- 정보, 기능의 재사용도 가능함 (슈퍼클래스의 메서드를 오버라이드하지 않은 이상 그대로 사용 가능)
- 클래스 자체를 캡슐화 (클래스를 자식클래스에서 상속받아 기존 메서드를 오버라이드 함으로써 메서드가 아닌 클래스 수준의 캡슐화가 가능하다.)
- 일반화 관계는 A is kind of B 가 성립해야한다.
- 성립이 되지 않는 경우에는 위임(delegate)한다.
- 위임은 대상의 B를 내부 속성으로 두고 위임메서드를 생성해 기능을 동일하게 호출하면 된다.
다형성
서로 다른 클래스의 객체가 같은 메시지를 받았을 때 각자의 방식으로 동작하는 능력
- 예를 들어 새, 강아지, 고양이들의
talk()
라고 했을 때 서로 다른 소리를 냄 - 하지만 위 예는 모두 동물이라는 하나의 집합으로 표현할 수 있음
피터 코드의 상속 규칙
- 자식 클래스와 부모 클래스 사이는 역할 수행(is role played by) 관계가 아니여야 한다.
- 한 클래스의 인스턴스는 다른 클래스의 인스턴스로 변환할 필요가 절대 없어야한다. (애초에 불가능)
- 자식 클래스는 부모의 클래스의 책임을 무시하거나 재정의 하지 않고 확장만 수행해야한다.
- 자식 클래스가 단지 일부 기능을 재사용할 목적으로 유틸리티 역할을 수행하는 클래스를 상속하지 않아야한다.
- 자식 클래스가 역할, 트랜잭션, 디바이스 등을 특수화(specialization, 명확하게 하다)해야한다.
'소프트웨어' 카테고리의 다른 글
[소프트웨어/SOLID] 리스코브 치환 법칙(LSP) (0) | 2017.01.18 |
---|---|
[소프트웨어/SOLID] 개방 폐쇄 원칙(OCP) (0) | 2017.01.18 |
[소프트웨어/SOLID] 단일 책임 원칙(SRP) (0) | 2017.01.18 |
[번역] BPMN 2.0 vs BPEL (Oracle BPM VS SOA Suite) (0) | 2016.01.10 |
[Restful] REST API Design (0) | 2015.11.06 |