[java] 메소드와 변수 정리

yoonheekim·2022년 10월 17일
0

Static

static 은 제어자의 한 종류로 '공통적인' 이라는 의미를 가지고 있다.
클래스 내의 멤버변수, 메소드, 초기화 블럭에 붙여서 사용할 수 있다.
그 중 멤버변수와 메소드는 static 존재 여부에 따라 용도와 용어가 달라진다.

  • static이 붙음
    -클래스 변수
    -클래스 메소드
    -static 블럭
  • static이 안붙음
    -인스턴스 변수
    -인스턴스 메소드

각각의 형태와 용도, 사용방법에 대해 알아보자.

static 블럭

  • 클래스가 로딩되고 변수가 준비된 후 자동으로 실행되는 블럭
  • 용도 : 클래스가 로딩될 때 한 번 실행되므로 static변수의 값을 초기화할 목적으로 사용한다.
    class StaticTest {
    	static int age; 		// 클래스변수 
       	static {				// static 블럭 - 클래스 변수를 초기화
        	age = 30;
        }
    }

왜 변수의 값을 초기화 하는걸까?

1. 클래스 변수

모든 인스턴스가 공통으로 유지해야하는 속성의 값을 클래스 변수로 정의한다.

  • 모든 인스턴스가 하나의 저장공간을 공유함.
  • 인스턴스를 정의하지 않고 언제든 바로 사용할 수 있다.
  • 형식 : 클래스명.클래스변수명
  • 클래스가 로딩될 때 생성되어 프로그램이 종료될 때까지 유지된다.
  • public을 앞에 붙이면 같은 프로그램 내에서 어디서든 접근할 수 있는 전역변수가 된다.

2. 인스턴스 변수

클래스 영역에 선언되며 클래스의 인스턴스가 생성될 때 만들어지는 변수

  • 변수의 값을 저장하거나 불러올 때 먼저 인스턴스를 생성해야 한다.
  • 인스턴스 변수는 인스턴스가 생성될 때마다 메모리에 생성되므로 각기 다른 값을 저장할 수 있다.

3. 지역변수 (변수의 종류 중 하나)

클래스 영역 이외의 영역에 선언된 변수

  • 메서드, 생성자, 초기화 블럭 내부에 선언된 변수
  • for문, while문 블럭 내에 선언됨
  • 메서드 내에 선언된 지역변수는 메서드가 종료되면 자동으로 소멸됨
  • for문이나 while문 블럭 내에 선언된 지역변수는 지역변수가 선언된 블럭 내에서만 사용가능. 벗어나면 소멸됨.

1. 클래스 메소드

2. 인스턴스 메소드

3. 클래스, 인스턴스 메소드에서 호출하기

(1) static 메소드 안에서 static 메소드 호출하기 : 메소드이름();

public class Myclass {
	int num;				// 인스턴스 변수
	static int staticNum = 100;	// 클래스 변수
   
	static {				// static 블럭
   }
   
   public static void test1(){		// 클래스 메소드1
       test2();					// 클래스 메소드2 호출
   }
    public static void test2(){		// 클래스 메소드2
   		System.out.println(staticNum);
       
   }

(2) 인스턴스 메소드에서 인스턴스 메소드 호출하기 : 메소드이름();

public class Myclass {
	int num = 10;				// 인스턴스 변수
	static int staticNum;	// 클래스 변수
   

   
   public void instance1(){		// 인스턴스 메소드1
       instance2();					// 인스턴스 메소드2 호출
   }
    public void instance2(){		// 인스턴스 메소드2
   	System.out.println(num);
       
   }

(3) 인스턴스 메소드에서 클래스 메소드 호출 : 메소드이름();

public class Myclass {
	int num = 10;				// 인스턴스 변수
	static int staticNum = 100;	// 클래스 변수
   
   public void instance1(){		// 인스턴스 메소드
		test1();				// 클래스 메소드 호출
   }
  public static void test1(){	// 클래스 메소드
       System.out.println(staticNum);				
   }

(4) 클래스 메소드에서 인스턴스 메소드 호출
: 인스턴스를 생성한 후 호출

public class Myclass {
	int num = 10;				// 인스턴스 변수
	static int staticNum = 100;	// 클래스 변수
   
   public void instance1(){		// 인스턴스 메소드
		System.out.println(num);						// 클래스 메소드 호출
   }
  public static void test1(){	// 클래스 메소드
      Myclass obj = new Myclass();
		obj.instance();		
   }

1. 클래스 변수

2. 인스턴스 변수

(정리하는 대로 채워나가기!)

profile
개발 걸음마 떼기 👩🏻‍💻

0개의 댓글