티스토리 뷰
클래스(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 |
'Java' 카테고리의 다른 글
[자바] 접근 제어자(Access modifier) (0) | 2018.03.19 |
---|---|
[자바] 추상클래스와(abstract class) 와 인터페이스(interface) (0) | 2018.03.09 |
[자바] Guava 를 이용한 코드 작성 (0) | 2018.02.21 |
[자바]List 에서 previous 값 접근하기 (0) | 2018.02.13 |
[자바] 자바에서 Call By Value 인가? Call By Reference? (0) | 2018.01.23 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크