프로그래밍 패러다임 (함수형, 객체지향, SOLID 원칙)

2024. 8. 10. 18:54· CS 지식
목차
  1. 함수형 프로그래밍
  2. 객체 지향 프로그래밍 (Object-Oriented Programing, OOP)
  3. 오버라이딩(overriding)
  4. 오버로딩 (overloading)
  5. 객체지향 설계 원칙 (SOLID)
728x90

 


함수형 프로그래밍

→ JS

순수 함수들을 블록처럼 쌓아 로직을 구현하고 고차 함수를 통해 재사용성을 높인 프로그래밍 패러다임

  • 순수 함수 : 출력이 입력에만 의존
  • 고차 함수 : 함수가 함수를 값처럼 매개변수로 받아 로직을 생성할 수 있는 것

함수형 프로그래밍은 순수 함수를 통해 side effect를 최대한 억제하여 오류를 피하고 프로그램의 안정성을 높이려는 노력의 한 방법

 

🔎 함수형 프로그래밍이 최근에 주목받는 이유 → 재사용성

 

 


객체 지향 프로그래밍 (Object-Oriented Programing, OOP)

프로그래밍에서 필요한 데이터를 추상화시켜서 상태와 행위를 가진 객체로 만들고, 객체들 간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법

  • 상태 : 어떤 상태 값을 나타내는 변수
  • 행위 : 그 행위를 하는 메서드

 

장점

  • 프로그램을 보다 유연하고 변경이 용이하게 만들 수 있음 
  • 각각 역할 단위로 분리하여 사용하여 협업 수월
  • 필요한 부분만 수정 가능하며 프로그램 유지보수가 쉬움
  • 코드의 재사용을 통해 반복적인 코드를 최소화하고, 코드를 최대한 간결하게 표현

 

특징

(상추캡다...)

 

상속(Inheritance)

  • 기존의 클래스를 재활용하여 새로운 클래스를 작성하는 것으로 속성과 행위를 물려줌

 

추상화(Abstraction)

  • 공통의 속성과 행위를 찾아서 타입을 정의하는 과정
  • 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단하게 만드는 것
    • 중요한 정보 → 객체의 공통적인 속성과 기능

 

캡슐화(Encapsulation)

  • 서로 연관있는 속성과 기능들을 하나의 캡슐로 묶는 것
  • 데이터의 보호와 은닉이 가능하게 함

 

다형성(Polymorphism)

  • 하나의 변수명, 함수명이 상황에 따라 다른 의미로 해석될 수 있는 것
  • 오버라이딩, 오버로딩

 


오버라이딩(overriding)

상위 클래스가 가진 메서드를 하위 클래스가 재정의해서 사용

즉, 같은 이름의 메서드가 상황에 따라 다른 역할 수행

→ 런타임 중 발생하는 동적 다형성

 


오버로딩 (overloading)

하나의 클래스 내에서 같은 이름의 메서드를 여러 개 중복하여 정의하는 것

같은 이름의 메서드가 인자의 개수나 자료형에 따라 다른 기능을 함

※ 매개변수의 개수, 순서, 데이터 타입 중 하나라도 다르면 됨

→ 컴파일 중 발생하는 정적 다형성

function 덧셈_후_정수_반환(int a, int b){
	return a + b
}

function 덧셈_후_정수_반환(double a, double b){
	return Math.trunc(a + b)
}

 

 


객체지향 설계 원칙 (SOLID)

단일 책임 원칙 (SRP, Single Resposibility Principle)

클래스는 단 하나의 책임(목적)만 가져야 함

※ 책임 = 기능 담당

 

클래스를 세분화하게 되면 복잡해져서, 100퍼센트 지킬 수는 없는 원칙이지만 최대한 따르기를 권장

 

 

개방-폐쇄 원칙 (OCP, Open Closed Principle)

확장에는 열려있어야 하며, 수정에는 닫혀있어야 함

즉, 기존의 코드는 잘 변경하지 않으면서도 확장은 쉽게 할 수 있어야 함

 

클래스를 수정해야 한다면 그 클래스를 상속(확장)하여 수정함

즉, 기본이 되는 클래스는 가만히 두고, 수정사항은 해당 클래스를 상속하는 클래스를 새로 만들어 반영

  • 부모 클래스 → 폐쇄
  • 상속받은 클래스 → 수정 & 개방

 

 

리스코프 치환 원칙 (LSP, Liskov Substitution Principle)

서브 타입은 언제나 부모 타입으로 교체할 수 있어야 함

즉, 상속된 클래스에서 부모 객체에 자식 객체를 넣어도 시스템이 문제없이 돌아가게 만드는 것

※ 다형성 원리를 이용하기 위한 원칙

부모 클래스에서 자식 클래스를 상속할 때 구조를 overriding 하여 변경하지 않아야 함

 

 

인터페이스 분리 원칙 (ISP, Interface Segregation Principle)

각 행위에 대한 인터페이스는 서로 분리되어야 함

하나의 일반적인 인터페이스보다 구체적인 여러 개의 인터페이스를 만들어야 함

 

 

의존 역전 원칙 (DIP, Dependency Inversion Principle)

상위 클래스가 하위 클래스에 의존하면 안 된다는 법칙

어떤 클래스를 참조해서 사용해야 하는 상황이 생긴다면, 그 클래스를 직접 참조하는 게 아니라 그 대상의 상위 요소(추상 클래스 / 인터페이스)로 참조하라는 원칙

부모 클래스는 하위 클래스와 치환은 되지만, 의존해서 변경되면 안 됨

독립성을 확실히 가지고 있어야 함

 

 

 

 

728x90

'CS 지식' 카테고리의 다른 글

로그인 인증 방식 (JWT & 세션)  (0) 2024.08.17
쿠키 & 세션 & 웹 스토리지  (0) 2024.08.17
프레임워크 vs 라이브러리  (0) 2024.08.11
디자인 패턴  (0) 2024.08.10
  1. 함수형 프로그래밍
  2. 객체 지향 프로그래밍 (Object-Oriented Programing, OOP)
  3. 오버라이딩(overriding)
  4. 오버로딩 (overloading)
  5. 객체지향 설계 원칙 (SOLID)
'CS 지식' 카테고리의 다른 글
  • 로그인 인증 방식 (JWT & 세션)
  • 쿠키 & 세션 & 웹 스토리지
  • 프레임워크 vs 라이브러리
  • 디자인 패턴
ZoD
ZoD
바쁘게 굴러가는 ZoD의 하루~
como siempre바쁘게 굴러가는 ZoD의 하루~
ZoD
como siempre
ZoD
  • 분류 전체보기 (173)
    • Daily (0)
    • Javascript (16)
      • 모던 자바스크립트 (46)
    • Typescript (8)
    • FrontEnd (7)
    • React (21)
      • tanstack query (1)
      • 라이브러리 (3)
    • Vue (33)
      • Nuxt (11)
      • Quasar (6)
    • CSS (12)
    • Storybook (8)
    • Figma (3)
    • CS 지식 (5)
    • Network (5)
    • 알고리즘 (2)
    • 사이드 프로젝트 (4)
      • ddangkong (4)
      • boncierge (0)
    • 개발, 근데 이제 헛소리를 곁들인 (1)
    • ETC (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

hELLO · Designed By 정상우.v4.2.2
ZoD
프로그래밍 패러다임 (함수형, 객체지향, SOLID 원칙)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.