티스토리 뷰

Java

[자바]static(클래스) 메소드는 언제 쓰나

§무명소졸§ 2018. 3. 7. 17:43


클래스(static) 메서드는 언제 정의 할까요?

자바에서 class 를 만들 때 흔히 말하는 static 메서드는 혹은 클래스 메서드는 언제 정의해서 사용하면 될까요?

우선 인스턴스 메서드와 클래스 메서드와의 구조적 차이점을 알아 보겠습니다.


- 인스턴스 메서드

  인스턴스에 속해 있습니다. 클래스에 의해 생성된 모든 객체들을 인스턴스라고 합니다.
  즉 인스턴스 메서드를 사용하기 위해서는 객체를 생성해야 됩니다.

- 클래스 메서드

  Class 에 속해 있습니다. 인스턴스 생성없이 클래스참조만으로 사용할수 있습니다.

  


그렇다면 클래스 메서드는 언제 만들면 될까요?

소나타라는 자동차가 있습니다. 길에 나가 보면 소나타가 한두 대가 아니죠, 내 친구 차도 소나타고 윗집 아저씨의 차도 소나타입니다.

각각의 소나타 차량들을 객체로 보시면 됩니다. 분명 다 같은 소나타라는 이름의 차이지만(이부분 불변입니다.) 분명 차량번호는 서로 다르겠죠 위에서 "소나타"라는 차량 이름처럼 모든 객체에 공유하고 싶은 코드를 클래스 메서드로 만드시면 됩니다. 코드로 보시면 이해하기 더욱 쉽습니다.

아래는 위 내용을 적용한 Sonata라는 클래스입니다.


Sonata.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class Sonata {
    private static final String CAR_NAME = "소나타";
 
    private final String serialNo;
 
    public Sonata(String serialNo) {
        this.serialNo = serialNo;
    }
 
    public String getSerialNo() {
        return this.serialNo;
    }
 
    public static String getCarName() {
        return CAR_NAME;
    }
 
    public static void main(String[] args) {
        Sonata s = new Sonata("바018");
        Sonata g = new Sonata("가090");
 
        System.out.println(s.getSerialNo());
        System.out.println(g.getSerialNo());
 
        System.out.println(Sonata.getCarName());
    }
}
cs

OUTPUT:

바018
가090
소나타



추가적으로 객체가 의미 없는 유틸성 클래스들은 클래스 메소드로 만드시면 됩니다. 요즘 말하는 순수 함수처럼 쓰일 수 있는 메서드 들을 말이죠


Math.java

1
2
3
4
5
6
7
public final class Math {  //final (상속 금지)
    private Math() {} //인스턴스 생성금지
 
    public static int sum(int a, int b) {    //부수효과가 없는(외부 변수에 영향 주지않음 )
        return a + b;                        //참초 투명성 있는(입력값이 1,3 이면 리턴값은 항상 4)
    }
}
cs


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크