Light Blue Pointer
본문 바로가기
Developing/TIL(Develop)

Object Oriented Programming

by Greedy 2024. 5. 24.

객체 지향 프로그래밍(OOP, Object-Oriented Programming)은 소프트웨어 설계 패러다임의 하나로, 프로그램을 객체(object)의 집합으로 보고 이 객체들이 서로 상호작용하여 동작하도록 구성하는 방법론이다

객체는 데이터와 그 데이터를 처리하는 함수를 함께 묶어 놓은 일종의 모듈이다

OOP의 핵심 개념에는 클래스, 객체, 상속, 다형성, 캡슐화가 포함된다

핵심 개념

클래스(Class)

클래스는 객체를 정의하는 틀(template) 또는 청사진(blueprint)이다

클래스는 데이터(속성)와 행동(메서드)을 정의한다

**자동차**라는 클래스를 정의하면, 이는 모든 자동차가 가져야 할 속성과 행동을 포함한다

객체(Object)

객체는 클래스로부터 생성된 실체(instance)이다

객체는 클래스에서 정의한 속성과 행동을 가진다

자동차 클래스에서 생성된 실제 자동차 한 대가 객체이다

객체지향 프로그래밍의 4가지 특징

상속(Inheritance)

상속은 새로운 클래스가 기존 클래스의 속성과 메서드를 물려받는 기능이다

코드 재사용성을 높이고, 계층 구조를 만들어 더 체계적으로 코드를 관리할 수 있게 해준다

스포츠카 클래스는 자동차 클래스를 상속받아, **자동차**의 일반적인 속성과 메서드 외에도 **스포츠카**만의 고유한 속성과 메서드를 추가할 수 있다

다형성(Polymorphism)

다형성은 동일한 인터페이스나 메서드가 다양한 형태로 구현될 수 있는 능력을 의미한다

하나의 메서드가 여러 클래스에서 다른 방식으로 구현될 수 있다

**운전하다**라는 메서드는 자동차, 자전거, 버스 등에서 각기 다르게 구현될 수 있다

캡슐화(Encapsulation)

캡슐화는 객체의 데이터(속성)를 외부에서 직접 접근하지 못하도록 하고, 메서드를 통해서만 접근할 수 있도록 하는 것을 말한다

이를 통해 데이터의 무결성을 보호하고, 객체의 내부 구현을 숨길 수 있다

자동차 클래스의 속성인 **엔진상태**를 외부에서 직접 수정할 수 없고, **시동걸기**와 같은 메서드를 통해서만 변경할 수 있게 한다

추상화(Abstraction)

추상화는 객체 지향 프로그래밍에서 복잡한 시스템의 구체적인 구현 세부 사항을 숨기고, 중요한 부분만을 노출하여 단순화하는 것을 말한다.

불필요한 복잡성을 제거하고, 중요한 기능에 집중할 수 있게 한다.

동물 클래스를 추상화하여 걷다, ****소리내다****와 같은 메서드를 정의하고, 구체적인 동작은 개, ****고양이****와 같은 서브클래스에서 구현하도록 한다. 이를 통해 상위 클래스에서는 공통적인 인터페이스만 제공하고, 구체적인 동작은 서브클래스에서 다르게 정의할 수 있다.

 

참고 : OOP의 SOLID 원칙