
Java란 웹 어플리케이션 개발에 많이 사용되는 프로그래밍 언어이다. Java는 처음부터 객체 지향 언어로 개발된 프로그래밍 언어이다. JVM을 이용하여 운영체제와 독립적으로 동작할 수 있어서 이식성이 높다.
객체 지향 언어이다.
이식성이 높다.
컴파일 언어인 동시에 인터프리터 언어이다.
메모리를 자동으로 관리한다.
오픈소스 라이브러리가 풍부하다.
실행을 위해 JVM을 거쳐야 하므로 다른 언어에 비해 실행 속도가 느리다.
예외 처리가 잘되어 있지만 개발자가 일일이 처리해줘야 한다.
다른 언어에 비해 길이가 긴 편이다.
개발자가 하드웨어에 직접 접근할 수 없어서 정밀한 하드웨어 조정은 불가능하다.
객체는 어떠한 속성값과 행동을 가지고 있는 데이터이다.
속성은 객체를 나타낼 수 있는 특징으로 변수에 해당된다.
행동은 객체가 할 수 있는 동작으로 메서드에 해당된다.
클래스가 실제로 구현된 인스턴스를 의미한다.
객체지향 언어란 객체를 만들고 객체끼리 관계를 맺어 상호작용을 할 수 있도록 하는 것이다.
객체를 조립하여 전체 프로그램을 만드는 조립식 프로그래밍이다.
공통적인 속성 및 행위를 추출하고 정의하는 것
복수의 클래스가 같은 성격을 가지고 있을 때 공통된 기능들을 정의하려고 하는 것
Java에서 추상화를 구현할 수 있는 방법으로는 추상 클래스와 인터페이스가 있다.
추상 클래스와 인터페이스는 존재 목적이 다르다.
추상 클래스는 상속 받아서 기능을 확장시키기 위한 것
인터페이스는 구현을 강제하기 위한 것
서로 연관성이 있는 속성과 행위들을 하나의 캡슐로 만들어 외부로부터 보호하는 것
캡슐화를 하는 이유는 정보의 보호와 은닉을 위해서다.
Java에서 정보를 은닉하기 위해서 접근제어자를 활용하여 필요한 것만 보여주도록 할 수 있다.
Java에서 정보를 보호하기 위해서 getter/setter를 활용해서만 내용을 변경할 수 있도록 할 수 있다.
클래스의 속성과 행위를 하위클래스가 물려받아 동일하게 사용할 수 있도록 하는 것
코드의 재사용성과 확장성을 높여준다.
상속은 기능이 동일할 때 사용하고, 추상화는 개념이 동일할 때 사용한다.
부모 클래스에 대해 너무 강한 결합이 생기고, 캡슐화를 깨뜨린다.
상속의 단점을 커버하고 장점을 취하기 위해 조합을 사용한다.
public class A {
private B b;
}
조합은 클래스 내부에 필드로 다른 클래스의 인스턴스를 참조하도록 한다.
조합은 메서드를 호출하는 형식으로 작동하므로 캡슐화를 깨뜨리지 않는다.
조합은 기존 클래스의 변경에 따른 영향이 적어진다.
타입의 다형성: 하나의 타입에 여러 가지 타입이 들어갈 수 있는 것
인터페이스 타입으로 선언된 객체에 각각 구현된 다른 타입의 객체를 넣을 수 있는 것
부모 타입에 자식 타입이 들어갈 수 있는 것
메소드의 다형성: 오버 로딩과 오버 라이딩
오버 로딩: 동일한 이름의 메서드를 여러 개 정의할 수 있는 것. 매개변수의 타입이나 갯수가 달라야 한다.
오버 라이딩: 상위 클래스에 정의된 메서드를 하위 클래스에서 재정의하는 것