객체지향 언어의 개념과 특징, 절치자향 언어와의 차이점
업데이트:
- 연구주제 : 객체지향 언어의 개념과 특징, 절치자향 언어와의 차이점
- 연구목적 : 객체지향 언어 능력 숙달
- 연구일시 : 2020년 04월 14일 09:00~17:00
- 연구자 : 이재환 ljh951103@naver.com
- 연구장비 : HP EliteDesk 800 G4 TWR, Kotlin, Android studio, IntelliJ
- 관련연구 : Java, Android, Kotlin, Google, API
서론
공부중 문득 누가 저에게 객체 지향 언어에 대해 구체적인 질문을 한다면 저는 답변을 명쾌하게 해내지 못할 것 같다는 생각이 들었습니다. 그래서 이번 시간에는 객체 지향 언어와 절차 지향 언어를 다시 한번 복습하는 시간을 가지겠습니다.
본론
객체 지향 언어
객체지향 언어
란 무엇일까? 우선 객체지향 언어를 알기 전에, 객체
에 대한 개념을 알아야 합니다. 예를 들자면 우리가 일상 속에서 마주하는 모든 사물들은 모두 객체입니다. 사물 뿐만 아니라 모든 개별적인 행동 또한 객체라고 볼 수 있습니다.
그렇다면 프로그래밍에서의 객체란 무엇일까요? 일상 속의 객체의 개념과 다르지 않습니다. 컴퓨터 프로그램을 여러 개의 독립된 단위로 보고 그 독립된 단위 하나하나가 바로 객체입니다. 각각의 객체는 메시지를 주고 받고 데이터를 처리할 수 있습니다.
이렇듯 객체 지향 언어는 실제 세계를 모델링 하여 소프트웨어를 개발하는 방법입니다. 즉, 객체 지향 언어는 객체 별로 코드를 작성하고 그 객체들을 조합하여 전체 프로그램을 완성하는 프로그램 설계 방법론을 지향하는 언어라고 할 수 있습니다.
객체 지향 언어에서는 일부를 제외하고, 모든 것이 객체로 표현됩니다. 이런 객체 지향 개념을 사용하면 코드를 재사용하기 쉬워서, 보다 빠르고 신뢰성 있는 프로그램을 개발할 수 있습니다. 객체 지향 언어로 대표되는 언어는 C++, JAVA가 있습니다.
객체 지향 언어 vs 절차 지향 언어
그렇다면 절차 지향 언어란 무엇일까? 말 그대로 순차적인 처리가 중요시 되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 언어입니다. 대표되는 언어는 C언어가 있습니다. 이렇듯 객체 지향의 반대가 절차 지향이 아니고 절차 지향의 반대도 객체 지향이 아닙니다. 단지 절차 지향은 순차적 실행에 초점을 두고 있고, 객체 지향은 객체간의 관계에 초점을 두고 있습니다.
객체지향 언어와 절차 지향 언어의 차이점
- 유지보수성
첫 번째는 위에서 설명했듯이 바로 코드의 유지보수성이 높다는 점 입니다. 예를 들어, 똑 같은 계산기 프로그램을 개발한다고 가정해보겠습니다. 절차 지향 프로그래밍 방식으로 개발하게 되면, 데이터와 함수가 분리되어 개발됩니다. 즉, 독립적이라고 할 수 있습니다. 따라서 새로운 기능이 있을 때마다 함수를 추가해야 하고 데이터도 추가하고, 여러 가지 새로운 코드를 부분마다 추가해야 합니다.
그러나 객체 지향 프로그래밍 방식으로 개발하게 되면 개발한 계산기를 객체로 만들 수 있습니다. 즉, 객체에 계산기의 데이터와 기능이 함께 담겨 있고, 객체 내부에만 신경 쓰면 되기 때문에 유지보수성이 높고 굉장히 간편하다고 할 수 있습니다.
- 재사용성
두 번째로는 재사용성 입니다. 위에서 말한 계산기는 객체로 만들 수 있다고 했습니다. 그렇다면 객체 지향에서는 언제든지 그 계산기 객체를 생성하여 사용할 수 있습니다. 전체를 재사용하는 것이 아닌, 특정 데이터나 메소드만을 호출하여 재사용할 수 있습니다.
- 생산성 향상
세 번째로는 생산성 향상입니다. 이렇듯 객체 지향 프로그래밍을 통해 여러 가지 잘 설계된 클래스를 만들어 라이브러리로 재사용하는 것은 개발자로써 생산성을 크게 향상시킬 수 있습니다.
- 자연적 모델링
네 번째로는 자연적 모델링이 가능하다는 점 입니다. 실 세계를 모델링한 프로그래밍 언어답게 객체지향에서 다루는 객체, 클래스, 속성 등은 일상생활에서 생각하는 방식을 그대로 프로그램 언어로 표현하게 하여 프로그래밍을 비교적 쉽게 가능하게 합니다.
하지만 객체 지향 언어도 단점이 있는데, 처리속도입니다. 컴퓨터의 작업 처리 방식이 대게 순차적인 접근이기 떄문에 메소드를 통해 접근하는 객체 지향 언어에서는 속도적인 측면에서 절차지향 언어보다 비교적 느리다고 할 수 있습니다.
객체 지향에서의 중요 용어
클래스
클래스는 객체의 집합이라고 볼 수 있습니다. 특정 객체들의 중요한 속성을 공유하는 객체들의 모임이 바로 클래스입니다. 즉, 객체 지향 언어를 활용한 프로그래밍에서 같은 종류의 객체들이 여러 개 필요한 경우가 있는데, 이 경우 같은 종류의 객체들은 하나의 설계도로 만들어집니다.
바로 이 설계도를 클래스라고 합니다. 하나의 클래스는 연관되어있는 변수와 메소드의 집합이라고 할 수 있습니다. 변수는 필드라고 표현하며 객체의 상태를 나타냅니다. 메소드는 객체의 행동을 나타내며, 특정 작업을 수행하기 위한 명령문의 집합이라고 할 수 있습니다.
객체
객체는 객체 지향 언어의 핵심 개념입니다. 맨 처음, 잠깐 언급했듯이 객체는 일상 세계의 사물이나 행동 등을 뜻합니다. 즉, 실 세계의 모든 것이 객체가 될 수 있습니다.
객체 지향 프로그래밍에서는 바로 이 객체라는 것을 그대로 도입하여 활용하고 있고, 클래스에 선언된 모양 그대로 생성된 실체를 객체라고 부릅니다. 이것을 클래스의 인스턴스라고 부릅니다. 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖습니다. 여기서 인스턴스란 구현된 구체적인 실체라고 볼 수 있습니다. 즉, 객체를 프로그램에 실체화 하면 그것을 인스턴스라고 부릅니다.
캡슐화
캡슐화란 객체의 필드, 메소드를 하나로 묶어서 실제 구현 내용을 하나로 캡슐화하여 감추는 개념입니다. 캡슐화를 하게 되면 외부 객체는 객체 내부의 구조를 알지 못하여 객체가 노출해서 제공하는 필드와 메소드만 이용 가능합니다.
따라서 객체에 포함된 정보의 손상과 오용을 막을 수 있다는 장점을 갖습니다. 또한 데이터가 바뀌어도 다른 객체에 영향을 주지 않기 떄문에 독립성이 유지된다는 장점이 있습니다.
상속성
우리는 현실 세계에서 부모에게서 재산을 상속받을 수 있으며 상속된 재산에 우리가 벌어들인 새로운 재산을 추가할 수 있습니다. 바로 이것이 상속이며 이 개념을 객체 지향 개념에 도입한 것입니다. 상속은 상위 객체의 필드와 메소드를 하위 객체에게 물려주어 하위 객체가 사용할 수 있도록 하는 개념입니다.
이렇게 물려받은 하위 객체는 상위 객체의 필드와 메소드만을 사용할 수 있는 것이 아니라 자신이 필요한 기능을 추가할 수 있고, 상위 객체의 필드와 메소드를 변경해서 사용할 수도 있습니다.
상속은 이미 작성된 검증된 것들을 재사용할 수 있기 때문에 신뢰성있는 프로그램을 손쉽게 개발, 유지보수할 수 있게 해주는 중요한 기술입니다. 또한 코드의 중복을 줄일 수 있다는 장점도 있습니다.
다형성
다형성은 객체들의 타입은 같지만 하나의 타입에 여러 객체를 대입함으로써 실행 결과 각각 다른 기능을 이용할 수 있도록 하는 개념입니다. 즉, 다형성은 하나의 객체를 여러 가지 타입으로 선언할 수 있다는 뜻입니다. 추상화의 개념으로 보면 “틀”을 가진 객체가 구체화된 객체로 표현된다고 볼 수 있고 부모의 클래스를 활용하여 자식의 객체를 제어할 수 있다는 말도 됩니다.
이러한 다형성을 이용하면 상속을 통해 기능을 확장하거나 변경하는 것을 가능하게 해주고, 코드의 길이도 줄여줄 수 있습니다. 여러 클래스를 사용할 때, 객체마다 별도로 계산할 필요없이, 하나로 묶어 사용할 수 있기 때문에 간단하며 좀 더 객체적인 프로그래밍을 할 수 있습니다.
결론
이렇게 객체 지향 언어에 대해 간단하게 복습해보았습니다. 이전에는 대략적으로 나마 이해했었지만 이제는 완벽하게 숙지하고 이해한 것 같아 만족스럽습니다.
향후과제
참고자료
Writer: Jae-Hwan Lee
댓글남기기