객체 지향 프로그래밍(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.