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의 위반이다.
  • 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