정적멤버(=Static Member)
정적 멤버
-정적(Static)은 고정된이라는 의미임
-정적 멤버는 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 의미함.
정적 멤버 선언
-필드와 메소드 선언시 static 키워드를 추가적으로 붙이면 됨
public class 클래스{
// 정적 필드
static 타입 필드[=초기값]
// 정적 메소드
static 리턴 타입 메소드(매개변수 선언, ....) {...}
}
정적 멤버 사용의 판단 기준
1. 필드
1) 인스턴스 필드 : 객체마다 가지고 있어야 할 데이터
2) 정적 필드 : 객체마다 가지고 있을 필요가 없는 공용 데이터
예) 원의 넓이를 구할 때 size는 변하는 값이므로 인스턴스 필드, pi는 변하지 않는 값이므로 static으로 선언
public class Caclurator{
String size;
static double pi = 3.14;
}
2. 메소드
1) 인스턴스 메소드 : 인스턴스 필드를 포함한다면 인스턴스 메소드로 선언
2) 정적 메소드 : 인스턴스 필드를 포함하고 있지 않다면 정적 메소드로 선언
정적 멤버 사용 가능 시점
-클래스가 메모리로 로딩되면 정적 멤버를 바로 사용할 수 있음
정적 멤버 사용 방식
클래스.필드;
클래스.메소드(매개값, ...);
public class AAA{
static double a = 1234;
static int b(int c, int d) {....}
}
double result1 = 3 * 3 * AAA.a;
// 클래스명.메소드명
int result2 = AAA.b(10, 10);
// 클래스명.메소드명
*원칙적으로는 클래스 이름으로 접근해야 함.
But, 객체 참조 변수로도 접근이 가능하다.
AAA aaa = new AAA();
double result1 = 3 * 3 * aaa.a;
int result2 = aaa.b(10, 10);
정적 메소드 선언 시 주의사항
-정적 메소드를 선언할 때는 이들 내부에 인스턴스 필드나 인스턴스 메소드를 사용할 수 없음.
-객체 자신의 참조인 this 키워드도 사용 불가능
따라서, 정적 메소드에서 인스턴스 멤버를 사용하고 싶다면 객체를 먼저 생성한 후 참조 변수에 접근해야 함
1) 불가능 예시
public class AAA{
1) 인스턴스 필드와 메소드 선언
2) 정적 필드와 메소드 선언
3) 정적 메소드
static void method3(){
this.인스턴스 필드 = 1; (X)
this.인스턴스 메소드(); (X)
정적 필드 = 1; (O)
정적 메소드(); (O)
}
}
2) 가능 예시
static void method3(){
AAA aaa = new AAA();
aaa.인스턴스필드 = 1;
aaa.인스턴스메소드();
}
Final
final
-final : 최종적이라는 의미
-final 필드는 초기값이 저장되면 최종적인 값이 되어서 프로그램 실행 도중 수정할 수 없음
final 필드 선언 방법
final 타입 필드 [=초기값];
<final 필드에 초기값을 줄 수 있는 방법>
1. 필드 선언 시 주기
-단순 값은 필드 선언 시에 주는 것이 간단함
2. 생성자에서 주기
-복잡한 초기화 코드가 필요하거나 객체 생성 시에 외부 데이터로 초기화해야 한다면 생성자에서 초기값을 지정해야 함. 생성자로 지정할 경우, final필드의 최종 초기화를 완료하지 않으면 컴파일 에러가 발생함.
public class Menu{
final String category = "KOREA";
final String price;
String flavor;
public Menu(String price, String flavor){
this.price = price;
this.flavor = flavor;
}
}
출처 : 혼자 공부하는 자바(도서)
'Study' 카테고리의 다른 글
[JAVA]라이브러리와 프레임워크 차이 (0) | 2022.02.09 |
---|---|
[JAVA]제네릭이란? 사용 방법, 사용 이유 (0) | 2021.12.28 |
[JAVA]JVM과 JAVA 실행 방식 (0) | 2021.12.27 |
[JAVA]ajax란 무엇인가? (0) | 2021.12.26 |
[Study / JSPProject]폴더 (0) | 2021.10.21 |