JAVA

Java 객체지향 기초 – 개발자와 노트북 클래스로 배우는 클래스 관계와 메서드 활용

개발자 누렁이 2025. 4. 15. 00:19
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());
	}
}

 

 

 

 실행 흐름 요약

  1. 두 명의 개발자(James, 김안나)가 만들어집니다.
  2. 각자 Apple과 LG Gram 노트북을 구매합니다.
  3. James의 연봉을 출력합니다.
  4. 김안나의 월급을 50만원 인상한 후 연봉을 출력합니다.
  5. 마지막으로 개발자 정보를 출력합니다.

 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
반응형