Static(정적)

김휘진·2023년 8월 23일
0

Java

목록 보기
1/5

Static

  • 고정되었다는 의미를 가짐
  • static을 사용하여 멤버변수와 메서드를 만들 수 있음
  • static이 붙은 멤버변수와 메서드, 초기화 블럭은 인스턴스가 아닌 클래스에 관계됨
    • 인스턴스를 생성하지 않고도 사용 가능

멤버변수(클래스변수)

  • 모든 인스턴스에 공통적으로 사용되는 클래스변수가 됨
  • 클래스변수는 인스턴스를 생성하지 않고도 사용 가능
  • 클래스가 메모리에 로드될 때 생성
  • 인스턴스변수는 하나의 클래스로부터 생성되었더라도 각기 다른 값 유지
  • 멤버변수는 인스턴스에 관계없이 같은 값을 가짐
    • 하나의 변수를 모든 인스턴스가 공유하기 때문

메서드

  • 인스턴스를 생성하지 않고도 호출 가능한 메서드가 됨
  • static메서드 내에서는 인스턴스멤버들을 직접 사용할 수 없음
  • 인스턴스메서드와 근본적인 차이는 메서드 내에서 인스턴스 멤버를 사용하는가의 여부다
  • 인스턴스 멤버를 사용하지 않는다면 static메서드 사용 권장
    • 인스턴스를 생성하지 않고도 호출 가능
    • 더 편리하고 속도도 빠름

사용 예시 및 차이점

java를 공부하면서 처음에는 늘 이론에 대해 읽고 공부를 하며 넘어갔다.
그렇지만 개념적인 부분이 아무리 읽는다고한들 사실 이해가 잘 되지 않았다.
결국 내가 이해할 수 있는 상황은 코드를 작성하고,
작성된 코드들이 어느 부분이 다른지 보면서 깨닫게 된다.
그래서 위에서 설명한 static 메서드와 static 변수를 어떤 상황에 쓸 수 있고 어떤 상황에 써야 좋은지를 코드를 작성하면서 알아보고자 한다.

static메서드, 멤버변수 선언 방법

static int a = 0; // static멤버변수
public static void myName(){} // static메소드

static 변수 사용 예시 및 차이점

class Score{
    static int num1 = 0; //클래스 필드
    int num2 = 0; //인스턴스 필드
}

public class Static_ex {
	
    public static void main(String[] args) {
    	Score raise = new Score(); //첫번째 number
    	Score check = new Score(); //두번째 number
    	
    	raise.num1++; //클래스 필드 num을 1증가시킴
    	raise.num2++; //인스턴스 필드 num을 1증가시킴
    	System.out.println(check.num1); //두번째 number의 클래스 필드 출력
    	System.out.println(check.num2); //두번째 number의 인스턴스 필드 출력
    }
}

- 결과

static 메서드 사용 예시 및 차이점

class Person{
    static void myName() { //클래스 메소드
	System.out.println("홍길동");
    }

    void friend() { //인스턴스 메소드
	System.out.println("철수");
    }
}

public class Static_ex {
	
    public static void main(String[] args) {
        Person.myName(); //인스턴스를 생성하지 않아도 호출이 가능
    	
        Person name = new Person(); //인스턴스 생성
        name.friend(); //인스턴스를 생성하여야만 호출이 가능
    }
}

- 결과

profile
Don't give up, I can do (IT)

0개의 댓글