[패캠강의] 1장_객체지향의 설계

2021. 12. 31. 17:18디자인 패턴

디자인 패턴에 대해 알아봅시다

디자인 패턴을 잘할 수 있는 방법?
경험, (삽질)이 디자인 설계를 실제로 늘 수 있게 도와줍니다. 설계를 여러번 실패하면서 코드를 짜봐야 알게됩니다.

객체지향설계

객체의 blue print가 클래스, 기능들이 메서드입니다.

추상화

어떤 영역에서 필요한 속성이나 기능을 추출하는 작업

인터페이스

객체를 클라이언트에 필요한 기능만 오픈할 수 있고 책임을 전달할 수 있는 매개? 필요한 기능만을 오픈한다는 건 객체지향의 캡슐화와 연관되어 있습니다.

상속성

일반적인 객체보다 구체적인 객체를 말합니다. 상위 클래스를 상속한 하위 클래스는 필수 기능들을 재정의 할수도 있습니다.

다형성

같은 코드가 다른 결과를 만들어 내는 메서드입니다.

응집도, 결합도

응집도가 높은 클래스는 단일 책임의 원칙에 입각한 기능들로 구성되어 있으며, 결합도가 높으면 다수 역할을 가진 클래스입니다.

SOLID 원칙

단일 책임의 원칙
객체의 클래스는 하나의 역할만 수행하도록 설게돼야 합니다.

개방 폐쇄의 원칙

추상 클래스, 인터페이스를 사용할 때 구현되는 원칙입니다. 객체 자신을 수정하지 않고 상위 클래스를 수정했을 때 변경되는 개방 폐쇄 원칙입니다.

e.g) 추상 팩토리 메서드, JDBC, I/O Stream

JDBC:

JDBC는 인터페이스로 이루어져 있으며 실 구현은 각 DB 벤더들이 도맡아 합니다. DB 벤더가 변경돼도, 벤더 사에서 제공하는 jar만 변경해주면 JDBC 인터페이스에서 변경되기 때문에 DAD라던지 JDBC 객체 내 클래스들을 수정할 필요가 없습니다.

I/O Stream:

화면, 파일, 메모리, 네트워크에서 텍스트를 읽어야 할 때 InputStream 추상클래스로 타입을 선언해주고 기능별로 유연하게 대응해서 사용하면 됩니다.

리스코프 치환원칙

하위 클래스는 상위 클래스로 교체될 수 있어야 합니다. (IS-A 관계)

상속이 아닌 코드 재사용을 할 경우엔 implements(HAS-A 관계)를 사용해야 합니다.

의존 역전 원칙

의존은 Concrete Class 보다 Abstract Class에 하는 것이 유연성을 보장할 수 있습니다.

e.g. Shipping -> Vehicle에 의존하는 것이 Land, Air, Sea에 의존하는 것보다 확장성에 장점을 가집니다.

인터페이스 분리원칙

클래스에 필요힌 기능들만 의존해서 사용할 수 있도록 인터페이스를 역할에 근거해 분리해 만들어야 합니다.

e.g. FireTruck은 Car의 ForkLifting()이란 메서드까지 상속할 필요가 없습니다.

클래스 다이어그램

주로 점, 선, 면으로 나타내고 관계 종류엔 집약, 합성, 의존이 있습니다. life time과 연관된 집약, 합성은 내부 멤버변수로 설정해 생성자가 초기화 될 때 함께 생성됩니다. 반면에 의존관계는 메서드로 만들어지고 외부 매개변수로 받아 기능합니다.


출처: 패스트캠퍼스 박은종의 객체지향 설계를 위한 디자인패턴