12. Java 클래스 정리
Overview
Java는 객체 지향 언어(Object Oriented Language)로써, 기존 절차 지향 언어(Structured Procedural Programming Language)의 단점을 보완하고 다음의 목적을 달성하기 위해 탄생했다.
객체 지향 언어의 목적
1. 소프트웨어의 생산성 향상
객체 지향 언어가 나온 배경은 컴퓨터 산업이 발전함에 따라 소프트웨어의 생명 주기(Life cycle)가 짧아졌는데, 이는 어떤 제품이 기획되면 짧은 시간안에 소프트웨어를 만들어야 했기 때문이다.
객체 지향 언어는 상속, 다형성, 객체, 캡슐화 등 소프트웨어의 재사용을 위한 여러 장치를 가지고 있어, 기존의 것을 재사용하거나 부분 수정을 통해 소프트웨어를 만드는데 드는 부담을 대폭 줄일 수 있다.
이는 곧 소프트웨어의 생산성을 향상시킬 수 있게 된다.
2. 실세계에 대한 쉬운 모델링
과거 절차 지향 언어를 사용한 소프트웨어는 수학 계산이나 통계처리를 하는 등 대체로 처리 과정이나 계산의 절차가 중요했다.
요즘은 컴퓨터가 산업 전반에 활용됨에 따라 실세계의 일을 프로그래밍해야 할 일이 많아져 절차로만 묘사하는 것이 쉽지 않아졌다.
실세계의 일은 절차나 과정보다는 일과 관련된 많은 물체(객체)들의 상호작용으로 묘사하는 것이 사람이 이해하기 쉽고 이를 프로그래밍하기 위해 객체를 중심으로 하는 객체 지향 언어가 나타나게 되었다.
객체 지향 언어의 특성
프로그래밍 언어에서 객체가 다음과 같은 특성을 가질 때 객체 지향적이라고 한다.
1. 캡슐화(Encapsulation)
캡슐화란 객체를 캡슐로 싸서 그 내부를 보호하고 볼 수 없게하는 것을 말한다.
자바에서의 객체는 메소드(함수)와 필드(데이터 변수)로 구성된다.
클래스(class)라는 캡슐을 사용하여 객체를 표현하며 메소드(method)와 필드(field)를 클래스 내에 구현한다.
이렇게 함으로써 객체 외부에서는 객체 내의 숨겨놓은 메소드나 필드를 직접 접근할 수 없으며 메소드의 구현 내용도 알 수 없다.
이를 캡슐화라고 하며 궁극적인 목적은 객체 내 데이터에 대한 보안, 보호, 외부 접근 제한등을 위한 것이다.
외부에서 클래스 내부의 데이터 접근을 금지하는 것을 정보 은닉(information hiding)이라 한다.
2. 상속(Ingeritance)
상속은 상위 개체의 속성이 하위 개체에 물려져, 하위 개체가 상위 개체의 속성을 모두 가지고 있음을 의미하는 관계이다.
자바에서 상속은 부모 클래스의 속성을 자식 클래스가 물려받는 개념이다.
자바에서 부모 클래스를 슈퍼 클래스(super class)라고 부르며 이를 상속받는 클래스를 서브 클래스(sub class)라고 부른다.
상속은 이미 만들어진 클래스의 필드와 메소드를 물려받게 함으로써 자바 코드의 중복 작성을 방지하여 코드 작성에 드는 시간과 비용을 줄일 수 있게 한다.
즉 상속은 코드의 재사용을 가능하게 한다.
3. 다형성(Polymorphism)
다형성은 같은 이름의 함수 호출에 대해 객체에 따라 다른 동작을 할 수 있도록 구현되는 것을 의미한다.
다형성은 오버로딩, 오버라이딩과 밀접한 관계가 있다.