객체 지향 언어의 특징
객체 지향 언어는 실세계의 객체를 프로그램 내에 표현하기 위해 객체와 클래스 개념을 도입한 언어로, 다음과 같은 특성을 가진다.
-
캡슐화(Encapsulation): 객체 내부를 보호하고 볼 수 없게 하는 것으로 객체의 가장 기본적인 특징이다. 자바의 캡슐화는 필드(멤버 변수)와 메소드(멤버 함수)로 구성되며, 외부와의 접근을 위해 일부분만 공개 노출한다.
-
상속(Inheritance): 상위 객체의 속성을 하위 객체에 물려져, 하위 객체가 상위 객체의 속성을 모두 가지는 관계이다. 자바의 상속은 확장(extends)의 개념으로, 부모 클래스를 슈퍼 클래스(Super Class)라고 부르며, 자식 클래스를 (Sub Class)라고 부른다. 코드를 재사용함으로써, 코드 작성에 드는 시간과 비용을 줄일 수 있다.
-
다형성(Polymorphism): 같은 이름의 메소드가 클래스 혹은 객체에 따라 다르게 동작하도록 구현되는 개념으로, 자바에서는 슈퍼 클래스에서 구현된 메소드를, 서브 클래스에서 동일한 이름으로 자신의 특징에 맞게 다시 구현하는 메소드 오버라이딩(Overriding)과, 클래스 내에서 이름이 같지만 서로 다르게 동작하는 메소드를 여러개 만드는 메소드 오버로딩(Overloading)이 있다.
객체 지향 언어의 목적
객체 지향 언어는 절차 지향 언어의 단점을 보완하기 위해 탄생하였고, 언어의 목적은 다음과 같다.
-
소프트웨어의 생산성 향상: 객체, 캡슐화, 상속, 다형성 등 소프트웨어의 재사용을 위한 여러 기법들을 가진 객체 지향 언어를 통해 이미 작성된 코드를 재사용하기 쉬우며, 부분 수정을 통해 소프트웨어를 다시 만드는 부담을 대폭 줄일 수 있게 한다.
-
실세계에 대한 쉬운 모델링: 과거에는 데이터 처리나 계산 절차를 표현하기 위해 절차 지향 언어를 주로 사용했지만, 현대에 이르러 실세계의 복잡한 구조와 상호 작용을 하나의 프로그램으로 묘사해야 하는 필요성이 커졌다. 이러한 요구에 따라, 현실 세계의 각 요소를 객체로 만들고, 이 객체들 간의 상호 작용을 통해 문제를 해결하는 방식인 객체 지향 언어가 프로그램의 효율적인 모델링 및 유지 보수를 위한 효과적인 프로그래밍을 할 수 있게 한다.
클래스 구성
자바 클래스는 class 카워드를 사용하여 선언한다. 클래스의 구성 요소를 멤버라고 부르며, 멤버는 필드(멤버 변수)와 메소드(멤버 함수)로 두 가지이다.
public class HelloWorldApp { // 클래스. 메소드를 넣을 수 있다.
// 전역 변수의 시작점
public static void main(String[] args) { // 메인 메소드의 시작점, public 없이는 작동하지 않는다.
// 지역 변수의 시작점
System.out.println("Hello World!"); // Hello World를 출력한다.
} // 메소드의 끝, 다른 메소드가 붙을 수 있다.
} // 클래스의 끝, 다른 클래스가 붙을 수 있으나 해당 클래스는 public 키워드가 붙어있지 않아야 한다.