전편에서는 객체지향 프로그래밍의 기원에 대해서 알아보았습니다.
이번에는 객체지향 프로그래밍이 가지는 기본 구성 요소와 특징들에 대해서 알아보겠습니다.
OOP의 기본 구성 요소
OOP는 기본적으로 클래스, 객체 그리고 메서드로 이뤄집니다.
각각에 대해서 간단히 알아보겠습니다.
1. 클래스
어떠한 것에 속한 속성과 행동을 정의하는 것으로 객체지향 프로그램의 가징 기본이 되는 데이터 형태를 말합니다.
클래스는 다른 클래스 또는 외부 요소와 독립적으로 설계되는 것을 추천합니다.
예를 들어 게임에서 캐릭터, 몬스터, 스테이지, 아이템 같은 것들이 공통으로 가지는 속성을 클래스라고 부릅니다.
2. 오브젝트
오브젝트는 클래스의 인스턴스를 일컫는 용어입니다. 오브젝트는 물려받은 클래스에서 정의된 작업들을 수행하거나 데이터로 가질 수 있습니다.
위 클래스 예시의 캐릭터 클래스를 가지고 예를 들어보면, 캐릭터에는 마법사, 전사, 사냥꾼 등이 있으며 각각 캐릭터는 캐릭터 클래스를 물려 받아 힘, 체력, 민첩성, 마나 같은 캐릭터 속성을 오브젝트로 호출될때 각각 클래스에 맞는 속성을 가지게 됩니다.
이때 마법사, 전사, 사냥꾼 같은 캐릭터들을 캐릭터 클래스의 오브젝트라고 부를 수 있습니다.
이러한 객체는 클래스에 정의된 행위를 서로 공유하기 때문에 메모리를 훨씬 효과적으로 운용하는데 도움이 됩니다.
3. 메서드
메서드는 오브젝트 끼리 상호 교류하는 방법이라고 할 수 있습니다. 대표적으로 오브젝트의 속성을 변경시키는 역할을 합니다.
캐릭터끼리 서로 공격을 할때 마나를 소모하고 체력을 변경시키고, 물품을 거래하는 기능들이 모두 메서드라고 할 수 있습니다.
객체지향의 특징
오브젝트 지향 프로그래밍의 특징은 기본적으로 데이터 추상화, 계승, 다기능 개념, 동적 연결 및 다중 연결과 같은 추가 기능이다. 오브젝트 지향 프로그래밍은 상속, 다중 개념 및 동적 결합이 서로 작용하여 시스템의 복잡성을 제어하는 데이터 추상화에 근거하며, 모든 것이 객체라고 할 수 있습니다.
1. 데이터 추상화
추상화라는 개념에 대해서 먼저 알아둘 필요가 있습니다.
데이터 추상화는 불필요한 정보를 숨기고 중요한 정보만 출력함으로써 프로그램을 단순화하는 것이다. 데이터 추상화라고 정의되는 데이터 타입은, 추상 데이터 타입이라고 한다. 추상적 데이터 타입은 데이터 표현식의 암호화나 데이터 타입의 계산이며, 데이터 타입의 정보는 액세스 제어를 통해 은폐되는 경우가 있다. 오브젝트 지향 프로그래밍에서 추상 데이터 타입은 일반적으로 클래스, 추상 데이터 타입의 인스턴스, 개체, 방법(기능), 추상 데이터 타입에 정의된 계산 및 방법 호출로 지정된다.
2. 상속
상속은 기존 데이터 클래스와 작업 클래스를 새 클래스에 사용할 수 있도록 하는 기능입니다. 선사시대의 새로운 학급은 하위급 파생급 하위급 자각급으로 지정되고 새로운 학급은 기본급 상위급으로 지정된다. 기존 클래스를 상속받는 하위 클래스를 사용하여 클래스를 수정하고 클래스 간 종속성을 형성하여 개체를 구성할 수 있습니다.
3. 동적 바인딩
동적 연결이란 실행 시 또는 컴파일 시에 발생할 때 변하지 않는 정적 연결과 대조되는 개념이다. 동적 결합은 프로그램 개체나 기호를 실행 프로세스의 여러 속성 또는 작업에 바인딩 하고, 다기능 개념을 실장한다.
바인딩이란 의미가 모호하다면 연결이라고 생각하면 훨씬 편합니다.
4. 다형성
다형성은 한 요소에 여러 개념을 넣는 개념을 의미합니다. 일반적으로 오버라이드(함수 이름이 같지만 다른 클래스에서 다른 동작을 한다) 또는 오버로드(함수 이름이 같지만 요소 또는 데이터 타입에 의해서 동작한다)이다. 이 프로그램은 오브젝트들 사이의 다중 형태의 개념으로 체계적으로 연결될 수 있다.
오버라이드는 캐릭터 클래스와 아이템 클래스에 같은 이름의 함수가 있더라도 다르게 작동을 한다는 것을 의미하며, 오버로드는 같은 함수인데 인자값에 따라서 다른 기능을 하는 것이라고 보면 됩니다.
5. 다중상속
클래스는 다른 클래스를 상속할 수 있습니다. 이때 클래스가 2개 이상의 클래스를 상속할 수 있는데 이것을 다중 상속이라고 부릅니다. 클래스 기능이 동시에 필요할 경우 예를 들어, 몬스터 클래스에는 캐릭터 클래스와 보스와 일반을 구분하는 에너미 클래스를 상속 받아서 사용할 수 있습니다. 그런데, 이러한 다중 상속은 프로그래밍 언어에 따라 가능과 불가능한 언어가 구분되므로, 사용전에 미리 알아두는 것이 필요합니다.
글 마무리
객체지향 프로그래밍 언어는 양날의 검을 가지고 있다고 표현할 수 있습니다.
클래스별로 속성과 행동을 모아놓기 때문에 공통점으로 뭉친 클래스로서 응집력을 가집니다.
하지만 클래스별로 또 구분이 되므로 개인주의 같은 서로 독립적이라는 특징을 가지게 됩니다.
독립적이기 때문에 어디에든 붙어서 사용이 될 수 있다는 유연함을 가지기도 하지만, 아무곳에나 붙여서 사용하면 클래스로서 특징이 사라진다는 모호함도 가지게 됩니다.
객체지향 프로그래밍을 잘 하려면, 이러한 특징을 잘 이해해서 클래스부터 잘 구축하는 것이 중요할 수 있습니다.
'프로그래밍' 카테고리의 다른 글
플러터 강좌 추천사이트 3곳 (0) | 2021.04.25 |
---|---|
객체지향 프로그래밍 1 : OOP의 기원 (0) | 2021.04.06 |
Unity 카메라 여러대 한 화면에 보면서 전환하는 법 (0) | 2021.03.26 |
유니티 페이스북 SDK 배포용 키해시 등록 방법 (0) | 2021.03.25 |
자바스크립트 동적엘리먼트 따옴표 사용하기 (0) | 2021.03.24 |