Java

2024.04.24 의존관계

정훈5 2024. 4. 24. 09:01

의존관계(Dependency) 에 대해 알아 보자.

  • 의존관계는 한 클래스가 다른 클래스를 사용하는 관계를 나타냅니다.즉, 어떤 클래스가 다른 클래스를 참조하는 것을 말합니다. 이는 한 클래스의 변경이 다른 클래스에 영향을 줄 수 있음을 의미합니다.
  • 예를 들어, 자동차 클래스가 엔진 클래스에 의존할 때, 자동차 클래스는 엔진을 사용하고 있으며, 엔진 클래스의 변경이 자동차 클래스에 영향을 줄 수 있습니다.

도전 문제 - 학생과 학급은 어떤 관계로 바라볼 수 있을까?

Classroom 객체와 Student 객체는 연관 관계를 형성하고 있습니다. 단 Classroom 안에 Student[ ] 배열을 가지고 있지만 단순히 저장하는 용도 이며 Student 필드를 가지고 있지 않습니다. 이는 직접 적인 포홤 관계를 나타내지 않습니다.

 

package basic.ch19;

public class Classroom {
	
	private String ClassName;
	private Student[] students; // 멤버변수 에는 배열을 지정하지 않아도 된다.
	private int studentCount;
	private final int MAX_STUDENT = 30;
	
	public Classroom(String className) {
		this.ClassName = className;
		students = new Student[MAX_STUDENT]; // student 객체 X, stduent 배열 O
		this.studentCount= 0; // 0 으로 초기화
	}// 생성자
	
	// 학생을 추가하는 기능 만들기
	public void addStudent(Student student) {
		if(studentCount < MAX_STUDENT) {
			students[0] = student;
			studentCount++; // 후위 연산자
			
		} else {
			System.out.println("정원 초과");
			
		}
	} // end of addStudent()
	
	// 학습에 속한 모든 학생 정보를 출력하는 기능을 만드시오.
	public void showStudents() {
		
		for(int i=0; i<students.length; i++) {
			// 방어적 코드 작성
			if(students[i] != null) { // students 배열 값에 null 값이 아니면 출력해라
				// student[i] ---> [객체주소] ---> heap 영역 객체를 참조
				System.out.println("name : " + students[i].getName()+ " , age : " + students[i].getAge());
			}
		}
	} // end of showStudents()
	
} // end of class

 

package basic.ch19;

public class Student {
	// 멤버 변수
	private String name;
	private int age;
	
	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	} // 생성자
	
	public String getName() {
		return name;
	} // getter
	
	public int getAge() {
		return age;
	}// getter
	
	public void setName(String name) {
		this.name = name;
	} // setter
	
	public void setAge(int age) {
		this.age = age;
	} // setter

} // end of class

 

package basic.ch19;

public class ClassroomTest {

	public static void main(String[] args) {
		
		Classroom classroomA = new Classroom("C4"); // Classroom 인스턴스 생성
		Student student1 = new Student("홍길동", 20); // Student 인스턴스 생성
		Student student2 = new Student("이순신", 24); // Student 인스턴스 생성
		
		classroomA.addStudent(student1); // Classroom의 addStudent(Student) 메서드 실행
		classroomA.showStudents(); // 학습에 속한 모든 학생 정보를 출력
		
		classroomA.addStudent(student2); // Classroom의 addStudent(Student) 메서드 실행
		classroomA.showStudents(); // 학습에 속한 모든 학생 정보를 출력
		
	} // end of main

} // end of class