블로그 이전했습니다!
https://computasha.com/basic/term/객체+지향+프로그래밍%2C+OOP의+개념과+특징




프로그래밍 패러다임과 함수형 프로그래밍에 관해서는 여기를 참고해주세요!


OOP란?

객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, ‘객체’들의 상호작용(메시지 주고받기, 데이터 처리 등)으로 프로그램 로직을 구성하는 프로그래밍 패러다임이다.


💡 프로그래밍 패러다임

프로그래밍 패러다임(Programming Paradigm)은 프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를 어떻게 작성할지 결정하는 역할을 한다. 새로운 프로그래밍 패러다임을 통해서는 새로운 방식으로 생각하는 법을 배우게 되고, 이를 바탕으로 코드를 작성하게 된다.


OOP의 특징

1. 캡슐화, Encapsulation 💊

한 객체가 특정한 하나의 목적을 위해 필요한 데이터나 메소드를 하나로 묶는 것을 의미한다

  • 데이터는 외부에서 직접 접근을 하면 안되고 함수를 통해서만 접근해야 한다

2. 은닉화, Information hiding 🥷

캡슐화의 목표. 내부 구조는 private하게 감춰두고 외부에서 조작할 수 있는 정보만 public으로 공개한다

→ 바깥 간섭으로 인해 발생하는 오류 방지
(내부의 구현은 감추고 모듈 내에서의 응집도를 높이며, 외부로의 노출을 최소화하여 모듈 간의 결합도를 떨어뜨려 유연함과 유지 보수성을 높인다)

→ 다른 사람의 클래스 객체를 다 뜯어볼 필요가 없어진다. 제공되는 기능 그대로 사용하면 된다


3. 상속, Inheritance 👪

기존 메소드와 변수를 물려받되, 필요한 기능을 더 추가하거나 나(자식클래스)에게 맞게 재정의하는 방법

상속과 인터페이스를 이해하는데 가장 큰 도움이 된 영상에 나왔던 예시
상속과 인터페이스 상속이 👪 이런 느낌이라면, 인터페이스는 👬 이런 느낌.

  • 보통 상속에서는 다중 상속은 안되거나 제한이 있는데(클래스 상속 관계에 혼란을 줄 수 있어서), 인터페이스는 이에 대해 자유롭다
  • 날기 인터페이스를 implements 하는 경우, 반드시 날기 인터페이스에 있는 메소드를 정의해야 한다
  • 인터페이스의 경우 implements된 모든 클래스 객체를 하나로 묶어서 한번에 명령 할 수 있다 → 짱 편함

e.g. 박쥐와 날다람쥐는 포유류 클래스로부터 새끼 수 데이터, 수유하는 방법 메소드와 같은 내용을 상속받되, 원하는 내용을 추가하거나 재정의할 수 있다. 그리고 공통적으로 날기 인터페이스를 implements 했기 때문에 이 인터페이스에 있는 날기 메소드를 각자 나는 방법에 맞게 정의해야 한다.


4. 추상화, Abstraction ⛰️

공통의 속성이나 기능을 묶어 이름을 붙이는 것이다

→ 보통 객체 지향 프로그래밍에서 클래스를 정의하는 걸 추상화라고 생각하면 된다


5. 다형성, Polymorphism 🎭

하나의 변수명이 상황에 따라 다른 의미로 해석될 수 있다는 것을 뜻한다

  • 일반적으로 오버라이딩 혹은 오버로딩을 의미한다

6. 동적 바인딩 ⛓️

runtime에 값에 따라 변수 데이터 타입, 호출될 함수가 결정된다

  • 대부분의 객체 지향 언어가 동적 바인딩을 지원하지만 에이다 같은 예외도 있다

→ 자세한 내용은 다음 글에..!
‘정적/동적 바인딩, 정적/동적 타입’