Post

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

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

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

데이터를 추상화하여 상태와 행위를 가진 객체로 만들고, 객체들 간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.


객체란?

객체는 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미하며, 값을 저장할 변수와 작업을 수행할 메서드를 서로 연관된 것들끼리 묶어서 만든 것이다.

객체 지향 프로그래밍의 주요 특징은 다음 네 가지로 정리된다:

  • 추상화 (Abstraction)
  • 캡슐화 (Encapsulation)
  • 상속 (Inheritance)
  • 다형성 (Polymorphism)

추상화 (Abstraction)

  • 객체에서 공통된 속성과 행위를 추출하는 것
  • 공통의 속성과 행위를 찾아서 타입을 정의하는 과정
  • 불필요한 정보는 숨기고 중요한 정보만 표현하여 프로그램을 단순화

예시: 아우디, 니싼, 볼보는 모두 ‘자동차’라는 추상화된 개념으로 표현 가능. 각 자동차의 공통적인 속성과 기능을 추출하여 활용 가능.

추상화 이미지

왜 필요한가?

‘현대’와 같은 새로운 자동차 브랜드가 추가되더라도, 추상화된 ‘자동차’ 클래스를 기반으로 확장할 수 있어 기존 코드를 수정할 필요가 없다.


캡슐화 (Encapsulation)

  • 객체의 데이터(필드)와 동작(메서드)을 하나로 묶는 것
  • 구현 내용을 외부에 감추는 정보은닉의 개념을 포함
  • 낮은 결합도를 유지하는 설계 가능

캡슐화 이미지

변수와 메서드를 클래스라는 캡슐 안에 넣음으로써 재활용이 쉬워지고, 접근제어자를 활용해 외부로부터 보호할 수 있다.


상속 (Inheritance)

  • 상위 클래스의 속성과 행위를 하위 클래스가 물려받는 개념
  • 기존 클래스를 활용하여 재사용성을 높임
장점단점
- 코드 재사용으로 개발 생산성 증가
- 범용적인 구조 설계 가능
- 자료와 메서드의 자유로운 사용 및 추가
- 상위 클래스 변경 시 영향도가 큼
- 불필요한 클래스 증가 가능성
- 남용 시 설계 복잡성 증가

다형성 (Polymorphism)

  • 하나의 변수명이나 함수명이 상황에 따라 다양한 의미로 해석되는 개념
  • 같은 행위라도 다양한 형태로 구현 가능

오버라이딩 (Overriding)

  • 상위 클래스의 메서드를 하위 클래스가 재정의하여 사용하는 것

오버로딩 (Overloading)

  • 같은 이름의 메서드가 매개변수의 타입이나 개수에 따라 다르게 동작하는 것

다형성을 통해 하나의 인터페이스로 다양한 객체를 다룰 수 있게 되며, 유연하고 확장성 있는 코드 구조를 만들 수 있다.

This post is licensed under CC BY 4.0 by the author.