[Java] static 변수와 메서드

정석·2024년 1월 12일

Java

목록 보기
27/39
post-thumbnail

김영한의 자바 강의를 통해 학습한 내용을 정리하였다.

Static은 메서드 영역에 할당된다.


💡 Static 변수의 변경 과정 예시

▶︎ Moon.java

Class Moon {
    public String name;
    public static int count =0;

    public Moon(String name) {
        this.name = name;
        count++;	
     }
}

▶︎ MoonMain.java

public class MoonMain {
	public static void main(Stirng[] args){
    	Moon moon = new Moon(A); // moon 이라는 인스턴스를 생성하며 name을 A로 초기화. 
        System.out.println(A.count); // 1로 출력
     }
}

Moon 이라는 클래스는 사용자가 인스턴스를 생성할 때 count 가 증가되는 생성자를 가지고 있는 코드이다. count 자체가 static 으로 선언 되었기 때문에 인스턴스 변수와 달리 메서드 영역의 클래스 안에서 값이 바뀌므로 이 후에 새로운 인스턴스를 생성해서 static 변수의 값에 변화를 주어도 전에 추가됐던 값에서 변경될 수 있다.

인스턴스 변수를 통해 값을 저장하거나 변경하려면 매번 인스턴스를 생성해야하고, 각 인스턴스마다 값이 개별적이다.
이러한 불편함을 static 을 통해 해결한다.
static 이 선언된 멤버 변수는 힙 영역 이 아닌 메서드 영역 에서 관리된다 (공용적인 부분? 으로 이해함). 따라서 static 변수는 클래스명.변수명 으로 접근이 가능하다.

💡 Static 메서드

우선 Static 메서드Class명.Static 메서드명 으로 호출한다.
코드 초입에 import static Class명.Static 메서드명 을 선언하면 그냥 Static 메서드명 으로만 호출할 수도 있다.

인스턴스 메서드와 비교하기 위해 인스턴스 메서드를 먼저 살펴본다.

▶︎ ExInstance.java (인스턴스 메서드)

public class ExInstance {
	public String exinstance(String str){
    	return result = "***" + str "***";
 	}       
}
  • 예시 클래스이다. ExInstance 클래스 안에 exinstance 메서드가 실행되면 매개변수로 들어온 str 의 앞 뒤에 *** 이 붙어서 저장된다. 우리는 main 함수에서 exinstance 메서드를 사용하려면 ExInstance 인스턴스를 꼭 생성해야만한다. 아래와 ExMain.java 처럼 말이다.

▶︎ ExMain.java

public class ExMain{
	public static void main(String[] args) {
    	String a = "good morning";
        Exinstance exinstance = new Exinstance();
        String result = exinstance(a);
        System.out.println(result);
 	}       
}        

객체 생성의 필요 없이 단순히 기능적인 부분(메서드)만 사용하기 위해 생성자를 생성하는 건 번거로운 작업이다. 그래서 Static 메서드 를 활용하면 훨씬 편리하다.


Static 을 활용한 메서드는 아래와 같다.

▶︎ ExStatic.java (스태틱 메서드)

public class ExStatic{
	public static String exStaticMethod(String str){
    	return result = "***" + str "***";
 	}       
}

▶︎ ExMain2.java

public class ExMain2{
	public static void main(String[] args) {
    	String a = "good morning";
        String result = ExStatic.exStaticMethod(a); // static 메서드는 "클래스명 + . + 메서드명"으로 호출함
        System.out.println(result);
 	}       
}        

✓ Static 메서드의 특징들

  • 인스턴스 메서드 = Static 이 붙지 않은 멤버 메서드
    클래스 메서드 = Static 이 붙은 멤버 메서드 (정적 메서드, static 메서드)

  • Static 메서드 안에서 Static 만 사용가능하다. 사실 당연한 게 인스턴스 변수와 인스턴스 메서드는 인스턴스를 생성한 후 해당 참조 값을 받아서 써야 하기에 메서드 영역 안에서는 사용할 수 없다.

0개의 댓글