본문 바로가기
Programming/객체 지향 프로그래밍(OOP)

OOP 개념: 객체 지향 언어의 4가지 특징(추상화, 캡슐화, 상속, 다형성)

by vita12321 2023. 9. 12.
728x90
반응형

이번 글에서는 객체 지향 프로그래밍(Object-Oriented Programming, OOP)의 핵심 원칙인 '추상화', '캡슐화', '상속', 그리고 '다형성'에 대해 다루어 보겠습니다. 이 네 가지 특징은 객체 지향 언어를 이해하고 사용하는 데 있어 중요한 역할을 합니다.


1. 추상화 (Abstraction)

 

추상화는 복잡한 시스템을 단순한 인터페이스로 만드는 프로세스입니다. 이를 통해 사용자가 필요하지 않은 세부 정보에 신경 쓰지 않도록 도와줍니다. 객체 지향 프로그래밍에서 추상화는 객체들의 공통적인 특징(데이터와 메서드) 도출하여 일반적인 클래스를 만드는 것을 의미합니다.

 

예를 들어, 여러 종류의 자동차(세단, SUV, 스포츠카 ) 있을 모든 자동차가 공유하는 기본 특징(색깔, 브랜드, 속도 ) 정의하는 'Car'라는 일반적인 클래스를 생성할 있습니다. 이렇게 추상화된 클래스를 기반으로 각각의 구체적인 자동차 객체를 생성할 있습니다.


2. 캡슐화 (Encapsulation)

 

캡슐화는 데이터와 데이터를 조작하는 메서드들을 하나로 묶는 것입니다. 이렇게 함으로써 객체 내부의 상태 정보를 외부에서 직접 접근하지 못하도록 제한하고, 오직 메서드들만이 해당 데이터에 접근할 있도록 합니다.

 

이런 방식은 데이터 보호 유효성 유지에 역할을 합니다. 예를 들어 은행 계좌 객체가 있다면 잔액(balance) 필드에 직접 접근해서 변경하는 것은 위험합니다. 따라서 캡슐화된 설계에서는 잔액 필드에 직접 접근하지 못하도록 제한하고 입금(deposit), 출금(withdraw) 등과 같은 메서드들만 제공하여 안전하게 계좌 잔액을 조작할 있게 합니다.


3. 상속 (Inheritance)

 

상속은 클래스가 다른 클래스의 속성과 메서드를 물려받는 것입니다. 이를 통해 코드의 재사용성이 증가하고, 중복된 코드의 양이 줄어들어 개발 효율성이 크게 향상됩니다.

 

예를 들어 '동물'이라는 기본 클래스가 있고 '포유류', '조류', '양서류' 등의 하위 클래스를 만들 있습니다. 이때 모든 동물들이 공통으로 가지는 속성(나이, 체중 ) 메서드(먹다, 움직이다 등)는 기본 클래스에 정의되며, 하위 클래스에서는 그에 맞는 추가적인 속성과 메서드만 정의하면 됩니다.


4. 다형성 (Polymorphism)

 

다형성은 객체가 여러 형태로 동작하는 능력을 의미합니다. 이는 상속 관계 내에서 발생하는 특징으로, 부모 타입으로 자식 객체를 참조할 다양한 형태로 동작하게 하는 것입니다.

 

예를 들어 '동물' 타입의 변수에 '강아지' 객체와 '고양이' 객체를 할당할 있습니다. 만약 모든 동물에게 공통적인 '울다'라는 메서드가 있다면 각각 할당된 강아지와 고양이 객체에 따라 다르게 울음소리를 출력할 있습니다. 이처럼 다형성은 하나의 인터페이스나 부모 클래스로 다양한 구현을 있는 유연함을 제공합니다.


5. 결론

 

객체 지향 프로그래밍의 가지 핵심 원칙인 추상화, 캡슐화, 상속, 다형성은 현대 소프트웨어 개발에서 중요한 역할을 수행합니다. 이들 원칙을 이해하고 적절하게 활용함으로써 우리는 효율적이고 유연한 코드를 작성할 있습니다.

 

추상화는 복잡한 시스템을 단순하게 만들어 사용자에게 필요한 정보만 제공하는 것입니다. 캡슐화는 데이터와 메서드를 함께 묶어 외부 접근으로부터 보호하는 것입니다. 상속은 코드의 재사용성을 높여 개발 효율성을 증가시키는 것입니다. 다형성은 하나의 객체가 여러 형태로 동작하는 능력을 부여하는 것입니다.

 

그러나 이런 원칙들도 모든 상황에 최적인 해결책이 되지는 않습니다. 때로는 절차 지향 프로그래밍이나 함수형 프로그래밍 같은 다른 방법론이 효과적일 있습니다. 따라서 주어진 문제에 대해 가장 적합한 설계 패턴과 프로그래밍 방식을 선택하는 능력이 중요합니다.

 

마지막으로, 객체 지향 프로그래밍은 복잡한 소프트웨어 시스템을 설계하고 구현하는데 필수적인 도구입니다. 설계된 OOP 시스템은 유연성, 재사용성 그리고 확장 가능성 많은 이점들을 제공하여 소프트웨어의 생명 주기를 연장시켜 준다는 점에서 중요성이 큽니다.

 

하지만 OOP 완벽하지 않으며 경우에 따라 절차 지향 프로그래밍(Procedural Programming) 또는 함수형 프로그래밍(Functional Programming) 다른 방법론이 적합할 있습니다. 따라서 프로그래밍 문제를 해결하는 있어 가장 효과적인 도구와 방법론을 선택하는 것이 중요합니다.

728x90
반응형