1. Java의 주요 특징
- 객체지향 언어 : 모든 프로그램은 객체로 구성된다.
- 플랫폼 독립성 : JVM을 통해 어떤 플랫폼에서도 실행될 수 있다.
- 자동 메모리 관리 : 가비지 컬렉션을 통해 메모리를 자동으로 관리한다.
- 다중 쓰레드 지원 : 멀티 쓰레딩을 내장하여, 동시에 여러 작업을 실행할 수 있다.
2. 객체지향 프로그래밍의 4가지 핵심 개념
- 캡슐화 : 객체의 속성과 메소드를 하나의 단위로 묶고, 외부에서 접근을 제한한다.
- 상속 : 상위 클래스의 특성을 하위 클래스가 물려받는 것
- 다형성 : 동일한 메시지에 대해 서로 다른 동작을 수행할 수 있다.
- 추상화 : 불필요한 세부 사항을 숨기고, 중요한 부분만을 드러낸다.
3. 추상클래스와 인터페이스의 차이점
추상 클래스
- 클래스이면서 메소드의 일부를 추상 메소드로 정의할 수 있다.
- 상속을 통해 클래스에서 다른 클래스가 기능을 확장할 수 있다.
- 멤버 변수를 가질 수 있고, 생성자를 가질 수 있다.
- 하나의 클래스만 상속할 수 있다.
인터페이스
- 클래스가 아니며, 메소드의 구현 없이 메소드 시그니처만 정의한다.
- 여러 클래스에서 다중 구현을 할 수 있다.
- 멤버 변수는 상수만 가질 수 있다.
- 추상클래스는 공통된 구현을 제공하면서도 일부 메서드는 자식 클래스에서 구형하도록 강제합니다. 클래스 자체가 상태를 가질 수 있어, 생성자나 인스턴스 변수 등을 정의할 수 있습니다.
하지만 다중 상속이 불가능하여 하나의 클래스만 상속할 수 있습니다.
- 인터페이스는 주로 특정 동작을 정의하는데 사용되며, 구현을 제공하지 않고 메서드의 선언만 정의합니다. 인터페이스는 다중 상속이 가능해서 여러 개의 인터페이스를 구현할 수 있습니다. 또한, 인스턴스 변수나 생성자를 가질 수 없고, 기본적으로 메서드는 추상 메서드로 정의됩니다.
4. java에서 다형성을 구현하는 방법
- 오버로딩 : 동일한 메서드 이름을 사용하지만, 매개변수의 개수나 타입이 달라 다르게 동작하도록 하는 것
- 오버라이딩 : 부모 클래스에서 정의된 메서드를 자식 클래스에서 재정의 하는 것이다.
- 인터페이스/추상클래스 사용 : 동일한 인터페이스를 구현하거나, 추상 클래슬르 상속받은 여러 클래스에서 각각 다른 방식으로 구현한다.
5. Java의 접근제어자
- public : 어디서든 접근이 가능하다.
- protected : 동일한 패키지, 상속 관계에 있는 클래스 에서만 접근 가능
- default : 같은 패키지 내에서만 접근 가능
- private : 같은 클래스 에서만 접근 가능
6. Java에서 == 와 equals() 메소드의 차이점
== 는 두 객체가 같은 메모리 주소를 참조하는지를 비교,
equals 는 두 객체의 내용이 동일한 지 비교
7. 컬렉션 프레임워크
데이터를 저장하고 관리하는 여러 클래스와 인터페이스의 집합
- List : 순서가 있는 데이터의 집합 (순서유지, 중복허용)
- Set : 중복을 허용하지 않는 데이터의 집합 (순서유지x, 중복x)
- Queue : FIFO 방식의 큐
- Map : 키와 값을 한 쌍으로 데이터를 저장 (순서유지x, 키 중복x, 값 중복o)
8. 가비지 컬렉션의 동작
가비지 컬렉션은 더 이상 참조되지 않는 객체를 자동으로 메모리에서 제거하는 기능이다.
가비기 컬렉션은 Heap 메모리에서 객체를 추적하며, Mark-and-Sweep 알고리즘을 사용하여 불필요한 객체를 정리한다.
Mark : 살아있는 객체들을 표시
Sweep : 표시되지 않은 객체를 메모리에서 제거