[ 학습 목표 ]
- static, final 키워드의 개념과 차이를 이해하고 사용할 수 있다.
- 클래스에 공통적으로 쓰이는 데이터를 상수(static final)로 만들 수 있다.
- 객체 생성 없이 사용하는 유틸리티 메서드를 만들 수 있다.
[ 이론 ]
1. static : 클래스 변수 / 클래스 메서드
- 인스턴스가 아니라 클래스 자체에 속한 변수와 메서드
- static 키워드는 메모리에 딱 1번만 올라감
- 모든 인스턴스가 같은 공간을 공유함
public class Counter {
static int count = 0;
Counter() {
count++;
System.out.println("현재 객체 수: " + count);
}
}
public class Main {
public static void main(String[] args) {
new Counter(); // 1
new Counter(); // 2
new Counter(); // 3
}
}
2. fianl : 변경 불가 (상수 or 상속 제한 등)
public class Example {
final int MAX_USERS = 100;
void tryChange() {
// MAX_USERS = 200; // ❌ 오류! final 변수는 한 번만 값 설정 가능
}
}
3. static final : 상수 (전역 고정값)
public class Constants {
public static final double PI = 3.14159;
public static final String APP_NAME = "MyApp";
}
사용 :
System.out.println(Constants.PI);
System.out.println(Constants.APP_NAME);
4. static 메서드 : 유틸리티 클래스 만들기
public class MathUtil {
public static int square(int x) {
return x * x;
}
public static int max(int a, int b) {
return a > b ? a : b;
}
}
사용 :
int result = MathUtil.square(5); // 25
int bigger = MathUtil.max(3, 10); // 10
5. 핵심 요약
키워드 | 의미 | 사용 예 |
static | 클래스 소속 | 공유 데이터, 유틸 함수 |
final | 값 변경 불가 | 상수, 상속 제한 |
static final | 전역 상수 | MAX_SPEED, PI, VERSION 등 |
[ 실습 ]
✏️ 오늘의 실습 과제
1. MathUtil 클래스를 만들고 다음 메서드를 static으로 작성:
- add(int a, int b)
- subtract(int a, int b)
- multiply(int a, int b)
- divide(int a, int b)
2. Constants 클래스를 만들고:
- static final double PI = 3.14159
- static final int MAX_USER = 100
출력해보기
▼ 작성한 코드
public class MathUtil {
int a;
int b;
public static int add(int a, int b) {
return a + b;
};
public static int subtract(int a, int b) {
return a - b;
}
public static int multiply(int a, int b) {
return a * b;
}
public static int divide(int a, int b) {
return a / b;
}
}
public class Constants {
public static final double PI = 3.14159;
public static int MAX_USER = 100;
}
public class Main {
public static void main(String[] args) {
int a = 10;
int b = 5;
System.out.println(MathUtil.add(a, b));
System.out.println(MathUtil.subtract(a, b));
System.out.println(MathUtil.multiply(a, b));
System.out.println(MathUtil.divide(a, b));
System.out.println("===============");
System.out.println(Constants.PI);
System.out.println(Constants.MAX_USER);
}
}
[ 메모 ]
- 좀 헷갈린다...
- static 필드는 클래스에 속하고, 인스턴스 생성시 데이터를 공유한다. 메모리에 1번만 올라감.
- final 키워드가 있으면 값 변경 불가. 한번 값이 정해지면 변경 x, 얘는 클래스에 속한게 아님.
- static final 키워드는 전역 상수를 의미. 상수는 변하지 않는 값을 의미. 얘도 static이 있기 때문에 클래스에 속해서 인스턴스끼리 데이터 공유.
'공부 기록 > Java with ChatGPT' 카테고리의 다른 글
[Java/ChatGPT] Day 17: 람다식 (Lambda) & 스트림 (Stream) (0) | 2025.07.09 |
---|---|
[Java/ChatGPT] Day 16.5: 키워드 몇 가지 정리 (0) | 2025.06.25 |
[Java/ChatGPT] Day 15: 컬렉션 정렬 (Comparable & Comparator) (0) | 2025.06.23 |
[Java/ChatGPT] Day 14: 컬렉션 프레임워크 기초(List, Set, Map) (0) | 2025.06.22 |
[Java/ChatGPT] Day 13: 사용자 정의 예외 + throw, throws (0) | 2025.06.21 |