Written by
TY_K
on
on
Java 4대 특성 5대 원칙
OOP의 4가지 특징
1. 캡슐화
- 실제로 구현 부분을 외부에 드러나지 않도록 하는 것
- 변수와 메소드를 하나로 묶음
- 데이터를 외부에서 직접 접근하지 않고 함수를 통해서만 접근
ex) public, private, protected
public : 클래스 외부에서 접근 가능
private : 클래스 내부에서만 접근 가능
protected : 상속받은 자식 클래스에서만 접근 가능
2. 상속
- 자식 클래스가 부모 클래스의 특성과 기능을 물려받는 것
- 기능의 일부분을 변경하는 경우 자식 클래스에서 상속받아 수정 및 사용함
- 상속은 캡슐화를 유지, 클래스의 재사용이 용이하도록 해 준다.
3. 추상화
- 인터페이스로 클래스들의 공통적인 특성(변수, 메소드)들을 묶어 표현하는 것
4. 다형성
- 어떤 변수,메소드가 상황에 따라 다른 결과를 내는 것
- 오버로딩(Overloading) : 하나의 클래스에서 메소드의 이름이 같지만, 파라메터가 다른 것
- 오버라이딩(Overriding) : 부모 클래스의 메소드를 자식 클래스의 용도에 맞게 재정의하여 코드의 재사용성을 높임
OOP의 5원칙 (SOLID)
SRP (단일 책임의 원칙 : Single Responsibility Principle)
한 클래스는 하나의 책임만 가져야 한다.
- 결합도(Coupling)은 낮추고 응집도(Cohesion)은 높여야 한다
- 결합도
- 모듈(클래스)간의 상호 의존 정도를 나타내는 지표
- 결합도가 낮으면 상호 의존성이 줄어서 재사용 및 유지보수 유리
- 응집도
- 하나의 모듈 내부에 존재하는 구성 요소들의 기능적 관련성
- 응집도가 높은 모듈은 하나의 책임에 집중하고 독립성이 높아져 재사용 및 유지보수 유리
- 결합도
- 상속, 오버라이딩을 사용
OCP (개방 폐쇄의 원칙 : Open Close Principle)
확장에는 열려(Open) 있으나, 변경에는 닫혀(Closed)있어야 한다.
- 자신의 확장에는 열려 있고, 주변의 변화에 대해서는 닫혀 있어야 한다.
- 상위 클래스 또는 인터페이스를 중간에 두어 자신의 변화에 대해서는 폐쇄하고 인터페이스는 외부의 변화에 대해 확장성을 개방한다.
- JDBC, Mybatis, Hibernate 등, 그리고 JAVA에서는 Stream(Input,Output)에서 찾아볼 수 있다.
LSP (리스코브 치환의 원칙 : The Liskov Subsitution Principle)
프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다
- 하위 타입은 언제나 자신의 기반인 상위 타입으로 교체 할 수 있어야 한다.
- 예시 : 상위 : 자동차/운송수단 - 하위:아반테,그렌져
ISP (인터페이스 분리의 원칙 : Interface Segregation Principle)
특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
- 클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안된다.
- 인터페이스로 각 기능을 분리하여 사용하는 메서드에만 의존 관계를 맺는다.
- 프로젝트 요구사항과 설계에 따라 SRP(단일 책임 원칙) 또는 ISP(인터페이스분리원칙)을 선택한다.
DIP (의존성 역전의 원칙 : Dependency Inversion Principle)
추상화에 의존한다. 구체화에 의존하면 안된다.
- 자신보다 변하기 쉬운 것에 의존하지 말아야 한다.
- 개발폐쇄 원칙에서도 살펴본 내용