객체지향 언어(Object Orientied Language) 특징
1. 캡슐화
짧게 정리하면 데이터(정보)와 데이터를 다루는 방법(메소드)를 결합시켜 묶는 것.
이는 더욱 깊게 들어가면 코드를 재수정 없이 재활용 하는 방법이라고 설명 할 수 있다.
프로그램 코드를 재활용 하려고 하는데 기능(함수/프로시저 : 메소드)이 분산되어 있고 특성(변수 : 데이터)이 분산 되어 있는 프로그램 코드는 재활용을 하기 매우 힘들다. 이 때문에 관련 기능과 특성을 한곳으로 모으고 분류할 필요성이 있다.
- 클래스 & 인스턴스
객체 지향에서는 이렇게 계층적으로 분류한 기능과 특성의 모음을 클래스(Class)라는 캡슐(capsule)에 분류된 집단 별로 각각 집어 넣는다. 이러한 클래스를 실체화(Instance) 하면 객체(Object)를 만들수 있다.
붕어빵 틀 = 클래스
붕어빵 = 객체(인스턴스)
2. 상속
사실 클래스 이전의 프로그래밍 기법에선 코드 재활용이 불가능하지는 않았다. 예전에도 라이브러리 등을 통해서 남이 짜놓은 코드를 그대로 가져올 수 있었다.
- '라이브러리'의 문제점
라이브러리는 코드의 재활용에 지대한 영향을 미쳤지만 치명적인 단점이 있었다. 라이브러리의 기능을 약간 바꾸어야 할 경우 라이브러리의 소스를 변경해야 했고 이 때문에 전혀 다른 라이브러리가 되어 버린다는 것이다. 이것은 라이브러리 버전에 따라 그 라이브러리를 사용하는 프로그램이 동작을 안할수도 있다는 것이고 불필요한 코드의 수정작업을 해야 한다는 것이다.
- '상속'의 도입
객체 지향 프로그램에서는 이 문제를 해결하기 위해 "상속"을 도입 했다."포용성"으로 이전의 라이브러리보다 더 논리적이고 체계적으로 기능과 데이터를 계층적으로 분류해서 사용의 편의성을 도모하면서, 상속을 사용해 부모 클래스의 특성과 기능을 그대로 이어받고 기능의 일부분을 변경해야 할 경우 상속 받은 자식 클래스에서 그 기능만을 다시 정의하여 수정하게 하였다. 이러한 작업을 "덮어쓰기(재정의 : Override)"라고 한다.
3. 다형성
하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것을 말한다. 위에서 설명한 오버라이딩 이외에, 변수에 따라 함수의 기능이 달라지는 오버로딩도 여기에 해당한다.
- 연산자 오버로딩
C++, C# 등에서는 기본 연산자를 오버로딩해서 기본 연산자가 해당 클래스에 맞는 역할을 수행하게 하는 것도 가능하다. JAVA 등에서는 연산자의 오버로딩이 불가능하다. 펄 6나 스몰토크, F# 등, 연산자의 신규 정의가 가능한 언어도 있다.
'Java' 카테고리의 다른 글
싱글톤 (Singleton) (0) | 2020.08.19 |
---|---|
1. Java란 (0) | 2018.07.26 |
2. 변수자료형연산자 (0) | 2017.03.16 |
1. 기본 입출력 (0) | 2017.03.16 |