[Java] final, static, static final
Java에서 final, static, 그리고 static final 키워드는 각각 다른 목적과 의미를 가지고 있으며, 변수, 메서드, 클래스에 적용될 수 있다. 이러한 키워드들은 Java 프로그래밍의 기본 구성 요소로, 객체 지향 프로그래밍의 중요한 개념들을 구현하는 데 도움을 준다.
해당 변수는 값이 저장되면 최종적인 값이 되므로, 수정이 불가능 하다
public class Person {
// final 변수
final String name;
// 생성자에서 final 변수 초기화
public Person(String name) {
this.name = name;
}
// name 값을 반환하는 메서드
public String getName() {
return name;
}
}
public class Test {
public static void main(String[] args) {
// Person 인스턴스를 생성하고 이름을 초기화
Person person = new Person("Seb");
// name 값을 출력
System.out.println(person.getName());
// 아래 코드는 컴파일 오류
//final 변수는 값을 변경할 수 없다.
// person.name = "Server"; // 컴파일 오류
}
}
name 변수의 불변성 보장
-> 불변 객체를 만들거나, 값이 변경되어서는 안 되는 변수를 다룰 때 유용
객체 생성 없이 사용할 수 있는 필드와 메서드를 생성하고자 할 때 활용
클래스 변수(정적 변수)와 클래스 메서드(정적 메서드)에 사용
예)
public class Counter {
// 정적 변수
static int count = 0;
// 인스턴스 생성 시 count를 1 증가시키는 생성자
public Counter() {
count++;
}
// count 값을 반환하는 정적 메서드
public static int getCount() {
return count;
}
}
public class Test {
public static void main(String[] args) {
// 인스턴스를 생성합니다.
Counter c1 = new Counter();
Counter c2 = new Counter();
Counter c3 = new Counter();
// 정적 메서드를 호출하여 현재 count 값을 출력
// 인스턴스 생성 없이 직접 클래스 이름을 사용하여 getCount() 메서드에 접근
System.out.println("현재 카운터 값: " + Counter.getCount());
}
}
"클래스이름.필드"로 사용 가능
주의 : 정적 메서드는 객체 참조 없이 바로 사용할 수 있는 특징 때문에 인스턴스 필드나 메소드, 그리고 this 키워드 사용X
-> 인스턴스 성질은 객체 생성 후 사용할 수 있으므로
모든 영역에서 고정된 값으로 사용하는 상수
public class Math {
// static final 변수로 원주율 PI를 정의
public static final double PI = 3.14159;
}
public class Test {
public static void main(String[] args) {
// Math 클래스의 PI 상수에 접근하여 값을 출력
// 인스턴스 생성 없이 클래스 이름으로 직접 접근 가능
System.out.println(Math.PI);
// 아래 코드는 컴파일 오류를 발생
// static final 변수는 변경할 수 없다.
// Math.PI = 3.14; // 컴파일 오류
}
}
[Spring/Java] 스프링의 의존성 주입 방식 (DI) (0) | 2024.04.04 |
---|---|
[객체 지향 프로그래밍] 소프트웨어 설계를 위한 다섯 가지 기본 원칙 : SOLID 원칙 (0) | 2024.04.04 |
[Java] super, super() 키워드 차이 (1) | 2024.04.04 |
[Java] Java의 Generic 타입 (0) | 2024.04.03 |
[Java] this와 this()의 역할과 차이 (0) | 2024.04.02 |
댓글 영역