package thisjavaexam.immutable;

public class StudentMain {

	public static void main(String[] args) {
		//학생정보를 불러오기 위한 생성자 생성 
		Score score1 = new Score(90);
		Score score2 = new Score(100);
		Student std1 = new Student("홍길동",18,score1);
		Student std2 = new Student("이몽룡",20,score2);

		
		//Student클래스의 학생이름 나이 정보와, Score의 점수정보를 합쳐 출
		System.out.println("학생1의 정보 = " + std1);
		System.out.println("학생2의 정보 = " + std2);
		
	}
}

우선 학생 의 점수를 변경해야 할때를 가정하여 간단하게 작성해본다.

 

필요한 클래스

1. 학생의 이름, 나이를 관리하는 "Student"클래스

2.점수를 변경해야할 "Score"클래스

3.실행할 Main클래스 

 

 

점수 변경을 위한 Score 클래스 작성 

package thisjavaexam.immutable;

public class Score {
	//점수는 변경을 위해서 클래스를 별도 생
	private int score;
	
	//점수를 호출하기위한 생성자 생성 
	public Score(int score) {
		this.score = score;
	}
	//게터 세터 생성
	public int getScore() {
		return score;
	}
	
	public void setScore(int score) {
		this.score = score;
	}
	
	@Override
	public String toString() {
		return String.valueOf(score);
	}

}

 

학생 나이 선언을 위해 Student클래스 작성 

package thisjavaexam.immutable;

public class Student {
	//학생 이름,나이 를 선언 + Score 클래스를 변수로 선언 
	private String name;
	private int age;
	private Score score;

	
	//Main클래스에서 사용하기위한 생성자 생성 
	Student(String  name, int age, Score score){
		this.name = name;
		this.age = age;
		this.score = score;
	}
	
	//각각 게터 , 세터 생성 
	public String getName() {
		return name;
	}
	
	public int getAge() {
		return age;
	}
	
	
	public void setName(String name) {
		this.name = name;
	}
	
	public void setAge(int age) {
		this.age = age;
	}
	
	
	
	//name의 문자열이 임의클래스(내가만든 이클래스) 를 호출하면서 발생될 참조값 반환을 방지하기위한 오버라이딩
	@Override
	public String toString() {
		return " 학생이름 : " + name + " ,나이 : " + age + " ,점수 : " + score ;
	}
	
}

 

실행을 위한 Main클래스 작성

 

실행 결과를 확인해본다 .

 

 

우선 의도한 대로 나오긴 했다. 

 

이제 학생2의 정보를 점수만 80점으로 깍아봐야겠다.

 

//private 로 선언되었기 때문에 setter를 사용하

score2.setScore(80);

//다시 잘 변경되었는지 확인

System.out.println("학생2 점수를 80 점으로 변경");

System.out.println("학생1의 정보 = " + std1);

System.out.println("학생2의 정보 = " + std2);

 

 

어라? 의도한건 ... 학생2의 정보를 수정하면, 학생1의 정보를 동시에 바꾸는거였는데... 잘된다....

이러면 안되는데 ?

 

 

이번엔 학생2의 나이를 30으로 바꿔보자..

package thisjavaexam.immutable;

public class StudentMain {

	public static void main(String[] args) {
		//학생정보를 불러오기 위한 생성자 생성 
		Score score1 = new Score(90);
		Score score2 = new Score(100);
		Student std1 = new Student("홍길동",18,score1);
		Student std2 = new Student("이몽룡",20,score2);

		
		//Student클래스의 학생이름 나이 정보와, Score의 점수정보를 합쳐 출
		System.out.println("학생1의 정보 = " + std1);
		System.out.println("학생2의 정보 = " + std2);
		
		//private 로 선언되었기 때문에 setter를 사용하
		score2.setScore(80);
		//다시 잘 변경되었는지 확인 
		System.out.println("학생2 점수를 80 점으로 변경");
		System.out.println("학생1의 정보 = " + std1);
		System.out.println("학생2의 정보 = " + std2);
		
		//이제 학생이 이몽룡의 나이를 수정해보자 
		std2.setAge(30);
		//다시 잘 된건지 확인
		System.out.println("학생2의 나이를 30으로 변경");
		System.out.println("학생1의 정보 = " + std1);
		System.out.println("학생2의 정보 = " + std2);
	}
}

 

잘...됀다...

 

불변객체를 쓰는걸 연습하려고 짜본건데.....설계를 잘못했나부다 ..

 

+ Recent posts