객체 지향이란?
객체 지향 프로그래밍 (Object-Orinted Programming, OOP)
객체 지향 프로그래밍은 단순이 코드를 짜는 것을 넘어, 소프트웨어를 만들고 생각하는 방식입니다.
프로그램과 코드가 커지고 복잡해질수록 코드의 길이는 길어집니다. 이러한 코드가 한 덩어리로 구성된다면 문제가 발생했을 경우, 문제점을 찾기 어려우며 기능을 추가하고 수정하는 등 유지, 관리에 어려움이 생기며 가독성 또한 떨어집니다.
이러한 문제를 해결하기 위해 '객체 지향'이라는 패러다임이 제시되었으며, 객체 지향의 중요한 개념은 객체 입니다.
객체는 현실 세계의 사물처럼 특징(속성)과 행동(메서드)을 하나로 묶어놓은 독립적인 단위입니다.
예를 들어, 자동차를 객체로 생각할 경우
- 속성(데이터) : 자동차의 특징들 (색상, 최대 속도, 모델명, 현재 속도, 연료량)
- 행동(기능/메서드) : 자동차가 할 수 있는 동작들 (예: 출발, 정지, 엑셀, 브레이크)
위와 같이 속성과 행동의 결합이 객체입니다.
객체 지향 프로그래밍의 중요 원칙
캡슐화 (Encapsulation)
객체의 데이터(속성)와 그 데이터를 다루는 기능(메서드)을 하나로 묶고, 외부에서는 객체 내부의 세부 구현을 직접 건드리지 못하도록 보호하는 것 입니다. 알약 캡슐안에는 약 성분이 담겨 있으나, 우리는 겉의 캡슐만 보고 그 안의 성분의 제조방법까지 알 필요가 없는 것과 같습니다.
- 보안 및 데이터 보호: 중요한 데이터가 외부에서 함부로 변경되는 것을 막습니다.
- 유지보수 용이: 객체 내부의 구현이 바뀌어도, 외부에서 객체를 사용하는 방식(인터페이스)만 유지된다면 외부 코드를 수정할 필요가 없습니다.
- 정보 은닉: 객체를 사용하는 사람은 객체가 '무엇을 하는지'만 알면 되고, '어떻게 하는지'는 알 필요 없게 만듭니다.
상속 (Inheritance)
어떤 객체(부모/상위 클래스)가 가진 속성과 행동을 다른 객체(자식/하위 클래스)가 물려받아 재사용할 수 있게 해주는 기능입니다. 자식 객체는 부모의 것을 물려받고, 자신만의 고유한 속성이나 행동을 추가할 수 있습니다.
- 코드 재사용: 이미 만들어진 코드를 또 만들 필요 없이 물려받아 쓸 수 있어 개발 시간을 줄입니다.
- 확장성: 기존 코드를 변경하지 않고 새로운 기능을 추가할 수 있게 합니다.
- 계층 구조: 객체들 간의 관계를 명확한 계층으로 표현할 수 있습니다.
추상화 (Abstraction)
복잡한 시스템에서 핵심적인 특징이나 기능만을 뽑아내어 표현하고, 불필요하거나 복잡한 세부사항은 표현하지 않습니다. 운전자가 자동차를 운전할 때, 엔진 등의 복잡한 내부 원리를 다 알 필요 없이 핸들, 액셀, 브레이크만 조작만으로 자동차를 이용하는 것과 같습니다.
- 복잡성 감소: 복잡한 부분을 숨겨서 개발자가 더 중요한 부분에 집중할 수 있게 합니다.
- 사용 편의성: 필요한 정보만 제공하여 시스템을 더 쉽게 이해하고 사용할 수 있게 합니다.
- 설계 명확성: 시스템의 핵심 기능과 책임을 명확히 정의할 수 있습니다.
다형성 (Polymorphism)
하나의 기능(메서드)이 다양한 형태(객체의 타입)에 따라 다르게 동작하는 것을 의미합니다. 예를 들어, '짖다'라는 행동이 '강아지' 객체에서는 "멍멍"으로, '고양이' 객체에서는 "야옹"으로, '오리' 객체에서는 "꽥꽥"으로 다르게 구현되는 것과 같습니다. 같은 '짖기'라도 어떤 객체인지에 따라 결과가 달라집니다.
- 유연성 증가: 같은 이름의 메서드를 통해 다양한 객체를 처리할 수 있어 코드가 유연해집니다.
- 확장성: 새로운 타입의 객체가 추가되어도 기존 코드를 크게 수정하지 않고 새로운 동작을 추가할 수 있습니다.
- 코드 가독성: 비슷한 작업을 수행하는 코드를 더 깔끔하게 작성할 수 있습니다.
'CS' 카테고리의 다른 글
| 세션(Session)이란? (1) | 2025.08.03 |
|---|---|
| Prisma ORM에 대하여 (0) | 2025.08.02 |
| 클린 아키텍쳐(Clean Architecture)란? (0) | 2025.07.12 |
| 데이터 정규화(Normalization)란? (0) | 2025.06.26 |
| 동기화와 비동기화 (0) | 2025.06.20 |