<aside> 1️⃣ 설명
</aside>
static
키워드는 특정 클래스의 인스턴스가 아니라 클래스 자체에 속하는 필드나 메서드를 선언하는 데 사용된다. 이로 인해 static
필드나 메서드는 클래스의 모든 인스턴스에서 공유되며, 클래스 인스턴스 없이도 접근할 수 있다.static
클래스는 주로 내부 클래스(inner class)에 사용되며, 이는 static
키워드가 사용된 내부 클래스가 외부 클래스의 인스턴스에 의존하지 않는다는 것을 의미한다.static
내부 클래스는 외부 클래스의 인스턴스 변수에 접근할 수 없으며, 외부 클래스의 인스턴스 없이도 생성될 수 있습니다.<aside> 2️⃣ 장점
</aside>
static
내부 클래스는 외부 클래스의 인스턴스에 의존하지 않는다. 따라서, 외부 클래스의 인스턴스 없이도 static
내부 클래스의 인스턴스를 생성하거나, static
내부 클래스의 메서드를 호출할 수 있다.static
내부 클래스는 외부 클래스 내부에 선언되므로, 외부 클래스와 관련이 있는 로직을 그룹화하는 데 유용하다. 이는 코드의 가독성과 유지 관리성을 향상시킨다.static
내부 클래스는 외부 클래스의 네임스페이스 내에 존재하므로, 이름 충돌을 방지하는 데 도움이 된다.<aside> 3️⃣ 단점
</aside>
static
내부 클래스는 외부 클래스의 인스턴스 변수나 인스턴스 메서드에 접근할 수 없다. 따라서, 외부 클래스의 상태에 의존하는 로직을 static
내부 클래스에서 구현하려면 추가적인 작업이 필요하다.
static
내부 클래스를 과도하게 사용하면 코드의 복잡성이 증가할 수 있다. 특히, static
내부 클래스가 외부 클래스의 세부 구현에 의존하는 경우, 코드의 유지 관리성이 저하될 수 있습니다.static
내부 클래스는 외부 클래스의 상태에 의존하지 않는 동시에 외부 클래스와 밀접하게 관련된 로직을 구현하는 데 적합합니다. 예를 들어, static
내부 클래스는 특정 외부 클래스와 관련된 유틸리티 클래스, 빌더 클래스, 팩토리 클래스 등으로 사용될 수 있다.<aside> 4️⃣ static 키워드를 사용하는 주요 이유
</aside>
static
키워드를 사용하는 주요 이유는 다음과 같다.
static
필드는 클래스의 모든 인스턴스에서 공유된다. 따라서, 모든 인스턴스가 동일한 값을 참조하거나 수정해야 하는 경우 static
필드를 사용할 수 있다.static
메서드는 객체의 상태에 의존하지 않는 메서드를 선언하는 데 주로 사용된다. 이러한 메서드는 주로 유틸리티 메서드로 사용되며, Math
클래스의 Math.abs(int a)
메서드나 Arrays
클래스의 Arrays.sort(int[] a)
메서드가 대표적인 예이다.static final
필드는 상수를 선언하는 데 사용된다. 이 필드는 한 번 초기화되면 변경할 수 없으며, 클래스의 모든 인스턴스에서 동일한 값을 참조한다.static
필드는 클래스의 인스턴스를 하나만 생성하고 이를 전역에서 접근할 수 있게 하는 싱글턴 패턴을 구현하는 데 사용될 수 있다.static
내부 클래스는 외부 클래스의 인스턴스에 의존하지 않는 내부 클래스를 선언하는 데 사용된다. 이로 인해 static
내부 클래스의 인스턴스는 외부 클래스의 인스턴스 없이도 생성할 수 있다.static
키워드를 사용할 때는 주의해야 한다. static
필드는 모든 인스턴스에서 공유되므로, 이 필드를 변경하면 모든 인스턴스에 영향을 미친다. 따라서 static
필드는 상태를 공유해야 하는 경우나 상수를 선언하는 경우에만 사용해야 한다. 또한, static
메서드는 객체의 상태에 접근할 수 없으므로, 이 메서드에서는 오직 매개변수와 static
필드만 사용할 수 있다.<aside> 5️⃣ 상세 설명
</aside>
static
메서드는 클래스 레벨에서 작동하기 때문에, 특정 인스턴스의 상태에 접근할 수 없다. 즉, static
메서드 내에서는 this
키워드를 사용할 수 없으며, 인스턴스 변수나 인스턴스 메서드를 직접 참조할 수 없다.public class MyClass {
private int instanceVar;
public void instanceMethod() {
// 인스턴스 메서드에서는 인스턴스 변수에 접근할 수 있다.
System.out.println(instanceVar);
}
public static void staticMethod() {
// static 메서드에서는 인스턴스 변수에 직접 접근할 수 없다.
// 아래 코드는 컴파일 에러를 발생시킨다.
// System.out.println(instanceVar);
}
}