OOP(Object Oriented Programming, 객체지향 프로그래밍) : 모든 데이터를 현실에 빗대어 객체로 다루는 프로그래밍 기법. 객체지향 언어의 5가지 특징은 다음과 같다.

1 ) 캡슐화 (Encapsulation) : 데이터와 함수를 하나로 묶는다.

  • 데이터의 세부 내용이 객체 은닉된다. 즉, 데이터 변경으로 인한 에러가 줄어들고, 객체들간에 데이터를 자세히 알 필요가 없으므로 코드가 단순해진다.
  • 객체와 함수의 재사용이 쉽다.

2 ) 정보은닉 (Information Hiding) : private으로 선언한 데이터는 자기 자신을 통해서만(setter, getter) 접근 가능하다.

  • 각 객체간의 수정이 다른 객체에 미치는 영향을 최소화 한다.
  • 외부 객체의 직접 접근을 막아 프로젝트 확장 시 오류를 최소화 한다.

3 ) 추상화 (Abstraction) : 불필요한 부분은 생략하고 중요한 것에만 초점을 맞춰 모델로 만든다.

  • 복잡한 모델을 중요한 것 만 추려 추상화 함으로써 시스템 구조를 시각적으로 표현할 수 있다.
  • 완전한 시스템이 구축되지 않더라도 개략적으로 모델을 만들어 테스트 하고 살을 붙여나갈 수 있다.

4 ) 상속성 (Inheritance) : 부모클래스에 정의된 모든 것을 자식 클래스가 물려받는다.

  • 재정의 할 필요가 없어 코드 작성이 간결해진다.
  • 상속으로 인한 최소한의 규칙을 통해 프로젝트의 확장 시 오류를 최소화 한다.
  • 자식클래스에서 새로운 함수를 추가하거나 부모 클래스의 함수를 재정의(Overriding)해 사용할 수 있다.
  • 클래스의 재사용이 쉽다.

5 ) 다형성 (Polymorphism) : 호출하는 객체에 따라 다른 동작을 한다.

  • 하나의 클래스에서 같은 이름의 함수를 여러 개 가질 수 있다(Overloading). 호출하는 객체가 어떤 인풋 파라미터를 사용해 호출하냐에 따라 각자 다른 함수가 호출되게 한다. 즉, 비슷한 기능을 하는 다른 함수를 만들 때 불필요하게 너무 많은 함수명을 만들어 내 가독성이 떨어지는 문제를 해결할 수 있다.

 

객체지향 설계 5원칙 SOLID : sabarada.tistory.com/36 이건 아직 이해가 안 되서... 나중에 읽어보면 좋을 것 같다.

 

객체지향 설계의 5가지 원칙 S.O.L.I.D

안녕하세요. 오늘은 객체지향의 5가지 원칙, SOLID에 대해서 알아보도록하겠습니다. java의 특징은 많이 들어보셨을 것 같습니다. 캡슐화(Encapsulation), 상속(Inheritance), 다형성(Polymorphism) 이렇게 있죠

sabarada.tistory.com

 

AOP(Aspect Oriented Programming, 관점지향 프로그래밍) : OOP를 더욱 발전시키기 위한 개념이다. 하나의 소프트웨어가 하나의 거대한 OOP로써 설계, 프로그래밍 되었다면 이것을 각 기능별로 모듈화 해서 분리를 시키는 개념이다.

아래의 그림을 보면 이해가 쉽다.

기존의 단순 OOP에서는 계좌이체, 입출금, 이자계산의 서비스가 각각의 OOP로 프로그래밍 되었고, 각각의 OOP 모두 기능 작동을 위해 로깅, 보안, 트랜잭션을 하는 코드가 구현되어있었다.

그런데 계좌이체, 입출금, 이자계산 비즈니스 모두가 공통적으로 갖는 로직이 있는 것을 알 수 있다. 그렇다면 이것을 각각의 OOP 소스코드에서 제거하고 외부로 빼내 하나의 공통 모듈로 만들 수 있다. 이것이 바로 기존의 OOP에 AOP 관점을 더해 발전시킨 기법이다.

Core Concern(핵심 관심) : 각 서비스의 핵심 비즈니스 로직.   i.e. 계좌이체, 입출금, 이자계산
Crosscut Concern(횡단 관심) : 공통 모듈.   i.e. 로깅, 보안, 트랜잭션

AOP의 핵심은 공통 모듈을 분리시켜 해당 소스코드가 외부의 다른 클래스에서 존재하는 것이다.

AOP개념을 도입함으로써 얻는 장점

  • 각 비즈니스 로직마다 복붙을 통해 생겨난 중복 코드가 사라진다.
  • 각 비즈니스 로직을 구현하는 개발자는 자기 자신의 비즈니스 코드에만 집중할 수 있어 코드가 간결해지고, 유지보수가 쉬워진다.
  • 재활용성이 더욱 높아진다.

AOP의 구성 요소

  • JointPoint : Crosscut Concern(횡단 관심)을 삽입할 시점(when).
    i.e. 함수가 Before(실행 전), After(실행 후), AfterReturning(반환 후), AfterThrowing(예외 발생시), Around(실행 전과 후)
  • PointCut : 어떤 클래스의 어떤 함수에 삽입할건지. 삽입할 위치(where).
  • Aspect : JointPoint(when) + PointCut(where)
  • Advice : 무엇(what)을 삽입할건지.
  • Weaving : Aspect(when + where) + Advice(what). 위빙을 통해 지정된 객체를 새 Proxy 객체로 생성한다.
  • Proxy : Crosscut Concern(횡단 관심)이 Core Concern(핵심 관심)에서 직접 실행되지 않고 Proxy(대리인)을 생성해 실행된다.

 

 

 

 

Tag. 오버라이딩, 오버로딩

+ Recent posts