객체지향 설계 편집하기

IT위키

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.

편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.

최신판 당신의 편집
3번째 줄: 3번째 줄:
;Object Oriented Designing; Object Oriented Architecting
;Object Oriented Designing; Object Oriented Architecting


==특징==
== 특징 ==


*객체지향 설계에서 중요한 것은 시스템을 구성하는 객체와 속성, 연산을 정의하는 것이다.
* 객체지향 설계에서 중요한 것은 시스템을 구성하는 객체와 속성, 연산을 정의하는 것이다.
*객체지향 설계에서는 주어진 객체의 특성을 분석하여 공통된 특징을 갖는 슈퍼클래스를 생성하는 추상화 기법을 통해 객체의 설계 비용과 시간을 줄일 수 있다.
* 객체지향 설계에서는 주어진 객체의 특성을 분석하여 공통된 특징을 갖는 슈퍼클래스를 생성하는 추상화 기법을 통해 객체의 설계 비용과 시간을 줄일 수 있다.
*객체지향 설계에서는 캡슐화를 통해 객체의 세부내용 변경에 의해 발생될 수 있는 오류의 파급을 줄일 수 있다.
* 객체지향 설계에서는 캡슐화를 통해 객체의 세부내용 변경에 의해 발생될 수 있는 오류의 파급을 줄일 수 있다.


==[[객체지향 설계 원칙|객체지향 설계 5원칙]]==
==5원칙==
'''단일 책임 원칙(Single Responsiblity Principle; SRP)'''
 
;줄여서 SOLID라고 부른다.
 
===단일 책임 원칙===
 
;Single Responsiblity Principle; SRP


*소프트웨어의 컴포넌트는 단 하나의 책임만을 가져야 한다.
*소프트웨어의 컴포넌트는 단 하나의 책임만을 가져야 한다.


'''개방 폐쇄 원칙(Open Close Principles; OCP)'''
====예시====
 
;AS-IS
 
*복합기 Class
**copy()
**scan()
 
;TO-BE
 
*복사기 Class { copy() }
*스캐너 Class { scan() }
 
===개방 폐쇄 원칙===
 
;Open Close Principles; OCP


*확장에 대해선 열려 있어야 하고 수정에 대해선 닫혀 있어야 한다.
*확장에 대해선 열려 있어야 하고 수정에 대해선 닫혀 있어야 한다.
*기존의 코드를 변경하지 않고(Closed) 기능을 수정하거나 추가할 수 있도록(Open) 해야 한다.
*기존의 코드를 변경하지 않고(Closed) 기능을 수정하거나 추가할 수 있도록(Open) 해야 한다.


'''리츠코프 치환 원칙(Liskov Substitution Principle; LSP)''')
====예시====
 
*Class Car { drive() }
*확장은 허용'''(O)''': Class SUV() extends Car
**override drive();
**new method stop();
*변경엔 폐쇄'''(X)''': Class Plane extends Car
**change drive() to fly();
 
===리츠코프 치환 원칙===
 
;Liskov Substitution Principle; LSP


*자식 클래스는 부모클래스에서 가능한 행위를 수행할 수 있어야 한다.
*자식 클래스는 부모클래스에서 가능한 행위를 수행할 수 있어야 한다.


'''[[인터페이스 분리의 원칙]](Interface Segregation Principle; ISP)'''
====예시====
 
*Class SUV extends Class CAR { run() }
*SUV suv = new SUV();
*CAR car = (CAR)suv;
*car.run();
 
===[[인터페이스 분리의 원칙]]===
 
;Interface Segregation Principle; ISP


*자신이 사용하지 않는 메서드는 구현하지 않도록 해야 한다.
*자신이 사용하지 않는 메서드는 구현하지 않도록 해야 한다.
29번째 줄: 69번째 줄:
*하나의 일반적인 인터페이스 보단 여러 개의 구체적인 인터페이스가 낫다.
*하나의 일반적인 인터페이스 보단 여러 개의 구체적인 인터페이스가 낫다.


'''[[의존관계 역전 원칙]](Dependency Inversion Principle; DIP)'''
====예시====
 
;AS-IS
 
*Interface 이동체
**drive();
**fly();
**sail();
**stop();
 
;TO-BE
 
*Interface 자동차 { drive(); stop(); }
*Interface 비행기 { fly(); stop(); }
*Interface 배 { sail(); stop(); }
 
===[[의존관계 역전 원칙]]===
 
;Dependency Inversion Principle; DIP


*의존 관계를 맺을 때, 변화하기 쉬운것 보단 변화하기 어려운 것에 의존해야 한다.
*의존 관계를 맺을 때, 변화하기 쉬운것 보단 변화하기 어려운 것에 의존해야 한다.
35번째 줄: 93번째 줄:
*DIP를 만족한다는 것은 의존관계를 맺을 때, 구체적인 클래스보다 인터페이스나 추상 클래스와 관계를 맺는다는 것을 의미
*DIP를 만족한다는 것은 의존관계를 맺을 때, 구체적인 클래스보다 인터페이스나 추상 클래스와 관계를 맺는다는 것을 의미


== 같이 보기 ==
====예시====
 
;아래와 같이 하면 Car 클래스는 '겨울 타이어'라는 하위 클래스에 의존성을 가지게 된다. (의존성 역전)
 
*Class Car {
**WinterTire wt = new WinterTire();
**setTireModel(String model) {
***wt.model = model;
**}
*}
 
;아래와 같이 하면 타이어에 대한 의존성이 줄어든다.


* [[객체지향 기법]]
*Class Car {
* [[객체지향 분석 방법론]]
**Tire wt = null;
* [[객체지향 언어]]
**setTire(Tire t) {
***wt = t;
**}
*}
IT위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 IT위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요!
취소 편집 도움말 (새 창에서 열림)