728x90
반응형
프로젝트 개요
이번 예제는 Programmer(개발자)와 NoteBook(노트북)이라는 두 개의 클래스를 만들고, 개발자가 노트북을 구매하는 시나리오를 통해 객체 간의 관계(Has-A 관계)를 배우는 자바 프로그램입니다.
1. NoteBook 클래스 – 노트북 객체 정의
경로: com.edu.constructor.NoteBook.java
public class NoteBook {
long serialNumber; // 노트북 일련번호
String maker; // 제조사
float price; // 가격
// 기본 생성자
public NoteBook() {}
// 생성자 오버로딩 - 노트북 생성 시 필요한 정보 초기화
public NoteBook(long serialNumber, String maker, float price) {
this.serialNumber = serialNumber;
this.maker = maker;
this.price = price;
}
// 노트북 상세 정보 반환
public String getDetails() {
return serialNumber + ", " + maker + "\t" + price;
}
// 가격 할인 기능
public void discountPrice(int discountValue) {
price -= discountValue;
}
}
설명
- NoteBook 클래스는 노트북의 정보(번호, 제조사, 가격)를 가지고 있어요.
- discountPrice 메서드를 통해 가격을 할인할 수도 있어요!
- 생성자 NoteBook(...)는 객체를 만들 때 초기값을 설정할 수 있게 해줍니다.
2. Programmer 클래스 – 개발자 객체 정의
경로: com.edu.constructor.Programmer.java
public class Programmer {
String name; // 이름
String mainSkill; // 주요 스킬
double salary; // 월급
int bonus; // 보너스
NoteBook noteBook; // 개발자가 소유한 노트북
public Programmer() {}
public Programmer(String name, String mainSkill, double salary, int bonus) {
this.name = name;
this.mainSkill = mainSkill;
this.salary = salary;
this.bonus = bonus;
}
// 노트북 구매 (의존성 주입)
public void buyNoteBook(NoteBook noteBook) {
this.noteBook = noteBook;
}
// 노트북 가져오기
public NoteBook getNoteBook() {
return noteBook;
}
// 개발자 정보 반환
public String getProgrammerInfo() {
return name + "\t" + salary + "\t" + mainSkill;
}
// 연봉 계산 (월급 * 12 + 보너스)
public double getAnnualSalary() {
return (salary * 12) + bonus;
}
// 급여 인상 기능
public void raiseSalary(int amount) {
salary += amount;
}
}
설명
- Programmer는 개발자를 나타내는 클래스에요.
- buyNoteBook() 메서드를 통해 노트북을 “갖게” 만들어요. → 이건 Has-A 관계예요.
- getAnnualSalary()는 연봉 계산을 자동으로 해주는 메서드에요!
- raiseSalary()는 월급을 인상해주는 기능이죠.
3. ProgrammerTest 클래스 – 테스트 코드
경로: com.edu.constructor.test.ProgrammerTest.java
public class ProgrammerTest {
public static void main(String[] args) {
Programmer james = new Programmer("James", "JAVA", 38000, 100);
Programmer 김안나 = new Programmer("김안나", "JS", 48000, 200);
// 개발자들이 노트북 구매
james.buyNoteBook(new NoteBook(111L, "Apple", 3000.0F));
김안나.buyNoteBook(new NoteBook(222L, "LG Gram", 2500.0F));
// James 연봉 출력
System.out.println(james.getAnnualSalary() + "달러");
// 김안나 급여 인상 및 연봉 출력
김안나.raiseSalary(50);
System.out.println(김안나.getAnnualSalary() + "달러");
// 개발자 정보 출력
System.out.println(james.getProgrammerInfo());
System.out.println(김안나.getProgrammerInfo());
}
}
실행 흐름 요약
- 두 명의 개발자(James, 김안나)가 만들어집니다.
- 각자 Apple과 LG Gram 노트북을 구매합니다.
- James의 연봉을 출력합니다.
- 김안나의 월급을 50만원 인상한 후 연봉을 출력합니다.
- 마지막으로 개발자 정보를 출력합니다.
UML 클래스 다이어그램
개발자(Programmer)가 노트북(NoteBook)을 "갖고 있는" 구조를 보여주는 UML 다이어그램은 다음과 같아요.
배운 점 요약
개념설명
클래스 생성자 | 객체 생성 시 초기값 설정 가능 |
Has-A 관계 | Programmer는 NoteBook을 "갖는다" |
메서드 정의 | 객체가 할 수 있는 행동을 정의 |
정보 은닉 안함 | 이번 예제는 필드를 private으로 감싸진 않았지만, 실무에서는 보통 private + getter/setter 구조 사용 |
연봉 계산 | 월급과 보너스를 활용한 실제 계산 로직 |
마무리
이번 예제는 객체지향에서 자주 쓰이는 관계 설정과 메서드 정의 방식을 이해하는 데 아주 좋은 연습이에요.
다음에는 노트북을 배열로 여러 개 구매할 수 있도록 확장하거나, 개발자 목록을 리스트로 관리해보는 것도 도전해보세요!
실습 퀴즈
아래 문제를 풀면서 객체지향 개념을 복습해보자!
Q1. 다음 중 NoteBook 클래스에서 생성자의 역할은?
A. 객체의 메서드를 호출한다
B. 객체를 화면에 출력한다
C. 객체 생성 시 초기값을 설정한다
D. 객체의 메모리를 제거한다
C. 객체 생성 시 초기값을 설정한다
Q2. Programmer 클래스에서 buyNoteBook(NoteBook noteBook) 메서드의 의미는?
A. 노트북을 반납한다
B. 개발자가 노트북을 소유하게 한다 (Has-A 관계)
C. 개발자의 월급을 증가시킨다
D. 노트북 제조사를 출력한다
B. 개발자가 노트북을 소유하게 한다 (Has-A 관계)
Q3. 연봉 계산을 위한 메서드 getAnnualSalary()의 반환값은?
A. 월급 * 6
B. 월급 + 보너스
C. 월급 * 12 + 보너스
D. 월급 * 12 - 보너스
C. 월급 * 12 + 보너스
728x90
반응형
'JAVA' 카테고리의 다른 글
369 게임을 자바로 구현하면서 만난 작은 함정 (0) | 2025.04.15 |
---|---|
Java 객체지향 기초 – 개발자와 노트북 클래스로 배우는 클래스 관계와 메서드 활용2 (1) | 2025.04.15 |
Java로 배우는 은행 시스템 만들기 - 고객과 계좌 객체 관계 이해하기 (0) | 2025.04.15 |