TIL

24.02.16

아리단길아조씨 2024. 2. 16. 21:36
728x90


좋은 설계를 하기 위해서 다양한 프로그래밍 패러다임과 아키텍처 패턴을
프로젝트에 도입하여, 체계적으로 깔끔한 코드 구조를 구현할 수 있다.

객체(Object)란? 

-  현실 세계의 물체나 개념을 소프트웨어 세계로 옮긴 것.
객체는 여러 속성과 행동(메서드)으로 구성된다.(객체는 정보= 데이터와 정보 처리해 주는 행동 = 함수 | 메서드를 가지고 있음.
레고 블록을 하나씩 조립해서 작품을 만들기 위해 객체 지향 프로그래밍을 사용한다

객체 지향(Object-Oriented)

- 책임과 권한을 가진 객체들이 서로 협력하여 필요한 기능을 수행하는 방법론
(여러 가지로 만들어진 객체들을 조립만 하면 된다)
- 크고 작은 복잡한 시스템을 효과적으로 분해, 구성하여 효율적으로 관리할 수 있게 도와줌

절차 지향적 소프트웨어와 객체 지향적 소프트웨어 구분방법
* 절차 지향적 코드 방법론: 우리가 일반적으로 코드를 작성할 때 사용을 함
(수행할 비즈니스 로직을 순차적으로 적어 놓은 것)

1. 캡슐화, 다형성, 상속을 지원하는가?
->  class로 객체를 생성하는가? (뭔 소리임 갑자기..?) -> 질문 요소
2. 데이터 접근 제한이 가능한가?
-> 특정 데이터에 대한 외부 접근을 제한하여 데이터의 안정성, 보안을 높여줌

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


프로그래밍 패러다임( Programming Paradigm): 프로그래밍의 방식이나 관점을 바탕으로 효율적으로 명확한 코드를 작성하는 방법임. => 보기 좋고 효율적인 코드를 작성하는 방법

프로그래밍 패러다임의 종류
1. 구조적 프로그래밍: 특정한 기능을 중심으로 개발을 하는 방법
2. 객체 지향 프로그래밍: 프로그램의 처리 단위가 객체인 방법
3. 함수형 프로그래밍: 함수를 중심적으로 개발하는 방법

객체 지향 프로그래밍(Object-Oriented Programming, OOP): 데이터(상태)와 그 데이터를 조작하는 메서드(프로세스)가 같은 모듈 내부에 배치되는 프로그래밍 방식

객체지향 프로그래밍의 특징
1. 코드를 추상화하여 작성하기 때문에 개발자가 더 직관적으로 사고할 수 있게 한다.
2. 자동차, 동물, 사물 등과 같은 현실 세계의 객체를 유연하게 표현이 가능하다.
3. 객체는 고유한 특성(데이터)을 가지고 있고, 특정한 기능(메서드)을 수행할 수 있다.

객체지향 프로그래밍을 사용해야 하는 이유
1. 객체지향 프로그래밍의 방식은 데이터(데이터의 속성)와 기능(메서드)이 밀접하게 연결되어 있기 때문에, 코드의 구조와 동작을 직관적으로 파악할 수 있다.
2. 문제가 발생했을 때, 문제가 발생한 부분의 객체만 확인하거나 수정만 하면 된다.
3. 객체지향의 특성으로 하나의 객체에 정의된 기능이나 데이터 구조는 다른 객체에서도 쉽게 재사용이 가능하다.
(관련이 있는 것을 만들 때 이미 만들어 놓은 객체를 사용할 수 있다는 내용임) => 재사용성, 확장성의 향상, 시간단축의 이점이 있음

객체 지향 프로그래밍의 핵심 원칙
1. 캡슐화(Encapsulation): 객체 내부의 세부적인 사항을 감추는 것(중요한 정보를 외부로 노출시키지 않도록 하는 것)
* JS는 완벽한 캡슐화를 지원하지 않기 때문에 TypeScript를 사용한다.
class 생성 시 접근 제어자 private를 사용하여 외부에서 접근을 할 수 없게 만든다.

2. 상속(Inheritance): 기존에 작성된 클래스를 재활용하여 사용가능함
이미 정의된 상위 클래스의 특징을 하위 클래스에서 물려받아 코드의 중복을 제거, 코드 재사용성을 증대시킴
* 상속을 통해 상위 클래스의 데이터와 메서드를 변경함으로써 전체 코드에 대한 일관성 유지를 할 수 있다.

3. 추상화(Abstraction): 객체에서 공통된 부분을 모아 상위 개념으로 새롭게 정의하는 것
불필요한 세부 사항을 생략, 중요한 특징만을 강조하여 코드를 더 간결하고 관리를 용이하게 만든다.
interface: 클래스를 정의할 때 메서드와 속성만 정의하여 클래스를 생성할 때 interface에 정의한 내용의 구현을 강제하여 코드의 일관성을 유지시킨다.

4. 다형성 (Polymorphism): 하나의 객체(클래스)가 다양한 형태로 동작한다.(객제가 가진 특성에 따라 같은 기능이 다르게 재구성되는 것을 의미) => 동일한 메서드나 함수 명을 사용해도 클래스마다 메서드가 다르게 동작하는 것이 핵심임


객체 지향 설계 5원칙(SOLID) - SOLID 원칙을 따르면 시간이 지나도 유지 보수와 확장이 쉬운 시스템 구축을 할 수 있다.
1. 단일 책임의 원칙 (Single Responsibility Principle, SRP): 하나의 객체는 단 하나의 책임을 가져야 한다.
- 클래스나 모듈을 변경할 이유가 단 하나뿐이어야 한다는 원칙, 적절한 클래스의 크기를 제시한다.
2. 개방-폐쇄 원칙 (Open-Closed Principle, OCP): 소프트웨어 엔티티 또는 개체(클래스, 모듈, 함수 등)는 확장에는 열려있지만 변경에는 닫혀 있어야 한다.
- 기존 코드에 영향을 주지 않고 소프트웨어에 새로운 기능이나 구성 요소를 추가할 수 있어야 한다는 것.
3. 리스코프 치환 원칙 (Liskov substitution principle, LSP) : 애플리케이션에서의 객체는 프로그램의 동작에 영향을 주지 않으면서, 하위 타입의 객체로 바꿀 수 있어야 한다.
- S가 T의 하위 유형이라면, 프로그램의 기능에 변화를 주지 않고서도 T타입의 객체를 S타입의 객체로 대체할 수 있어야 한다.
4. 인터페이스 분리 원칙 (Interface segregation principle, ISP): 클라이언트가 필요하지 않은 기능을 가진 인터페이스에 의존해서는 안되고, 최대한 인터페이스를 작게 유지해야 한다.
- 사용자가 필요하지 않은 것들에 의존하지 않도록, 인터페이스는 작고 구체적으로 유지해야 한다.
5. 의존성 역전 원칙 (Dependency Inversion Principle, DIP): 프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안 된다.
- 높은 계층의 모듈(도메인)이 저수준의 모듈(하부구조)에 직접 의존해서는 안된다.

 

 

 

'TIL' 카테고리의 다른 글

24.02.20  (0) 2024.02.21
24.02.19  (0) 2024.02.20
24.02.15  (0) 2024.02.16
24.02.14  (0) 2024.02.15
24.02.13  (0) 2024.02.14