2024. 2. 16. 23:27ㆍ공부/내배캠 TIL
목차
1. 학습 내용
1. 프로그래밍 패러다임
2. 객체 지향 프로그래밍(OOP)
3. 객체 지향 설계 5원칙(SOLID)
4. 객체 지향 설계 원칙을 통한 이
2. 내용 정리
01. 객체 지향
1) 좋은 설계 : 요구 기능을 정확히 수행하면서, 이해와 수정이 쉬운 코드.
= 구현을 위해 프로그래밍 패러다임과 아키텍쳐 패턴 도입이 필요.
2) 객체 : 데이터[속성]와 행동[메서드]를 가진 물체/개념
3) 객체 지향 : 기능이 아닌 객체를 구성요소로 삼아 각 객체를 도출하고, 역할을 명확하게 정의하는 방법론.
= 책임과 권한을 가진 객체들이 협력하여 기능을 수행.
4) 절차지향 vs 객체지향
1. 캡슐화, 다형성, 상속 지원 = 객체지향 / 미지원 = 절차지향
2. 데이터 접근 제한 지원 = 객체지향 / 미지원 = 절차지향
02. 객체 지향 프로그래밍(Object-Oriented Programming)
1) 프로그래밍 패러다임 : 프로그래밍 방식이나 관점. 효율적이고 명확한 코드를 작성하는 방법
1. 구조적 프로그래밍 : 기능 중심적 개발
2. 객체 지향 프로그래밍 : 객체 단위 처리 방식의 프로그래밍
3. 함수형 프로그래밍 : 함수를 중심으로 개발. / 객체지향과 반대 성향?
2) 객체 지향 프로그래밍(OOP)
상태(데이터)와 프로세스(메서드)가 같은 모듈 내부에 배치되는 프로그래밍 방식
- 코드를 추상화하여 더욱 직관적으로 사고할 수 있게 한다.
- 현실 객체를 유연하게 표현 가능
- 고유한 특성을 가지고 특정 기능을 수행
3) 코드 작성 목표
1. 가독성이 좋아야 한다.
2. 재사용성이 높아야 한다.
3. 유지보수가 쉬워야 한다.
API를 만들 때 마다 동일 코드를 여러곳으로 분산시키면 로직 수정시 모든 코드를 일일히 찾아 수정해야함.
-> 문제 발생을 빠르게 인지하고, 어느 코드에서 오류가 났는지 빠르게 찾아, 빠르게 고쳐 개발 시간을 최대한 줄여야 한다.
4) 객체 지향 프로그래밍을 사용해야 하는 이유
데이터와 기능이 밀접하게 연결되어 코드의 구조와 동작을 직관적으로 파악할 수 있음.(특정 기능 고장시 특정 객체만 살펴보면 됨)
하나의 객체에 정의된 기능이나 데이터 구조를 다른 객체에서도 쉽게 재사용 가능.(재사용성과 확장성 향상)
03. 객체 지향 프로그래밍의 핵심 원칙
1) 캡슐화(Encapsulation)
중요한 정보를 외부로 노출시키지 않도록 만드는 것
2) 상속 (Inheritance)
하나의 클래스가 가진 특징을 다른 클래스가 그대로 물려 받는 것
3) 추상화 (Abstraction)
공통 부분을 모아 상위 개념으로 새롭게 정의 - 불필요한 세부 사항 생략
4) 다형성 (Polymorphism)
하나의 객체가 다양한 형태로 동작하는 것(객체 특성에 따라 같은 기능이 다르게 재구성됨)
04. 객체 지향 설계 5원칙(SOLID)
1) 객체 지향 설계 5원칙
- 단일 책임의 원칙 (Single Responsibility Principle, SRP)
- 개방-폐쇄 원칙 (Open-Closed Principle, OCP)
- 리스코프 치환 원칙 (Liskov substitution principle, LSP)
- 인터페이스 분리 원칙 (Interface segregation principle, ISP)
- 의존성 역전 원칙 (Dependency Inversion Principle, DIP)
-> 유지 보수와 확장이 쉬운 시스템 구축을 위해
2) 단일 책임의 원칙 (Single Responsibility Principle, SRP)
하나의 객체는 하나의 책임을 져야 한다. (변경의 이유가 단 하나여야 한다.)
3) 개방-폐쇄 원칙 (Open-Closed Principle, OCP)
확장에는 열려 있으나, 변경에는 닫혀 있어야 한다. (기존 코드에 영향을 주지 않고 기능이나 요소 추가 가능해야함.)
4) 리스코프 치환 원칙 (Liskov substitution principle, LSP)
객체는 프로그램 동작에 영향을 주지 않으면서, 하위 타입의 객체로 변경 가능해야 한다.
(부모 자식 클래스가 존재할 때, 서로를 바꾸더라도 프로그램에서 오류가 발생하지 않아야 함)
5) 인터페이스 분리 원칙 (Interface segregation principle, ISP)
특정 클라이언트를 위한 여러 범용 인터페이스 여러개가 범용 인터페이스 하나보다 좋다.
(인터페이스는 작고 구체적으로 유지되어야 한다.)
6) 의존성 역전 원칙 (Dependency Inversion Principle, DIP)
상위 계층 모듈이 저수준 모듈에 직접 의존해서는 안된다.
3. 생각 정리
"자바스크립트는 [객체 기반 스크립트 언어]이다."
"파이썬은 [객체 지향 언어]이다."
파이썬이 다루는 모든 것이 객체이다.
객체의 속성을 attribute, 행동을 method라 부른다.
class를 사용해 객체를 생성
JS에서는 원시타입을 제외한(원시타입 또한 객체로서의 특징을 함께 가지긴 한다.)
참조타입(객체, 배열, 함수등)은 객체이다.
객체의 속성을 property, 행동을 method라 부른다.
객체 리터럴, 함수 생성자, 클래스 등을 통해 객체를 생성한다.(대격변의 ES6가 js를 어렵게 만들었다...)
js학습 이전에 배웠던 파이썬과 비교하며 유사점과 차이점을 통해 수월하게 학습할 수 있었다.
둘 모두 배워둔 나는 사실 웹개발의 괴물이 아닐까?
맞았으면 좋겠다...
'공부 > 내배캠 TIL' 카테고리의 다른 글
[Node.js_4기] TIL : 트러블 슈팅 - 하루 회고 - (24/02/26) (0) | 2024.02.26 |
---|---|
[Node.js_4기] TIL : Layered Architecture Pattern (yy/mm/dd) (0) | 2024.02.19 |
[Node.js_4기] TIL : 뉴스피드 프로젝트 회고 (24/02/14) (1) | 2024.02.15 |
[Node.js_4기] TIL : Nodemailer (24/02/13) (0) | 2024.02.13 |
[Node.js_4기] TIL : Refresh Token 토막글 (24/02/08) (1) | 2024.02.08 |