728x90
객체 지향의 4대 특성
1. 캡슐화
- 객체의 속성을 보호하기 위해 사용
- Method 설계
- 속성이 선언되었다면 해당 속성을 변경하는 method는 반드시 선언해야한다.
- Getter / Setter Method
- CRUD Method
- Business Logic Method
- 인스턴스 생명 주기 처리 Method
- 인스턴스 영구성 관리 Method
- 무결성
- 캡슐화 코딩 : 변수는
private
로 선언하고 메서드는public
으로 선언한다. Getter
/Setter
를 제외하고는 매개변수를 Validation 한 후에 메서드를 수행한다.
- 캡슐화 코딩 : 변수는
2. 상속
- 속성의 상속이 아닌 하위 개체로 내려갈수록 구체화된다.
- 프로그램 구조 이해도
- 최상위 클래스의 구조를 통해 하위 클래스의 동작을 이해할 수 있다.
- 재사용성 및 유지보수성 향상
- 상속을 이용하여 해당 클래스에 필요한 속성 및 메소드를 모두 정의하지 않고 상속을 받아서 사용할 수 있다.
- 확장성이 향상
- 일관된 형태의 클래스 추가가 가능하다.
3. 다형성
- 오버라이딩을 통해 구현이 가능하다.
- 하나의 형태에 대해 다양한 자료형으로 표현가능하다.
4. 추상화
- 객체지향에서의 추상화 : 모델링
- 공통부분 또는 특정 특성을 분리해서 재조합한다.
SOLID
- 객체 지향 설계 5원칙
1. SRP(Single Responsibility Principle)
- 단일 책임 원칙
- 클래스 하나가 하나의 기능만을 수행하도록 분리한다.
2. OCP(Open Closed Principle)
- 개방 폐쇄 원칙
- 상위 클래스 또는 인터페이스를 중간에 둠으로써 자신은 변화에 대해 폐쇄적이지만 인터페이스는 외부의 변화에 대해 확장을 개방한다.Ex. JDBC Interface
- DB 에 대한 설정을 바꿀때, 어플리케이션과 DB Driver 사이에 JDBC Interface를 두어 관리한다.
3. LSP(Liscov Substitution Principle)
- 리스코프 치환 원칙
- 서브 타입은 언제나 상위 타입으로 교체가 가능하다.
4. ISP(Interface Segregation Principle)
- 인터페이스 분리 원칙
- 프로젝트 요구 사항 및 설계에 따라 SRP 또는 ISP를 선택한다.
5. DIP(Dependency Inversion Principle)
- 의존 역전 원칙
- 자신보다 변하기 쉬운 것에는 의존하지 말아야 한다.
POJO JAVA(Plain Old Java Object)
- 순수한 자바 오브젝트
- 특징
- 특정 규약에 종속되지 않는다. : 외부에 의존성을 두지 않고 순수 JAVA로 구성이 가능해야 한다.
- 특정 환경에 종속되지 않는다. : 비즈니스 로직을 처리하는 부분에 종속적인 http request, session도 POJO의 위반이다.
- 특정 규약에 종속되지 않는다. : 외부에 의존성을 두지 않고 순수 JAVA로 구성이 가능해야 한다.
- Spring, Hibernate
- 객체지향적 설계 및 POJO를 지향한다.
디자인 패턴
- 자주 사용하는 설계 패턴을 정형화하여 이를 유형별로 가장 최적의 방법으로 개발을 할 수 있도록 정해두었다.
- Gof 디자인 패턴
- 생성 패턴
- Factory Method
- Singleton
- Prototype
- Builder
- Abstract Factory
- Chaining
- 구조 패턴
- Adapter
- Composite
- Bridge
- Decorator
- Facade
- Flyweight
- Proxy
- 행위 패턴
- Template Method
- Interpreter
- Iterator
- Observer
- Strategy
- Visitor
- Chain of responsibility
- Command
- Mediator
- State
- Memento
728x90
'🧑💻 Language > Java' 카테고리의 다른 글
[Java] 웹 개발 개론 (0) | 2022.05.17 |
---|---|
[Java] 자료 구조 (0) | 2022.05.03 |
[Java] 객체 지향 프로그래밍(3) (0) | 2022.04.26 |
[Java] 객체 지향 프로그래밍(2) (0) | 2022.04.19 |
[Java] 객체 지향 프로그래밍 (1) (0) | 2022.04.07 |