티스토리 뷰
Java란?
Java는 대표적인 객체지향 프로그래밍 언어(Object-Oriented Language)이다. 또한, 현재 세계에서 가장 많이 사용되고 있는 프로그래밍 언어이기도 하다. 자바는 주로 다음과 같은 언어로 불린다.
- Platform Independant Language
- 여기서 플랫폼이라 함은, 운영체제를 의미한다.
- Java 컴파일러는 소스코드를 JVM이 이해할 수 있는 언어인 바이트 코드로 변환한다.
- 변환된 바이트 코드는 JVM을 통해 Windows, Linux, Mac OS와 같이 여러 운영체제에서 실행될 수 있다. (이는 이식성(=portability)을 보장한다.) 단, 해당 운영체제를 지원하는 JVM이 있어야 한다.
- 즉, 운영체제의 제약을 받지 않는 언어이다.
- Object-Oriented Language
- 프로그램이 필요한 정보를 추상화시켜 상태와 행위를 가진 객체로 만들고, 그 객체들 간의 상호작용을 통해 로직을 구성하는 것을 추구하는 언어이다.
Compiler 언어 vs. Interpreter 언어
Java는 컴파일 언어와 인터프리터 언어의 특징 모두를 포함하고 있다. 소스코드가 Java 컴파일러를 통해 바이트 코드로 변환되고(컴파일 언어), 변환된 바이트 코드는 JVM에 의해 인터프리터 방식으로 실행된다. (인터프리터 언어)
객체지향 언어의 특징
Abstraction (추상화)
구현하고자 하는 영역에서 불필요한 정보는 숨기고, 공통된 중요한 정보만 표현하여 이해하기 쉽게 모델화 하는 것이다. 즉, 객체지향 관점에서 클래스를 정의하는 행위이다.
Encapsulation (캡슐화)
정보 은닉을 통해 코드 내부를 볼 수 없게 만드는 행위이다. 즉, 자신의 속성과 기능을 한 곳에 모아(=캡슐화하여) 재사용성을 높이고 장기 유지보수성(= maintainability)을 향상시킨다.
이뿐만 아니라 캡슐화는 클래스 간의 낮은 결합도를 유지할 수 있도록 해준다.
- Coupling (결합도)
- 하나의 기능을 수행하기 위해 다른 클래스나 모듈에 얼마나 의존적인지 나타낸다.
- 결합도가 높은 관계에서 하나의 클래스가 변경되면, 관련된 클래스들 또한 함께 변경되어야 한다. 이는 코드의 복잡도가 높아지고, 이해하기 어려워진다.
- Cohesion (응집도)
- 하나의 모듈 내의 요소들이 서로 밀접하게 관련되어있는 정도를 나타낸다.
- 이상적으로 독립적인 모듈이 되기 위해서는 응집도가 강해야 한다.
- 응집도가 높으면 모듈을 쉽게 이해할 수 있고, 재사용하기 쉬워진다. 유지보수성이 향상된다.
Inheritance (상속성)
상속성은 이미 정의된 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것을 의미한다. 상속을 사용하면 하위 클래스는 상위 클래스의 모든 속성과 연산을 다시 정의하지 않고도 사용할 수 있고, 때에 따라서는 상위 클래스에서 물려받은 속성이나 연산을 변경하거나 새로 추가할 수도 있다.
Polymorphism (다형성)
다형성은 하나의 객체가 여러 가지 클래스로 해석되어 다른 기능을 수행할 수 있는 능력을 의미한다. Java에서는 다형성을 지원하기 위해 오버라이딩, 오버로딩이 가능하다.
- Overriding (오버라이딩)
- 부모 클래스의 메소드를 재정의 하는 것을 의미한다. 이때, 메소드 이름, 매개변수와 반환 값은 부모 클래스와 동일해야 한다.
- Overloading (오버로딩)
- 부모 클래스와 같은 이름의 함수 및 메소드를 재정의하여, 매개변수의 타입과 개수에 따라 다르게 호출할 수 있게 하는 것을 의미한다.
오버라이딩 된 함수의 경우, 수행 중에 상위 클래스와 하위 클래스에서 적당한 함수를 동적으로 선택할 수 있다. 다음은 동적 바인딩의 예이다.
public static void main()
{
Person p = new Person("A", "M");
Student s = new Student("B", "F", 26);
Person person;
person = p;
person.print() // Person 클래스의 print()가 실행됨. "A의 성별은 M입니다."
person = s;
person.print(); // Student 클래스의 print()가 실행됨. "B의 성별은 F이고, 26살 입니다."
}
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] Java 8 변경사항 (0) | 2020.02.09 |
---|---|
[Java] JVM이란? (0) | 2020.01.30 |
- Total
- Today
- Yesterday