객체 지향 프로그래밍(OOP, Object-Oriented Programming)은 소프트웨어 설계 패러다임의 하나로, 프로그램을 객체(object)의 집합으로 보고 이 객체들이 서로 상호작용하여 동작하도록 구성하는 방법론이다
객체는 데이터와 그 데이터를 처리하는 함수를 함께 묶어 놓은 일종의 모듈이다
OOP의 핵심 개념에는 클래스, 객체, 상속, 다형성, 캡슐화가 포함된다
핵심 개념
클래스(Class)
클래스는 객체를 정의하는 틀(template) 또는 청사진(blueprint)이다
클래스는 데이터(속성)와 행동(메서드)을 정의한다
**자동차**라는 클래스를 정의하면, 이는 모든 자동차가 가져야 할 속성과 행동을 포함한다
객체(Object)
객체는 클래스로부터 생성된 실체(instance)이다
객체는 클래스에서 정의한 속성과 행동을 가진다
자동차 클래스에서 생성된 실제 자동차 한 대가 객체이다
객체지향 프로그래밍의 4가지 특징
상속(Inheritance)
상속은 새로운 클래스가 기존 클래스의 속성과 메서드를 물려받는 기능이다
코드 재사용성을 높이고, 계층 구조를 만들어 더 체계적으로 코드를 관리할 수 있게 해준다
스포츠카 클래스는 자동차 클래스를 상속받아, **자동차**의 일반적인 속성과 메서드 외에도 **스포츠카**만의 고유한 속성과 메서드를 추가할 수 있다
다형성(Polymorphism)
다형성은 동일한 인터페이스나 메서드가 다양한 형태로 구현될 수 있는 능력을 의미한다
하나의 메서드가 여러 클래스에서 다른 방식으로 구현될 수 있다
**운전하다**라는 메서드는 자동차, 자전거, 버스 등에서 각기 다르게 구현될 수 있다
캡슐화(Encapsulation)
캡슐화는 객체의 데이터(속성)를 외부에서 직접 접근하지 못하도록 하고, 메서드를 통해서만 접근할 수 있도록 하는 것을 말한다
이를 통해 데이터의 무결성을 보호하고, 객체의 내부 구현을 숨길 수 있다
자동차 클래스의 속성인 **엔진상태**를 외부에서 직접 수정할 수 없고, **시동걸기**와 같은 메서드를 통해서만 변경할 수 있게 한다
추상화(Abstraction)
추상화는 객체 지향 프로그래밍에서 복잡한 시스템의 구체적인 구현 세부 사항을 숨기고, 중요한 부분만을 노출하여 단순화하는 것을 말한다.
불필요한 복잡성을 제거하고, 중요한 기능에 집중할 수 있게 한다.
동물 클래스를 추상화하여 걷다, ****소리내다****와 같은 메서드를 정의하고, 구체적인 동작은 개, ****고양이****와 같은 서브클래스에서 구현하도록 한다. 이를 통해 상위 클래스에서는 공통적인 인터페이스만 제공하고, 구체적인 동작은 서브클래스에서 다르게 정의할 수 있다.
참고 : OOP의 SOLID 원칙
'Job Interview Prep' 카테고리의 다른 글
Java의 다형성(Polymorphism) (0) | 2024.05.31 |
---|---|
Docker vs Kubernetes / Docker Compose vs Docker Swarm vs Kubernetes (1) | 2024.05.28 |
Java가 다중 상속을 지원하지 않는 이유 (0) | 2024.05.24 |
Collection Framework (0) | 2024.05.24 |
추상클래스와 인터페이스 정의와 차이점 (0) | 2024.05.24 |