프로그래밍 언어 패러다임 3가지

원알렉스·2020년 5월 12일
2

OOP

  • Object Oriented Programming의 줄임말로, 객체 지향 프로그래밍이라고 부른다.

  • OOP는 프로그래밍 언어 패러다임의 하나로, 프로그래밍에서 필요한 데이터를 추상화 시켜서 상태(속성, 애트리뷰트)행위(메소드)를 가진 객체로 만들고, 그 객체간의 상호 작용을 통해 로직을 구성하는 방법이다.

  • 장점

    1. 다른 클래스를 가져와 사용할 수 있고, 상속 받을 수 있어 코드의 재사용성 증가
    2. 절차지향보다 유지보수가 간단
    3. 클래스 단위로 모듈화가 가능하며, 대형 프로젝트에 적합
  • 단점

    1. 처리 속도가 상대적으로 느리다
    2. 객체가 많으면 용량이 커진다
    3. 설계시 많은 노력과 시간이 필요하다

OOP의 6가지 키워드

  • 클래스
    • 현실 세계의 객체를 추상화시켜, 속성과 메소드로 정의한 것
  • 인스턴스
    • 클래스에서 정의한 것을 토대로 만든 실제 메모리상에 할당된 것. 실제 데이터.
  • 추상화
    • 객체 지향의 관점에서 클래스를 정의하는 것.
    • 불필요한 정보 외 중요한 정보만 표현함으로써, 공통의 속성과 기능을 묶어 이름을 붙이는 것.
  • 캡슐화
    • 코드를 수정 없이 재활용하는 것을 목적으로 함.
    • 클래스라는 캡슐에 기능과 특성을 담아 목적을 기준으로 묶는다.
    • 은닉화와의 차이
      • 은닉화는 캡슐화의 일부라고 볼 수 있으며,
        목적으로 묶인 캡슐 안을 사용자는 볼 수 없다는 것이 은닉화이다.
  • 상속
    • 클래스로부터 속성과 메소드를 물려 받는 것을 말함.
    • 다른 클래스를 가져와 수정 할 일이 있다면, 그 클래스를 직접 수정하는 대신 상속을 받아 변경하고자 하는 부분만 변경
  • 다형성
    • 하나의 변수명이나 함수명이 상황에 따라 다르게 해석 될 수 있음.
    • 오버로딩
      • 같은 이름의 메소드를 여러개 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술. 대표적으로 생성자 오버로딩이 있다.
    • 오버라이딩
      • 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의해서 사용하는 기술.

OOP의 5가지 법칙(SOLID)

  • Single Responsibility Principle
    • 단일 책임 법칙
    • 각 클래스는 목적을 하나씩만 가지고 그에 대한 책임을 져야 한다.
  • Open Close Principle
    • 개방 폐쇄 법칙
    • 각 클래스는 클래스에 대한 수정을 폐쇄하고, 확장에 대해 개방해야 한다.
    • 즉, 클래스를 수정해야 한다면 그 클래스를 확장한다. 다르게 말하면 상속을 통해 수정을 한다.
  • Liskov Substitution Principle
    • 리스코프 치환 법칙
    • 자식 클래스를 사용 중일때, 거기에 부모 클래스로 치환하여도 문제가 없어야 한다.
  • Interface Segregation Principle
    • 인터페이스 분리 법칙
    • 각 행위에 대한 인터페이스는 분리되어야 한다.
  • Dependency Inversion Principle
    • 의존성 역전 법칙
    • 상위 클래스가 하위 클래스에 의존하면 안된다는 법칙.

AOP

  • Abstract Oriented Programming의 줄임말로, 관점 지향 프로그래밍이라고 부른다.
  • 스프링 프레임워크의 핵심 요소 중에 하나이다.
  • 비즈니스 로직과 공통 모듈로 분리하고, 핵심 로직 사이사이에 공통 모듈을 잘 끼워넣는 것을 말한다.
  • 이때 공통 모듈을 코드 밖에서 설정된다는 것이 핵심.

응집도와 결합도

  • IOC: 결합도를 낮추는 방법
  • AOP: 응집도를 높이는 방법

AOP의 개념

  • 로직코드 + 부가코드(로딩, 예외처리, 트랜잭션 등)
  • 부가코드를 효율적으로 관리

AOP의 목적

  • 관심의 분리(Separation of Concerns)
    • 로직코드와 부가코드 분리
  • 핵심 관심(Core Concerns)
    • 해당 시스템의 핵심 가치와 목적, 모듈화, 추상화 가능
  • 횡단 관심(Crosscutting Concerns)
    • 모듈화로 쉽게 분리될 수 없는 요구사항

주요 용어

  • Aspect: 공통기능
  • Advice: Aspect의 기능 자체
  • Jointpoint: Advice를 적용해야되는 부분(필드, 메소드)
  • Pointcut: Jointpoint의 부분으로 실제로 Advice가 적용된 부분
  • Weaving: Advice를 핵심기능에 적용하는 행위

스프링에서의 AOP 구현

  • proxy를 이용한다.
  • client > proxy > target(핵심 기능)
    • client가 proxy한테 요청해서 공통기능을 실행
    • proxy가 다시 target으로 가서 핵심기능을 실행
    • 다시 공통 기능을 실행 하기 위해, proxy로 와서 공통기능 실행

FP

  • Functional Programming의 줄임말로, 함수형 프로그래밍이라고 부른다.
  • 함수형 프로그래밍은 선언형 프로그래밍으로, 어떻게(How)가 아닌 무엇(What)을 정의 한다.
  • C, Java 등의 언어는 명령형 프로그래밍이며, 알고리즘을 기술하고 목적은 기술하지 않는다.
  • 선언형은 반대로 알고리즘은 기술하지 않고 목적 위주로 기술하며, 데이터의 입력이 주어지고 데이터의 흐름을 추상적으로 정의한다.
profile
Alex's Develog 🤔

0개의 댓글