Daily coding
Java Basic : day 9 - Static 스태틱 본문
Static
private int number; // instance 변수
public static int staticNumber; // class 변수라고도 함
// 메모리에 직접 접근하는 변수이기 때문에 getter, setter 가 필요없다.
*
메모리의 종류
stack : local 변수, 선언된 { } 중괄호 블록이 끝나면 사라진다.
heap : new 키워드, 동적할당, 메모리의 저장공간, Gabage Collecter가 지워줌
static : 정적변수, 프로그램 시작부터 메모리에 상주하고 프로그램 끝나면 사라짐
메모리에 공간을 할당하고 값을 유지하기 때문에 주의해서 써야함
system
static 메소드
: 스태틱 메소드는 이렇게 호출한다.
클래스명.스태틱함수명(파라미터);
// 클래스명으로 접근하여 호출하기 때문에
// 인스턴스를 생성하지 않고도 접근할 수 있다.
// 그러나 인스턴스가 따로 없기 때문에 this 참조는 사용 할수 없다.
// 또한, this를 사용하는 인스턴스 멤버,
// 즉, 클래스 내부에 static이 아닌 멤버변수에 static 메소드가 접근할 수 없다.
( this라는 객체 주소값이 아예 없기 때문에 따로 인스턴스를 선언하지 않으면
접근할 주소값이 없고, 스태틱은 참조값이 없고 직접 메모리에 접근하는 방식이다. )
public StaticClass(){
// Static 변수에 +1 하는 메소드 작성
public void method() {
staticNumber++;
}
}
public class Lecture02_Static {
public static void main(String[] args) {
System.out.println("static number : "+StaticClass.staticNumber); // 출력 : 0
StaticClass.staticNumber = 1;
System.out.println("static number : "+StaticClass.staticNumber); // 출력 : 1
// static 변수는 선언과 동시에 메모리에 0이 셋팅이 된다.
// static 변수나 메소드는 별도의 인스턴스 생성 없이 직접 클래스에 접근하여
// 변수나 메소드를 사용할 수 있다.
클래스 객체가 여러개이지만 같은 이름의 static 메소드는 1개임
=> 데이터가 모두 하나의 공간에 저장되고 축적된다.
StaticClass sc= new StaticClass();
System.out.println("sc.staticNumber : " + sc.staticNumber); // 출력 : 1
sc.method(); // staticNumber++
StaticClass sc2= new StaticClass();
System.out.println("sc.staticNumber : " + sc.staticNumber); // 출력 : 2
sc.method(); // staticNumber++
StaticClass sc3= new StaticClass();
System.out.println("sc.staticNumber : " + sc.staticNumber); // 출력 : 3
}
}
// 실무 코드
class StaticClass2{
private int localValue=0;
public StaticClass2() {
System.out.println("생성자 호출");
}
private void func() {
System.out.println("func() 호출");
System.out.println("localValue " + localValue);
}
private void method() {
System.out.println("method() 호출");
}
// 실무에서는 클래스 내부에 static 메소드를 만들어서 한번에 여러 메소드를 호출하도록 한다.
public static StaticClass2 getInstance() {
StaticClass2 sc = new StaticClass2();
sc.method();
sc.func();
return sc;
}
// 위의 메소드는
// 메인함수에서 이렇게 사용한다.
// StaticClass2.getInstance();
// * 결과
// 생성자 호출
// method() 호출
// func() 호출
}
'Language > Java_basic' 카테고리의 다른 글
Java Basic : day 9 - Inheritance 상속 2 - super 참조 (0) | 2019.11.29 |
---|---|
Java Basic : day 9 - Inheritance 상속 1 - extends 예약어, 접근제어자, super (0) | 2019.11.29 |
Java Basic : day 9 - Class 은닉화(캡슐화) 복습 (0) | 2019.11.29 |
Java Basic : day 8 - Example 03: 파일 입출력 / 생성 클래스 구현하기 (0) | 2019.11.27 |
Java Basic : day 8 - Example 02: Sorting 정렬 클래스 구현하기 (0) | 2019.11.27 |