💡 Kotlin : companion object로 생성된 멤버로, 클래스 당 하나의 값을 가지며 인스턴스를 생성하지 않고도 클래스 내부 정보에 접근해야 하는 필드와 메소드를 관리할 때 사용하는 객체로서, 해당 클래스가 로드되면 초기화가 이루어진다.
static 타입 필드 [= 초기값];
static int a
static 리턴 타입 메소드([매개 변수]) { .. }
static void sum() { .. }
public class StaticMemberEx01 {
static int a; // 정적 필드
int b; // 인스턴스 필드
StaticMemberEx01(int a, int b) {
this.a = a; // 매개값 할당
this.b = b;
}
public String print() {
String value = "a : " + a + ", b : " + b;
return value;
}
public static void main(String[] args) {
StaticMemberEx01 sm = new StaticMemberEx01(1, 2);
StaticMemberEx01 sm1 = new StaticMemberEx01(2, 3);
StaticMemberEx01 sm2 = new StaticMemberEx01(3, 4);
System.out.println(sm.print()); // a : 3, b : 2
System.out.println(sm1.print()); // a : 3, b : 3
System.out.println(sm2.print()); // a : 3, b : 4
}
}
import java.util Scanner;
class Circle {
static /*final*/ double PI = 3.14; // 정적 필드
}
public class StaticMemberEx02 {
public static void main(String[] args) {
System.out.println("반지름을 입력하시오.");
Scanner sc = new Scanner(System.in);
double r = sc.nextDouble();
System.out.println("원 둘레 : " + 2 * r * Circle.PI);
System.out.println("원 넓이 : " + r * r * Circle.PI);
System.out.println("원 부피 : " + 4 / 3 * r * r * r * Circle.PI);
}
}
class A {
int instanceField = 1; // 인스턴스 필드
static int staticField = 1; // 정적 필드
public void instanceMethod() { // 인스턴스 메소드
this.instanceField = 1; // this 사용 가능
instanceField = 1; // 인스턴스 필드 사용 가능
staticField = 1; // 정적 필드 사용 가능
}
public static void staticMethod() {
// this.instanceField = 5; // this 사용 불가(컴파일 에러)
// instanceField = 1; // 인스턴스 필드 사용 불가(컴파일 에러)
staticField = 1; // 정적 필드 사용 가능
}
public class StaticMemberEx03 {
public static void main(String[] args) {
A.staticField = 1; // A클래스 정적 필드 사용 가능
// A.instanceField = 1; // A클래스 인스턴스 필드 사용 불가(필요시 인스턴스 생성 후 호출)
A.staticMethod(); // A클래스 정적 메소드 사용 가능
// A.instanceMethod(); // A클래스 인스턴스 메소드 사용 불가(필요시 인스턴스 생성 후 호출)
}
}
}