OOP 3요소 와 5원칙

오하수·2026년 1월 20일

OOP(Object-Oriented Programming)

객체 및 이들간의 관계, 상호작용 등을 기반으로 프로그램을 설계하는 방법론 및 프로그래밍 패러다임의 일종으로, 넓게는 명령형 프로그래밍에 속한다.

프로그램을 단순히 데이터와 처리 방법으로 나누는것이 아니라, 프로그램을 수많은 객체라는 기본 단위로 나누고 이들의 상호 작용으로 서술하는 방식이다. 여기서의 객체란 메소드 변수를 가지며 특정 역할을 수행하도록 인간이 정의한 추상적인 개념이다.


객체지향의 3요소

1. 객체(Object)

  • 데이터(속성) + 기능(메서드)를 하나로 묶은 단위
    예) 학생 객체 -> 이름, 학번 + 수강신청(), 성적조회()

2. 클래스(Class)

  • 객체를 만들기 위한 설계도
    class Student{...}

3. 메시지(Message)

  • 객체 간 메서드 호출(요청)
    student.getScore()

객체지향의 4대 특징

캡슐화

-프로그램 내에서 같은 기능을 목적으로 작성된 코드를 모아서 다른 곳(클래스)에서 안보이게 숨기는 것 클래스에 정의된 속성(Attribue)는 숨기고 (private), 객체가 수행할 기능은 공개(Public)하는 것을 의미한다.

상속

-클래스 사이에 부모와 자식 클래스가 존재할 수 있다는 뜻이다. 자식 클래스는 상속받는 부모 클래스의 속성(변수) 및 기능(메소드, 함수)를 물려받는 것을 의미한다.

추상화

-객체의 공통적인 특징과 핵심 기능만을 뽑아내고, 불필요한 세부 구현을 숨기는 것을 의미한다. 이를 통해 구현에 대한 의존도를 낮추고 코드의 유지보수성과 확장성을 향상시킬 수 있다.

다형성

Overriding과 Overloading으로 나뉨
https://velog.io/@minjae-yun/Overload-VS-Override
자세한 설명은 위 사이트에서..


5원칙 SOLID

S -> SRP(단일 책임의 원칙: Single Responsibility Principle)

  • 하나의 클래스는 하나의 목적을 위해서 생성되며, 클래스가 제공하는 모든 서비스는 하나의 책임을 수행하는 데 집중되어 있어야 한다는 원칙입니다.

  • 이는 어떤 변화에 의해 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 함을 의미합니다.

  • SRP 원리를 적용하면 책임 영역이 확실해지기 때문에 한 책임의 변경에서 다른 책임의 변경으로의 연쇄작용에서 자유로울 수 있습니다.

  • 코드의 가독성 및 유지보수에 있어서 유리합니다.

  • 객체 지향 프로그래밍의 5원칙 중 나머지 4원칙의 기초가 되는 원칙이다.

O -> OCP(개방폐쇄의 원칙: Open Close Principle)

  • 소프트웨어의 구성요소(컴포넌트, 클래스, 모듈, 함수)는 확장에는 열려있고, 변경에는 닫혀있어야 한다는 원리이다.

  • 이것은 변경을 위한 비용은 가능한 줄이고 확장을 위한 비용은 가능한 극대화 해야 한다는 의미로, 요구사항의 변경이나 추가사항이 발생하더라도, 기존 구성요소는 수정이 일어나지 말아야 하며, 기존 구성요소를 쉽게 확장해서 재사용할 수 있어야 한다는 뜻이다.

  • 재사용 코드를 만드는 기반이며, OCP를 가능하게 하는 중요 메커니즘은 추상화와 다형성.

L -> LSP(리스코브 치환의 워칙: The Liskov Substitution)

  • 자식 클래스(서브 타입)는 언제나 자신의 부모 클래스(기반 타입)를 대체할 수 있다. 즉, 부모 클래스가 들어갈 자리에 자식 클래스를 넣어도 계획대로 잘 작동해야 한다는 것.

  • 상속의 본질인 원리

  • 이를 지키지 않을 경우 부모 클래스 본래의 의미가 변해서 is a 관계가 무너짐

I -> ISP(인터페이스 분리의 원칙: Interface Segregation Principle)

  • 한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다는 원리.

  • 어떤 클래스가 다른 클래스에 종속될 때에는 가능한 최소환의 인터페이스만을 사용해야한다.

D -> DIP(의존성역전의 워칙: Dependency Inversion Principle)

  • 구조적 디자인에서 발생하던 하위 레벨 모듈의 변경이 상위 레벨 모듈의 변경을 요구하는 위치관계를 끊는 의미의역전입니다.

  • 실제 사용 관계는 바뀌지 않으며, 추상을 매개로 메시지를 주고 받음으로써 관계를 최대한 느슨하게 만드는 원칙이다.

profile
오늘하루도수고하세용~

0개의 댓글