자바클래스 #13 생성자와 String.format()

minsekim1·2022년 6월 6일

java

목록 보기
13/13

생성자는 반환이 없다.

생성자는 main과 마찬가지로 이미 쓰이고 있는 함수다.
예를 들면

class Handle {
	String matter;
}

라는 클래스가 있다.
여기에 생성자는 없지만 new Handle()하면 인스턴스를 만들 수 있다. 이는 기본으로 제공을 하고 있기 때문이다. 이를 디폴트 생성자라고 한다.

하지만 matter을 기본값으로 넣고 싶을 땐 불가능하다.
즉, 매번

Handle handle1 = new Handle();
handle1.matter = "나무";

로 넣어줘야한다는 것.
이를 한번에 하기 위해서 생성자를 사용하는 것이다.

생성자 사용법

class Handle {
	String matter;
    Handle (String m){
    	this.matter = m;
    }
}
Handle handle1 = new Handle("나무");

이렇게 하면 기본 값으로 matter에 나무가 들어간다.
하지만 디폴트 생성자가 사라진다.
따라서 디폴트 생성자가 필요할경우 Handle(){}를 넣어주어야한다. 즉 생성자가 2개 필요할 수도 있다.

클래스 값 출력 간소화

이전 자바클래스 #12의 설명에서 클래스 값을 출력하기 위해서 아래처럼 해주었다.

Handle handle1 = new Handle();
handle1.matter = "나무";
System.out.println(handle1.matter);

handle2, handle3도 출력할 때마다 직접 값을 가져와서 했는데 이는 SOLID원칙과 크게 어긋난다. 자바는 객체지향언어와 SOLID라는 특징을 중요시하는데, 어긋나는 부분은 handle1.matter을 직접 참조한다는 것과 handle2, handle3의 값을 출력하려면 같은 값

System.out.println(handle2.matter);
System.out.println(handle3.matter);

을 써야한다는 것.

이를 줄이기 위해 유용하게 쓰일 메서드가 있다.
Stirng의 format인데 printf와 쓰임새가 같다.

String.format("어제는 [%d]명, %s",3, "고기를 먹었다.")

=> 어제는 [3]명, 고기를 먹었다.

%d에 3이 들어가고, %s에 그 다음인 "고기"가 들어간다.

응용

public class GorokeTest {
  public static void main(String[] args) {
    /* 1. TOP 3 고로케를 객체로 만드세요. */
    Goroke g1 = new Goroke("피자", 1000);
    Goroke g2 = new Goroke("야채", 800);
    Goroke g3 = new Goroke("팥", 500);
    
    /* 2. 고로케 정보를 출력하세요. */
    System.out.printf("%s\n", g1.str());
    System.out.printf("%s\n", g2.str());
    System.out.printf("%s\n", g3.str());
  }
}

class Goroke {
  // 필드
  String name;
  int price;
  
  // 생성자
  Goroke(String n, int p) {
    name = n;
    price = p;
  }
  
  // 메소드
  String str() {
    return String.format("Goroke { name: %s, price: %d원 }", name, price);
  }
}
profile
안녕하세요! 백엔드로 변신중인 4년차 풀스택 개발자 민세킴입니다.

0개의 댓글