[Java 캡슐화] 변수 유형과 final, static 키워드 완벽 가이드
Java의 변수 유형, final 키워드, static 블록의 특징과 활용법을 상세히 설명하는 기술 문서입니다. - 멤버변수,지역변수,static블록,인스턴스블록
변수의 종류와 스코프
멤버변수
멤버변수는 클래스 영역에서 선언되며 두 가지 유형이 있습니다.
class Example {
static int classVar = 1; // 클래스 변수
int instanceVar; // 인스턴스 변수(그외)
}
💡 특징
- 클래스 변수(static): 모든 인스턴스가 공유
- 인스턴스 변수: 각 객체마다 별도 존재
- 참조 타입의 기본값은 null
지역변수
메소드 내부에서 선언되는 변수로, 해당 메소드 내에서만 사용 가능합니다.
void method() {
int localVar = 0; // 지역변수
}
static 메소드 호출
class Calculator {
static int add(int a, int b) {
return a + b;
}
}
// 두 가지 호출 방법
Calculator.add(1, 2); // 권장되는 방법
Calculator calc = new Calculator();
calc.add(1, 2); // 경고 발생(사용은 가능)
final 키워드의 활용
클래스와 메소드
final class FinalClass { } // 상속 불가(=오버라이딩 불가)
class Parent {
final void finalMethod() { } // 오버라이딩 불가
}
변수와 상수
class Example {
final int BLANK_FINAL; // Blank final(=값이 할당되지 않은)
static final double PI = 3.14; // 진정한 상수(ex: Math.PI)
public Example() {
BLANK_FINAL = 100; // 생성자에서 초기화
}
}
⚡ static final
- 객체와 무관한 공용 상수
-
Example.PI
로 바로 사용 및 값 변경 불가 -> 진정한 상수
-
- 일반 static보다 먼저 초기화
⚡ blank final
- 생성자에서 1회 초기화 가능
- 물론, 바로 선언과 동시에 초기화해도 가능 →
final int num=1;
초기화 블록 - static, 인스턴스
static 블록
class Example {
static {
// 클래스 로딩 시 1회 실행
}
}
인스턴스 블록
class Example {
{
// 객체 생성 시마다 실행
}
}
같이 사용한 예시(비교)
public class Test {
public static void main(String[] args){
MyClass mc = new MyClass();
MyClass mc2 = new MyClass();
}
}
public class MyClass {
static { //static block
System.out.println("static"); //class 가 메모리에 load 될 때 동작
}
{ //instance block
System.out.println(this.name); //null
}
String name;
static int y;
static {
System.out.println("static2"); //마찬가지
}
//기본 메소드
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/*
출력:
static
static2
null
null
*/
각 블록은 초기화 순서와 용도가 다르므로 상황에 맞게 적절히 사용해야 합니다.
댓글남기기