Static, Final이란?
static이랑 final은 class의 필드(변수들) 이랑 메소드(함수들)을 선언할 때 사용한다.
둘은 맴버들(필드,메소드)들을 어떻겍 사용하는지에 대한 정의 권한이라고 생각하면 편하다.
그럼 2개를 나눠서 알아보자
Static
static은 '고정된'이라는 의미를 가진 단어이다.
정적, static맴버는 클래스에 고정된 맴버로써 객체를 생성하지 않고 사용할수 있는 필드와 메소드를 뜻한다.
일반적으로 선언된 맴버들은 인스턴스 맴버라고 해서 사용을하려면 객체(class)를 생성하고 사용해야하지만
static맴버들은 클래스가 메모리로 로딩되기만 하면 .연산자를 사용해서 바로 접근할 수 있다.
예시코드
public class Calculator{
static double pi = 3.14159;
double e = 2.7182;
}
위엔 Calculator라는 class가 있다.
그럼 이 class의 맴버들을 사용해 보자.
System.out.println(cal1.e) //컴파일 에러
System.out.println(cal1.pi) //pi의 값이 정상적으로 나온다.
Calculator cal1 = new Calculator;
System.out.println(cal1.e) //이제 e값이 정상적으로 나온다.
System.out.println(cal1.pi) //pi의 값을 객체를 생성하고 사용할 수 있다.
class의 e값을 사용하려면 객체를 새로 생성해 줘야 하지만 static변수인 pi는 바로 사용할 수 있는 모습이다.
즉 static맴버는 객체 생성 없어도 실행된다.
public class Calculator{
static double pi = 3.14159;
double e = 2.7182;
static{
this.e = 10; //컴파일 에러
}
}
static은 객체 생성을 안해도 사용 가능하기 때문에 참조인 this같은걸 사용할 수 없고 객체 내부의 인스턴스 필드나 메소드를 사용할 수 없음에 주의해야 한다. 사용하고 싶을 땐 객체를 생성하고 사용해야 한다.
Final
final의 뜻은 최종적이라는 뜻이다. 말그대로 한번 선언하게 되면(초기값을 주면) 이것이 마지막으로 값이라는 것이다.
이 필드의 초기값을 주는 방법이 2가지가 있다.
1. 필드 선언시
인터페이스는 추상 메서드를 정의할 수 있다. 단지 선언만 할 수 있다.
final String name = "Korea"
2. 생성자에서 주는 방식
public class country{
final String name;
public country{
this.name = "korea";
}
}
이렇게 초기값을 준 이후에는 변경이 불가능 하다.
Static Final
static과 final을 같이 쓰기도 한다. 이를 불변의 값인 상수로 사용한다.
예를 들자면 파이값 자연 상수 e값들을 이런식으로 선언할 수 있겠다.
static final double PI = 3.14159;
'JAVA > JAVA 기초' 카테고리의 다른 글
[Java/기초] abstract (0) | 2024.03.04 |
---|---|
[Java/기초] Overloading, Overriding (0) | 2024.03.04 |
[Java/기초] Getter Setter (0) | 2024.02.13 |
[Java/기초] Interface (0) | 2024.01.14 |
[Java/기초] 상속 (1) | 2024.01.14 |
Coding, Software, Computer Science 내가 공부한 것들 잘 이해했는지, 설명할 수 있는지 적는 공간