본문 바로가기
컴퓨터 | IT

객체 지향 프로그래밍

by 호기심심풀이 2021. 2. 4.
반응형

객체 지향 프로그래밍

객체 지향 프로그래밍

객체 지향 프로그래밍(OPP)은 필드 형태의 데이터와 코드(속성 또는 속성), 프로시저 형태의 코드를 포함할 수 있는 객체(objects)의 개념에 기반한 프로그래밍 패러다임이다.

객체의 특징은 객체 자체의 절차가 자주 자신의 데이터 필드에 접근하고 수정할 수 있다는 것이다. 객체 지향 프로그래밍에서 컴퓨터 프로그램은 서로 상호작용하는 개체로 만들어 설계된다. 언어는 다양하지만, 가장 인기 있는 언어는 클래스 기반이며, 개체가 클래스 인스턴스이며, 클래스 유형도 결정한다.

중요한 객체 지향 언어에는 Java, C++, C#, Python, R, PHP, Visual Basic.NET, JavaScript, Ruby, Perl, Object Pascal, Object-C, Dart, Swift, Scala, Kotlin, Common Lisp, MATLAB 및 Smalltalk을 포함한다.

객체 지향의 시작

초기 프로그래밍 방식은 절차적 프로그래밍 방식이었다. 입력을 받아 명시된 순서대로 처리한 다음, 그 결과를 내는 것. 하지만 이 방법은 조금만 복잡해지면 코드가 꼬여버리고 찾기힘들고 알아보기 힘들어 유지보수가 힘들어진다. 

이러한 문제점들을 극복하기 위해 개발된 것이 객체 지향 프로그래밍이다. 전체를 한번에 해결하는 것이 아니라 전체 내에서 작은 문제들을 해결할 수 있는 객체를 만들어 각각의 객체를 조합하여 해결하는 것이다. 객체를 처음에 확실하게 만들어두면 이후에는 객체를 수정없이 재사용할 수 있고 개발 기간과 비용이 줄어든다.

캡슐화(Encapsulation)

객체 지향 프로그래밍(OPP)에서 캡슐화(capsulation)는 해당 데이터에 대해 작동하는 방법과 데이터 번들을 의미하거나 객체의 구성 요소에 대한 직접 액세스를 제한하는 것을 의미한다. 캡슐화는 클래스 내에서 구조화된 데이터 객체의 값 또는 상태를 숨기기 위해 사용되며, 숨겨진 구현 세부 사항을 노출하거나 메소드에 의해 유지되는 상태 불변성을 위반할 수 있는 방식으로 클라이언트에 의한 직접 액세스를 방지한다.

주로 캡슐화 = 정보 은닉이라고 생각하는데 정보은닉은 캡슐화에서 파생된 별도의 개념이라 할 수 있다.

정보 은닉(Information hiding)

객체의 내부 표현은 일반적으로 객체의 정의 외부에 숨겨진다는 것인데 일반적으로 개체 자체 메서드만 해당 필드를 직접 검사하거나 조작할 수 있도록 하는 것이다. 개체의 내부를 숨기면 사용자가 구성 요소의 내부 데이터를 유효하지 않거나 일관되지 않은 상태로 설정하지 못하도록 하여 개체의 무결성을 보호한다. 이는 개발자가 소프트웨어 요소 간의 상호의존성을 제한할 수 있게 함으로써 시스템 복잡성을 줄일 수 있고, 따라서 견고성을 높일 수 있다는 것이다.

다음과 같은 세 가지의 접근 제한이 사용된다.

¤ public : 클래스의 외부에서 사용 가능하도록 노출

¤ protected : 다른 클래스에게는 노출되지 않지만, 상속받은 자식 클래스에게는 노출

¤ private : 클래스의 내부에서만 사용되며 외부로 노출되지 않는다.

상속(Ingeritance)

개체 지향 프로그래밍에서 상속은 객체나 클래스를 다른 객체(프로토타입 기반 상속) 또는 클래스(클래스 기반 상속)에 기반하여 유사한 구현을 유지하는 메커니즘이다. 또한 슈퍼 클래스 또는 기본 클래스 같은 기존 클래스로부터 새 클래스(하위 클래스)를 파생하여 클래스의 계층 구조로 만드는 것으로 정의된다. 대부분의 클래스 기반 객체 지향 언어에서 상속을 통해 생성된 객체인 "하위 객체"는 기본 클래스의 생성자, 소멸자, 오버로드된 연산자 및 친구 함수를 제외하고 상위 객체의 모든 속성과 동작을 획득한다. 상속을 통해 프로그래머는 기존 클래스에 구축된 클래스를 만들 수 있으며, 동일한 동작(인터페이스 실현)을 유지하면서 새로운 구현을 지정할 수 있고 코드를 재사용하고, 공용 클래스 및 인터페이스를 통해 원본 소프트웨어를 독립적으로 확장할 수 있다.

상속된 클래스는 상위 클래스의 하위 클래스 또는 슈퍼 클래스의 하위 클래스라고 한다. "상속"이라는 용어는 클래스 기반 프로그래밍과 프로토타입 기반 프로그래밍 모두에 사용되지만, 정확한 표현에서는 클래스 기반 프로그래밍을 위해 사용되며, 프로토타입 기반 프로그래밍의 해당 기술은 대신 위임(Delegation)(한 개체에서 다른 개체로)이라고 불린다.

 

반응형

댓글