이 글은 2026년 2월 9일에 작성된 글입니다.
static 변수
클래스 변수라고도 한다.
클래스에 속해 한번만 생성되는 변수이고 이를 여러 인스턴스가 공유한다.
- 객체화 없이 사용할 수 있어 인스턴스 간에 공통으로 사용할 값이 필요한 경우 유용함.
- static 변수는 프로그램 실행 중 클래스가 메모리에 로드되는 시점에 단 한 번 생성 및 초기화 됨.
- 인스턴스 생성과 무관하게 해당 클래스가 처음 호출(로딩)되는 시점에 JVM에 의해 static 영역 메모리에 할당되며 프로그램 종료 시까지 유지됨.
싱글톤 패턴
객체 지향 프로그램에서 인스턴스를 단 하나만 생성하는 디자인 패턴.
static을 응용하여 프로그램 전반에서 사용하는 인스턴스를 하나만 구현하는 방식.
✅ 싱글톤 패턴 사용 방법
- 생성자를 private으로 만들기
- 클래스 내부에 static으로 유일한 인스턴스 생성하기
- 외부 참조 가능한 public 메서드 만들기 (
getInstance()) - 실제로 외부 클래스에서 사용하기
상속
자식 클래스가 부모 클래스의 멤버(필드, 메서드)를 물려받는 것.
- IS-A 관계일 때 사용하는 것이 가장 효율적이다. ex) 사람은 표유류이다
- 상위 클래스가 하위 클래스보다 일반적인 개념이고, 하위 클래스는 상위 클래스보다 구체적인 클래스이다.
- 자식 클래스는 자기 부모가 누군지 알지만, 부모 클래스는 자식이 누구누구 있는지 모른다.
// 부모 클래스 (상위 클래스)
public class Parent {
}
// 자식 클래스 (하위 클래스)
// extends 키워드를 통해 Parent 클래스를 상속받았음을 표현.
public class Child extends Parent {
}
super
- 하위 클래스에서 상위 클래스를 접근할 때 사용.
- 하위 클래스가 가지고 있는 상위 클래스의 참조값.
- super()를 작성하지 않아도 묵시적으로 호출되며, 상위 클래스를 호출한다.
메서드 오버라이딩
하위 클래스에서 상위 클래스의 메서드를 재정의하는 것.
반환형, 메서드 이름, 매개변수 개수, 자료형이 반드시 같아야 한다.
다형성
하나의 객체나 메서드가 여러 가지 타입을 가질 수 있는 것.
- 다형적 참조:
부모 타입 변수는 자식 인스턴스를 참조할 수 있다. (업캐스팅) - 메서드 오버라이딩:
부모에게 상속받은 메서드를 자식이 재정의하여 사용하여, 동일한 메서드 호출에도 자식 클래스마다 다른 결과(동작)을 낸다.
추상클래스
추상 메서드: 중괄호로 감싼 함수의 구현부가 없는 메서드.
// abstract 예약어를 사용하여 선언
abstract int add (int x, int y);
추상클래스: 추상 메서드를 포함하는 클래스.
- 추상클래스에 있는 추상 메서드는 구현에 대한 책임을 상속받는 클래스에 위임한다.
- 추상클래스를 상속받은 하위 클래스는 추상 메서드를 구현해야 한다.
- 실제 하위 클래스에서 내용을 각각 다르게 구현해야 할 때, 구현 내용을 추상 메서드로 남겨두고 하위 클래스에 구현을 위임한다.
- 추상클래스는 인스턴스로 생성할 수 없다. (모든 메서드가 구현되지 않았기 때문)
템플릿 메서드 패턴
여러 클래스에서 공통으로 사용하는 메서드를 템플릿화 하여 상위 클래스에서 정의하고, 하위 클래스마다 세부 동작 사항을 다르게 구현하는 패턴.
템플릿 메서드
- 메서드 실행 순서와 시나리오를 정의한다.
- 여기서 호출하는 메서드가 추상 메소드라면 자식 클래스에 따라 구현 내용이 바뀔 수 있다.
- 그러나 템플릿 메서드는 시나리오를 정의한 메서드이므로 바뀔 수 없다.
- 하위 클래스에서 재정의하지 못하게
final예약어를 사용해 구현한다.
// 템플릿 메서드 구현한 상위 클래스
public abstract class Car {
public abstract void drive(); // 추상 메서드
public abstract void stop(); // 추상 메서드
public void startCar() {
System.out.println("시동을 켭니다.");
}
public void turnOff() {
System.out.println("시동을 끕니다.");
}
// 템플릿 메서드
final public void run() {
startCar();
drive(); // 자식 클래스에서 구현한 내용에 따라 동작 바뀜
stop(); // // 자식 클래스에서 구현한 내용에 따라 동작 바뀜
turnOff();
}
}
final
- final로 선언된 경우 다른 값을 대입할 수 없다.
- 클래스를 final로 선언하면 상속할 수 없다.
- 클래스의 메서드를 final로 선언하면 하위 클래스에서 재정의할 수 없다.
- 여러 파일에서 공유해야 하는 상수 값은 한 파일에 모아
public static final로 선언하여 사용한다.
👉 모든 클래스에서 접근 가능, 인스턴스를 만들지 않고 클래스 이름으로 접근, 다른 값을 대입할 수 없음.
public class Define {
public static final int MIN = 1;
public static final int MAX = 99999;
}
❕느낀점
이제 점점 자바 핵심 내용을 배우게 되는 것 같다. 아직까진 어려운 부분이 없고 알던 내용을 복습하는 느낌으로 수업을 듣고 있지만, 그래도 개념적인 이해가 제대로 되어 있어야 활용도 제대로 할 수 있기 때문에 예시 문제들을 많이 풀어보며 자바 문법을 익혀야겠다.
'Java' 카테고리의 다른 글
| [TIL-260211] 자바 기초: 예외처리와 제네릭, 컬렉션 프레임워크 (0) | 2026.02.17 |
|---|---|
| [TIL-260210] 자바 기초: 인터페이스 (0) | 2026.02.17 |
| [TIL-260206] 자바 기초: 메소드와 생성자 (0) | 2026.02.17 |
| [TIL 260205] 자바 기초: 배열과 ArrayList, Map, 그리고 클래스 (0) | 2026.02.17 |
| [TIL-260204] 자바 기초: 메모리 영역과 문자열 데이터 타입 (0) | 2026.02.16 |