항해99 19일차 개발일지

홍당무·2022년 12월 7일
0

절차지향 프로그래밍 (Procedural Programming)

1. 컴퓨터가 해야 할 일을 '시간의 흐름'에 따라 순차적으로 프로그래밍하는 방식

2. 컴퓨터의 작업 처리 방식과 유사하기 때문에 객체지향 언어를 사용하는 것에 비해 더 빨리 처리되어 시간적으로 유리하지만, 유지보수 및 디버깅이 어려움

객체지향 프로그래밍 (Object-Oriented Programming)

특징

1. 캡슐화(Encapsulation)

- 데이터와 함수를 하나로 묶는 것

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

- 객체와 함수의 재사용이 쉽다.

2. 정보은닉 (Information Hiding)

- private으로 선언한 데이터는 자기 자신을 통해서만(setter, getter) 접근 가능하다.

- 각 객체간의 수정이 다른 객체에 미치는 영향을 최소화 한다.

- 외부 객체의 직접 접근을 막아 프로젝트 확장 시 오류를 최소화 한다.

3. 추상화 (Abstraction)

- 불필요한 부분은 생략하고 중요한 것에만 초점을 맞춰 모델로 만든다.

- 복잡한 모델을 중요한 것 만 추려 추상화 함으로써 시스템 구조를 시각적으로 표현할 수 있다.

- 완전한 시스템이 구축되지 않더라도 개략적으로 모델을 만들어 테스트 하고 살을 붙여나갈 수 있다.

4. 상속성 (Inheritance)

- 부모클래스에 정의된 모든 것을 자식 클래스가 물려받는다.

- 재정의 할 필요가 없어 코드 작성이 간결해진다.

- 상속으로 인한 최소한의 규칙을 통해 프로젝트의 확장 시 오류를 최소화 한다.

- 자식클래스에서 새로운 함수를 추가하거나 부모 클래스의 함수를 재정의(Overriding)해 사용할 수 있다.

- 클래스의 재사용이 쉽다.

5. 다형성 (Polymorphism)

- 호출하는 객체에 따라 다른 동작을 한다.

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

관점지향 프로그래밍 (Aspect Oriented Programming)

정의

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

Core Concern(핵심 관심) : 각 서비스의 핵심 비즈니스 로직. i.e. 계좌이체, 입출금, 이자계산

Crosscut Concern(횡단 관심) : 공통 모듈. i.e. 로깅, 보안, 트랜잭션

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

- 각 비즈니스 로직마다 복사를 통해 생겨난 중복 코드가 사라진다.

- 각 비즈니스 로직을 구현하는 개발자는 자기 자신의 비즈니스 코드에만 집중할 수 있어 코드가 간결해지고, 유지보수가 쉬워진다.

- 재활용성이 더욱 높아진다.

구성 요소

JointPoint : Crosscut Concern(횡단 관심)을 삽입할 시점(when).

ex) 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(대리인)을 생성해 실행된다.

profile
공부하는 백엔드 개발자

0개의 댓글

관련 채용 정보