객체 지향 4대 특성
1. 캡슐화(Encapsulation)
- 객체의 속성과 기능을 하나로 묶고 외부에서 직접 접근하지 못하게 하여 데이터의 안정성과 일관성을 보장하는 것
접근제어자 (정보 은닉을 코드로 구현하는 도구)
- public (+) : 클래스 내부/외부에서 접근이 가능하다.
- protected (#) : 해당 객체를 상속받은 객체 내부에서 접근할 수 있다. 단순 인스턴스에선 접근할 수 없다.
- default : 동일한 패키지 내의 객체에서 인스턴스를 생성하여 접근할 수 있다.
- private (-) : 클래스 내부에서 접근이 가능하나 외부에서 접근할 수 없다.
2. 상속(Inheritance)
- 재사용 (extends), 부모 클래스에서 선언한 변수나 메서드를 자식 클래스에서 직접 만들지 않고 상속을 받음으로써, 자식 클래스가 부모 클래스의 변수나 메서드를 사용할 수 있는 기능
- 자바의 모든 class는 Object 클래스의 후손이다.
- 부모 클래스의 생성자, 초기화 블록은 상속이 되지 않는다.
- 부모의 private 멤버는 상속은 되지만, 직접 접근은 불가하다.
- 자바는 단일 상속만 지원한다.
- Is a (상속관계) : 자식 클래스는 (하나의) 부모 클래스이다.
- Has a (연관관계) : 한 클래스 멤버변수로 다른 클래스 타입의 참조 변수를 선언한다.
3. 추상화(Abstraction)
- 객체에서 공통된 속성과 행위를 추출한다.
- 유연성을 확보하기 위해 구체적인 것은 제거한다는 의미이다.
- 프로그램에서 필요한 공통점을 추출하고, 불필요한 공통점을 제거하는 과정이다.
4. 다형성(Polymorphism)
하나의 객체가 여러 형태로 동작할 수 있는 성질
- 오버라이딩 (Overriding)
- 부모 클래스의 메서드를 자식 클래스에서 재정의(덮어쓰기) 하는 것
- 메서드 헤드라인 위에 반드시 Annotation, @Override 표시
- 부모 클래스와 자식 클래스의 메서드를 비교하여 메서드 이름이 동일하거나 매개변수의 개수, 타입, 순서가 동일하다면 메서드를 재정의 할 수 있다. (단, 접근제어자 private 또는 final, static 메서드는 오버라이딩이 불가능함)
- 오버로딩 (Overloading)
- 한 클래스 내에서 같은 이름의 메서드를 여러 개 정의하는 것
- 같은 메서드 이름, 다른 매개변수 선언 조건이어야 사용 가능
컴파일
사람이 작성한 소스코드를 기계가 이해할 수 있는 코드(클래스파일)로 변환하는 과정
- 개발자가 작성한 자바 코드는 Hello.java 같은 텍스트 파일이다.
- 이걸 바로 컴퓨터가 실행할 수 없기 때문에, 컴파일러(javac)가 바이트코드(.class)로 바꿔준다. (바이트코드는 JVM이 이해할 수 있는 코드)
인터프리터
컴파일된 바이트코드(.class)를 한 줄씩 읽고 실행하는 과정
- 실제 실행 시에는 JVM이 이 .class 파일을 한 줄씩 읽고 실행한다.
JVM (Java Virtual Machine)
자바 프로그램을 실행하기 위한 가상의 컴퓨터
- 개발자가 만든 코드를 컴파일러가 바이트코드(.class)로 변환한다.
- 여기서 만들어진 바이트코드는 운영체제에 직접 종속되지 않는 중간 코드이다.
각 운영체제에는 그 OS에 맞는 JVM이 설치되어 있어서, JVM이 이 바이트코드를 해석(인터프리트)하여 실행시켜 준다.
JVM의 GC(Garbage Collection)
- 작동방식
- 개발자가 new 키워드로 객체를 생성하면, JVM이 자동으로 Heap 영역에 메모리를 할당한다.
- 더 이상 해당 객체를 참조하는 변수가 없으면, GC가 이를 "쓰레기(Garbage)" 객체로 판단한다.
- 일정 시점에 GC가 동작하여 이러한 객체를 메모리에서 제거하고, 메모리를 자동으로 회수한다.
- 참고
- GC는 JVM 의 Heap 메모리를 감시하면서 사용되지 않는 객체를 Mark(표시)하고, Sweep(제거)하는 구조로 동작한다.
- GC는 백그라운드에서 자동 실행되며, 개발자는 필요 시 System.gc()로 수동 요청할 수도 있지만, 권장되지는 않는다.
멀티스레딩
하나의 프로그램(프로세스) 안에서 여러 작업(스레드)을 동시에 실행할 수 있게 하는 기술