본문 바로가기

JAVA/기초

객체지향 4가지 핵심요소와 설계 5원칙(객체지향설계 SOLID)

[1]. 캡슐화

목적: 객체의 속성을 보호하기 위해서 사용.

 

Method 설계

 

장점:

1.객체지향의 패러다임 중 하나인 추상화를 제공

단순 호출만으로 해당 기능을 실행 할 수 있고, 이를 통해서 객체 단위로 프로그램 설계가 가능.

 

2. 재 사용성 향상

한 객체에 관련된 속성 및 Method는 모두 캡슐화의 형태로 제공됨으로, 객체의 모듈성과 응집도가 높아진다. 이를 통하여 재사용성이 높아진다.

절차적 프로그래밍에서 Method를 재사용한다면, 함수가 참조하고 있는 전역변수 및 내부에서 호출하는 Method가 미치는 영향을 모두 신경써야하나 객체의 경우는 단일 객체에만 영향을 주기에 재 사용성이 높다.

 

3. 유지보수의 효율성이 향상 된다.

 

무결성

 

보통의 캡슐화 코딩이라고 하면 주로 변수는 private으로 Method는 public으로 선언하는 형태를 가진다.

 

이는 객체의 무결성을 위한 것, Getter/Setter를 제외하고는 public method는 입력된 매개변수를 Validation을 한 후에 실행하는 것을 기본으로 한다.

 

Validation을 통하여, 객체의 값을 바꾸거나, 값의 대한 유효성을 가질 수 있다.

 

[2] 상속

객체지향의 상속은 속성의 상속이 아닌 하위로 내려갈 수록 구체화 되는 것을 의미.

 

상속의 효과

1. 프로그램 구조에 대한 이해도 향상, 최상위 클래스의 구조를 하위 클래스의 동작을 이해 할 수 있다.

2. 재사용성 향상: 해당 클래스에 필요한 속성 및 메소드를 모두 정의 하지 않고 상속을 받아서 사용 가능.

3. 확장성 향상: 일관된 형태의 클래스 객체를 추가 할 수 있어, 간단하게 확장이 가능.

4. 유지보수성 향상: 각 객체마다, 자신의 메소드를 정의 하고 있다면, 코드 수정에 많은 작업이 필요, 상속을 한다면 일관된 형태로 작성이 가능.

 

[3] 다형성

다형성은 오버라이딩을 통해 구현.

정의: 하나의 개체가 여러 개의 형태로 변화하는 것을 의미.

 

[4] 추상화

객체지향에서의 추상화는 모델링.

구체적으로 공통적인 부분, 또는 특정 특성을 분리해서 재조합 하는 부분이 추상화.

다형성, 상속 모두 추상화에 속한다.

 

응집도와 결합도

 

좋은 소프트웨어 설계를 위해서는 결합도는 낮추고 응집도는 높아야 한다.

 

결합도: 모듈(클래스)간의 상호 의존 정도를 나타내는 지표로써 결합도가 낮으면 모듈간의 상호 의존성이 줄어들어서 객체의 재사용 및 유지보수가 유리하다.

 

응집도: 하나의 모듈 내부에 존재하는 구성 요소들의 기능적 관령성으로 응집도가 높은 모듈은 하나의 책임에 집중하고 독립성이 높아져, 재사용 및 유지보수가 용이하다.

 

1. SRP(Single Responsibility Principle) 단일 책임 원칙

- 어떠한 클래스를 변경해야 하는 이유는 한가지 뿐 이여야 한다.

응집도가 낮은 예
응집도가 높은 예(단일 책임 원칙 적용)

 

2. OCP(Open Closed Principle) 개방 폐쇄 원칙

자신의 확장에서 열려 있고, 주변의 변화에 대해서는 닫혀 있어야 한다.

상위 클래스 또는 인터페이스를 중간에 둠으로써, 자신은 변화에 대해서는 폐쇄적이지만, 인터페이스는 외부의 변화에 대해서 확장을 개방해 줄 수 있다.

 

3. LSP(Liskov Substitution Principle)리스코프 치환 원칙

-서브 타입은 언제나 자신의 기반(상튀)타입으로 교체 할 수 있어야 한다.

자식 타입이 부모 타입으로 교체될 수 있어야 LSP를 잘 지켰다고 할 수 있다.

 

4. ISP(Interface Segregation Principle) 인터페이스 분리 원칙

클라이언트는 자신의 사용하지 않은 메서드에 의존 관계를 맺으면 안된다.

프로젝트 요구 사항과 설계에 따라서 SRP/ ISP를 선택한다.

 

인터페이스를 분리하여 구현하자.

 

5. DIP(Dependency Inversion Principle) 의존 역전 원칙

자신보다 변하기 쉬운 것에 의존하지 말아야 한다.

 

SOLID(객체 지향 설계)는 객체 지향 4대 특성에 기반함으로써 유사한 모양을 가지고 있다.