클래스 정의와 객체 생성 실습문제이번 실습은
Product클래스를 만들고, 생성자와 일반 메서드를 작성한 뒤Product객체 여러 개를 배열에 저장해서 출력하는 문제다.
문제에서 요구한 내용은 다음과 같다.
Product클래스에name,balance,price멤버변수를 만든다.
- 생성자는 두 개를 만든다.
Product(String, int, int)Product()
- 기본 생성자
Product()는"듀크인형",5,10000으로 초기화한다.
getName(),getBalance(),getPrice()메서드를 만든다.
main()에서는Product타입 배열 5칸을 만들고,Product객체 5개를 저장한다.
- 마지막에는 상품명, 재고량, 가격을 한 줄씩 출력한다.
(Ex => 듀크인형 5 10,000원)
- 가격은 천 단위마다
,를 붙이고 금액 끝에원을 붙여야 한다.![]()
풀이 순서앞으로 항상 실습을 하기 전에 어떤 순서로 구현을 할지 미리 정해놓고 진행할 예정이다.
만약 잘못된 순서라면 그거에 대해서도 정리를 할 예정이다!
1.Product클래스 생성해서 멤버변수 생성
2. 기본값 생성자 생성 & 생성자 생성
3. 상품명 리턴 일반 메서드 생성
4. 재고량 리턴 일반 메서드 생성
5. 가격 리턴 일반 메서드 생성
6.Product타입의 5개의 원소를 갖는 배열 생성
7.Product객체 5개 생성
8.Product객체 배열 1개씩 뽑기 & 각 객체 문구 출력
8-1. 천단위마다,를 찍기 위해printf사용
1. Product 클래스 생성해서 멤버변수 생성가장 먼저
Product클래스를 만들고, 상품 정보를 저장할 멤버변수 3개를 선언했다.class Product { String name; int balance; int price; }여기서
name은 상품명balance는 재고량price는 가격을 저장하는 변수다.
즉, 이 단계는 상품 객체의 틀을 먼저 만드는 단계다.![]()
2. 기본값 생성자 생성 & 생성자 생성다음으로 생성자 두 개를 만들었다.
먼저 전달받은 값으로 멤버변수를 초기화하는 생성자를 작성했다.Product(String name, int balance, int price) { this.name = name; this.balance = balance; this.price = price; }
그리고 기본 생성자는 이렇게 만들었다.
Product() { this("듀크인형", 5, 10000); }기본 생성자 안에서
this()를 사용하면
같은 클래스 안의 다른 생성자를 호출할 수 있다.
여기서는"듀크인형",5,10000을 기본값으로 넘겨서
문제에서 요구한 초기값이 자동으로 들어가게 만들었다.![]()
3. 상품명 리턴 일반 메서드 생성이제 상품명을 반환하는 일반 메서드를 만들었다.
String getName() { return name; }이 메서드는 객체 안에 저장된
name값을 그대로 반환한다.
문제에getName()이라고 정확히 적혀 있으므로,
메서드 이름도 그대로 맞춰야 한다.![]()
4. 재고량 리턴 일반 메서드 생성다음은 재고량을 반환하는 메서드다.
int getBalance() { return balance; }이 메서드는
balance값을 반환한다.
즉, 객체마다 가지고 있는 재고량을 꺼내는 역할이다.![]()
5. 가격 리턴 일반 메서드 생성마지막으로 가격을 반환하는 메서드를 만들었다.
int getPrice() { return price; }이렇게 해서 문제에서 요구한 일반 메서드 3개를 모두 작성했다.
![]()
여기서 다시 느낀 건,
문제에서 요구한 메서드 이름을 정확히 보는 게 정말 중요하다는 점이다. (왜냐하면 그냥 마음대로 일반메서드명을 지정했다가 다시 제출하는 상황이 발생했기 때문 ㅜㅜ)
6. Product타입의 5개의 원소를 갖는 배열 생성이제
main()으로 와서Product타입 배열을 만들었다.Product[] ary = new Product[5];이 코드는
Product객체 5개를 만든 것이 아니라,
Product객체를 저장할 수 있는 칸 5개를 만든 것이다.
즉, 아직 각 칸에는 실제 객체가 들어 있지 않다.
그래서 다음 단계에서new Product(...)로 객체를 따로 넣어줘야 한다.![]()
7. Product 객체 5개 생성배열을 만든 뒤에는 각 칸에
Product객체를 생성해서 저장했다.ary[0] = new Product("우사기", 5, 500000000); ary[1] = new Product("치이카와", 3, 36000000); ary[2] = new Product("하치와레", 15, 72000); ary[3] = new Product("춘식이", 8, 9000); ary[4] = new Product();앞의 네 개는 값을 직접 넣어서 생성했고,
마지막 하나는 기본 생성자를 호출했다.
그래서ary[4]는 자동으로
- 상품명:
"듀크인형"- 재고량:
5- 가격:
10000으로 초기화된다.
![]()
8. Product 객체 배열 1개씩 뽑기 & 각 객체 문구 출력이제 배열에 저장된
Product객체를 하나씩 꺼내서 출력해야 한다.
그래서 향상된for문을 사용해 각 객체를 순서대로 꺼냈다.![]()
8-1. 천단위마다 ,를 찍기 위해 printf 사용문제의 마지막 조건은 가격에 천 단위마다
,를 붙이는 것이었다.
이 부분은 처음에는 바로 떠오르지 않았는데,
구글링을 통해 찾아보니printf를 사용하면 쉽게 처리할 수 있었다.
참고 자료
최종 출력 코드는 이렇게 정리했다.for(Product elem: ary) { System.out.printf("%s %d %,d원 \n", elem.getName(), elem.getBalance(), elem.getPrice()); }여기서
%s는 문자열%d는 정수%,d는 천 단위 구분기호가 들어간 정수를 의미한다.
그래서500000000은500,000,000처럼 출력되고,
금액 끝에원도 붙일 수 있다.![]()
최종 코드package day6;
class Product {
String name;
int balance;
int price;
Product(String name, int balance, int price) {
this.name = name;
this.balance = balance;
this.price = price;
}
Product() {
this("듀크인형", 5, 10000);
}
String getName() {
return name;
}
int getBalance() {
return balance;
}
int getPrice() {
return price;
}
}
public class ProductTest {
public static void main(String[] args) {
Product[] ary = new Product[5];
ary[0] = new Product("우사기", 5, 500000000);
ary[1] = new Product("치이카와", 3 , 36000000);
ary[2] = new Product("하치와레", 15, 72000);
ary[3] = new Product("춘식이", 8, 9000);
ary[4] = new Product();
for(Product elem: ary) {
System.out.printf("%s %d %,d원 \n", elem.getName(), elem.getBalance(), elem.getPrice());
}
}
}
실습하면서 정리한 점이번 실습에서는 다음 흐름을 한 번에 연습할 수 있었다.
- 기본 생성자에서
this()로 다른 생성자를 호출하는 방법- 객체 배열을 만들고 각 칸에 객체를 저장하는 방법
- 향상된
for문으로 배열 요소를 꺼내는 방법printf로 출력 형식을 맞추는 방법특히 이번 실습에서는
문제에서 요구한 메서드 이름을 정확히 지켜야 한다는 점과
가격 출력 형식은printf로 해결할 수 있다는 점을 확실히 익혔다.