Java 기초 (13) static, 변수의 종류

코린이서현이·2023년 7월 18일
0

Java

목록 보기
13/46

📕 static 예약어

변수와 메소드에 붙여서 쓸 수 있다.

📖 static 변수

  • static변수는 메모리에 딱 한번 할당되어 모든 클래스에 공유되어 사용된다.
  • 같은 클래스에서 생성된 인스턴스들이 같은 값을 공유하게 된다.
  • static변수 = 클래스 변수 = 정적 변수

✍️ 설명 코드

package test;

class Re {
	static int s = 0;                  //static변수
	int i;                             //인스턴스 변수
}
public class StaticTset {

	public static void main(String[] args) {
		
		//static변수는 객체를 생성하지 않고도 클래스이름.변수명으로 사용이 가능하다.
		System.out.println(Re.s);					//0
		
		Re re1 = new Re();								
		Re re2 = new Re();		
		
		//인스턴스 변수 i는 객체마다 각각 부여된다.
		re1.i = 1;												
		re2.i = 2;
		
		//인스턴스 변수 i는 서로 다른 값이 출력		
		System.out.println(re1.i);					//1	
		System.out.println(re2.i);					//2
		
		//static변수 s는 클래스마다 같은 값이 출력
		System.out.println(re1.s);					//0
		System.out.println(re2.s);					//0
		//static변수는 객체이름.변수명으로 접근할 수 있지만 클래스이름.변수명이 권장된다.
				
	}
}

👉 인스턴스변수는 각각 다른 값을 갖지만 static변수는 공통으로 사용되는 것을 확인 할 수 있다.

➕ static변수 접근 방법 : 클래스 이름으로 직접 참조한다.

객체를 생성하지 않고도 변수에 접근할 수 있다.

  클래스이름.변수명

📖 static 메소드

: 메소드에 static예약어를 붙여 사용
객체를 생성하지 않고도 메소드를 사용할 수 있다.

class Re {
	static int s = 0;
	int i;
	
	static void st() {
		System.out.println("짜잔");
	}
}
public class StaticTset {

	public static void main(String[] args) {
		
		//static메소드는 인스턴스를 생성하지 않고도 클래스이름.메소드로 사용할 수 있다.
		Re.st();
		
		Re re1 = new Re();
		re1.st();
	}
}

📒 클래스 메소드 내에 올 수 있는 변수

class Re {
	static int s = 0;
	int i;
	
	static void st() {
		System.out.println("짜잔");
//	i = 1; 인스턴스 변수는 클래스 메소드 내에서 사용할 수 없다.
		s = 2;              //static변수
		int d = 3;          //지역변수 
	}
}

static변수, 지역변수(해당 클래스 내에서 선언한 변수)

❌ 인스턴스 변수

static 메소드는 인스턴스가 생성되지 않아도 사용할 수 있는 메소드다. 따라서 인스턴스가 생성되어야지만 쓸 수 있는 인스턴스 변수는 올 수 없다.

👉 생성 시점을 고려해서 변수를 사용해야함을 알 수 있다.

📖 변수의 종류

  • 지역변수
    : 함수내 메서드 내부에서 선언되는 변수로 외부에서는 사용될 수 없다.
    함수가 호출될 때 스택에 생성되고 함수가 반환되면 메모리공간이 해제되면서 지역변수도 사라진다.
  • 멤버변수(인스턴스 변수)
    : 클래스가 생성될 때 힙 메모리에 생성되는 변수이다.
  • static 변수
    : 클래스 생성과 상관없이 데이터 영역에 생성된다.
profile
24년도까지 프로젝트 두개를 마치고 25년에는 개발 팀장을 할 수 있는 실력이 되자!

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

잘 봤습니다. 좋은 글 감사합니다.

답글 달기