5가지 객체지향의 원칙
개발이야기 / 2008. 7. 3. 17:06
역시나.. 직무교육 중 정리해봅니다.
처음에는 열심히 집중하였으나
시간이 갈수록 집중력이 저하되면서
정리한 내용이 적어지고 있습니다. -_-a
긴 시간동안의 교육이라... 어쩔수가 없네요. 쩝..
아래는.. 또.. 대충.. 적어본 내용들입니다.
* 클래스 상속보다는 객체 합성을 사용하라
처음에는 열심히 집중하였으나
시간이 갈수록 집중력이 저하되면서
정리한 내용이 적어지고 있습니다. -_-a
긴 시간동안의 교육이라... 어쩔수가 없네요. 쩝..
아래는.. 또.. 대충.. 적어본 내용들입니다.
* 클래스 상속보다는 객체 합성을 사용하라
#LSP => Liskov Substitution Principle
: IS-A 관계를 만족하도록 상속해야한다.
: DBC 역시 LSP를 위반한다.
void addSuperHeroes(List <String> members) {
members.add("Superman");
members.add("Batman");
members.add("Mr.Hong");
}
String [] members = {"aaa", "bbb", "ccc"};
addSuperHeroes(Arrays.asList(members));
members.add("Superman");
members.add("Batman");
members.add("Mr.Hong");
}
String [] members = {"aaa", "bbb", "ccc"};
addSuperHeroes(Arrays.asList(members));
: "정사각형은 직사각형이다."라는 것은 논리적으로는 정상이지만 LSP를 위반하는 결과를 가진다.
:명백한 LSP위반을 제외한 나머지 처리는 연기시키는 것이 최선이다.
#Design By Contract (DBC)
: 계약에 의한 설계
1. 사전 조건
- (입력조건) 메소드를 실행하기 위해 만족해야 하는 조건.
- 원래의 사전 조건과 같거나 더 약한 수준으로만 대체.
2. 사후 조건
- (출력조건) 메소드가 실행된 후 만족해야 하는 조건.
- 원래의 사후 조건과 같거나 더 강한 수준으로만 대체.
#SRP (Single Responsibility Principle)
: 단일 책임의 원칙
: 관계가 없는 것은 따로 떼어내라.
: 서로 연관이 있는 기능이 하나의 클래스로 결합되어야한다. => High cohesion
: 책임을 너무 세분하면 오히려 응집력이 떨어직 된다.
: 미리 변경을 예상하지말고
변경이 명확하거나 실제 변경이 일어나는 경우에만 분리하도록!
#ISP (Interface Segregation principle)
: 클래스의 재사용성 증가.