OOP, 다형성, SOLID에 대해

김민준·2024년 2월 19일
0

OOP 요약
객체 지향 설계가 가지는 특성들
SOLID

공부하며 느낀 점
참조한 페이지

OOP 요약

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

프로그램을 명령어들의 집합으로 보는 것이 아니라, 자신의 역할을 하는 객체들이 상호작용하는 것으로 보는 패러다임(시각)이다.

인터페이스 : 어떤 클래스가 구현해야할 메서드의 명세를 제공하는 것. 메서드의 시그니처(이름, 파라미터 타입, 반환 타입)을 정의한다. 명세를 제공함으로써 클래스와 객체가 다형성을 가지게 해준다.
클래스 : 데이터와 메서드를 실제로 구현하는 틀. 캡슐화를 통해 객체를 정의한다.
객체 : 클래스를 통해 메모리에서 만들어진 인스턴트(실체). 클래스에 명시 된 데이터와 메서드를 실제로 사용할 수 있다. 실제 작업을 수행한다.

객체 지향 설계가 가지는 특성들

  1. 캡슐화 Encapsulation : 은닉화를 위해 특정한 하나의 목적을 가진 데이터나 메소드를 하나로 묶는것을 의미한다.
    은닉화 Information hiding : private로 내부구조를 감추고, 외부에서 조작할 수 있는 정보는 public으로 공개한다.
    위의 두 특성을 이용하여 외부에서 데이터에 접근을 하지못하고 함수를 통해서만 접근할 수 있게 된다. 또한 외부의 간섭을 줄이고 모듈간의 결합도를 떨어뜨려 유지보수성을 높인다.
    사용자의 입장에서는 클래스들의 상세 내역을 알 필요 없이 제공되는 기능을 사용하면 된다.

    모듈 Module : 파일 단위의 구성
    객체 Object : 클래스를 바탕으로 메모리에 할당된 실체

  2. 상속 Inheritance : 부모 클래스의 변수와 메소드를 자식 클래스에서 사용 할 수 있고, 필요에 따라서 변경과 추가를 할 수 있는 것

  3. 다형성 Polymorphism : 여러 객체가 동일한 인터페이스를 공유하고 있을 때, 그를 통해 다양한 방식으로 작동할 수 있는 능력
    동적 바인딩 Dynamic Binding : 런타임에서 객체의 실제타입을 기반으로 메서드나 함수의 호출을 하는 것

  4. 추상화 Abstraction : 공통의 속성이나 기능을 묶어 이름을 붙이는 것, 기능을 분류하고 직관적인 이름을 붙이는 것이다. 유지보수의 용이성이 커진다.

SOLID

Single Responsibility Principle : 단일 책임 원칙
Open Closed Principle : 개방 폐쇄 원칙
Listov Substitution Principle : 리스코프 치환 원칙
Interface Segregation Principle : 인터페이스 분리 원칙
Dependency Inversion Principle : 의존 역전 원칙

객체지향 설계에서 지켜야할 원칙이다.

코드의 개발, 확장, 유지보수를 용이하게 하기 위한 원칙일 뿐이기 때문에, 프로그램이 개발의 목적에 맞게 작동하는 것이 더 중요하다고 한다.

SRP, 단일 책임 원칙 : 클래스는 하나의 책임(기능)만을 가져야한다. 변경이 있을 때 수정을 최소한으로 하기 위함이다.

OCP, 개방 폐쇄 원칙 : 클래스는 확장에는 열려있어야 하며, 수정에는 닫혀 있어야한다. 구체적으로 구현된 것이 아니라 추상화에 의존하는 것이다.

LSP, 리스코프 치환 원칙 : 서브타입은 언제든지 부모타입으로 교체할 수 있어야 한다. 자식 클래스의 인스턴스가 부모 클래스의 인스턴스로 대체되어도 문제가 없어야한다는 개념

ISP, 인터페이스 분리 원칙 : 인터페이스 단일 책임을 가져야한다. 인터페이스를 잘 분리해야하며, 분리한 뒤에는 또 다시 분리해서는 안된다.

DIP, 무언가를 참조해야한다면 그 대상의 사우이요소를 참조하라는 개념, 변화하기 더 어려운 것에 의존해서 의존성을 줄이고, 유연성과 재사용성을 향상시키는 것

공부하며 느낀 점

SOLID는 지키면 좋겠지만 지키기가 어려워 보인다. 그래도 숨쉬듯이 지킬 수 있는 게 좋은 프로그래머의 조건이지 않을까 생각이든다.

꼭 객체지향을 따르지 않더라도 유지보수성을 따른다면 저절로 지켜지지 않을까 싶은 생각도 들지만, 역시 한 씩은 이 글을 보면서 다시 되짚어보는(그리고 이 글고 고치는) 식으로 익혀봐야겠다.

참조한 페이지

객체지향 전반
객체 지향 프로그래밍, OOP의 개념과 특징
object-oriented programming (OOP)

다형성, 동적바인딩
다형성과 동적 바인딩

SOLID
💠-객체-지향-설계의-5가지-원칙-SOLID
객체지향 개발 5대 원리: SOLID
Fundamental Software Design Principles for Quality Coding [Part 1/3]
💠 완벽하게 이해하는 OCP (개방 폐쇄 원칙)

profile
node 개발자

0개의 댓글

관련 채용 정보