본문 바로가기
웹 프로그래밍 기초/자바기반의 웹&앱 응용SW 개발자

자바기반의 웹&앱 응용 SW개발자 양성과정 16일차 -29

by oncerun 2020. 3. 18.
반응형

 

1. has a 상속

has a관계는 하나의 개체가 기능이 분리가 되어서 두 개로 나누어지면 하나는 제품형이 되며 하나는 부품형이 됩니다 제품은 실제 기능을 구현하는 부분이며 부품은 제품에 이용당하는 쪽이 됩니다.   제품은 부품을 가지는 관계를 가리켜 HAS A 관계라고 합니다.

부품이라는 개념은 상대적이라 부품이 제품이 될수도있습니다.

아래 코드에서 두 클래스 ExamConsole , Exam을 결합시키는 자바 코드입니다.

 

public class ExamConsole {

	private Exam[] exams;
	private int index;

	public ExamConsole() {
		exams = new Exam[3];
		index = 0;	
        for(int i =0; i<3; i++)
        exams[i]=new Exam();

	}
public class Exam {

	private int kor;
	private int eng;
	private int math;
public int total() {
		return kor + eng + math;
	}

	public float avg() {
		return total() / 3.0f;
	}

 

 

ExamConsole클래스에 Exam [] 변수를 속성으로 추가함으로써 만들어지는 관계가 has a관계입니다.

이후 Exam을 참조하는 참조 변수 3개를 만들어준 뒤 각 exam을 참조하는 객체를 만들어 줍니다.

이젠 ExamConsole 클래스는 Exam클래스를 부품으로 가지게 되어서 Exam의 변수와 메서드를 ExamConsole클래스에서 사용할 수 있게 됩니다. 하지만 ExamConsole에서도 Exam속성이 private으로 보호되어있기 때문에 직접적으로 접근할 수 없는데요  사용할 일이 있으면  이때 getter, setter를 사용해서 값을 지정, 불러올 수 있습니다.

public class Exam {

	private int kor;
	private int eng;
	private int math;
public int total() {
		return kor + eng + math;
	}

	public float avg() {
		return total() / 3.0f;
	}
    	public int getKor() {
		return kor;
	}

	public void setKor(int kor) {
		this.kor = kor;
	}

	public int getEng() {
		return eng;
	}

	public void setEng(int eng) {
		this.eng = eng;
	}

	public int getMath() {
		return math;
	}

	public void setMath(int math) {
		this.math = math;
	}

 

이제 ExamConsole에서 getter와 setter를 사용해서 내부적으로 기능 구현이 가능해집니다.

 

1) HAS A 관계의 종류

 

HAS A 관계는 3가지의 종류가 있습니다.

 

- Composition has a 관계

- Association has a 관계

- Aggregation has a 관계

 

Composition has a 관계는 부품을 일체형으로 가져가는 방법입니다.

public class ExamConsole {

	private Exam exams;
	private int index;

	public ExamConsole() {
		exams = new Exam();
		index = 0;	
    

	}

 

만약 이 Composition 관계를 Association조립형 관계로 바꾸기 위해서는 조립하는 과정이 추가가 됩니다

 

public class ExamConsole {

	private Exam exams;
	

	main(){
    ExamConsole console = new ExamConsole()'
    exams = new Exam();
    console.setExam(exam); //조립
    }
    
    public void setExam(Exam exam){
    	this.exam= exam;
    }

	}
   

setter함수를 추가해서 부품에 결합해주는 방법이 있습니다. 조립하는 방법은 전문용어로는 Dependency Injectionn이라고하고 의존성 주입이라고 합니다.
장점은 제품을 좀더 유연하게만드는 방법이있습니다.

부품을 원할 때  원하는 부품으로 결합해서 사용할 수 있는 장점이 있는 것이죠.

 

만약 조립된 부품이 변경되지 않도록 고정하는 방법도 있습니다. 바로 생성자에 추가시키는 방법이죠

왜냐하면 생성자는 객체를 생성할 때 단 한 번만 실행되는 코드이기 때문입니다.

class EaxmConsole{
private Exam exam;

public ExamConsole(Exam exam){
	this.exam = exam;
}
}

 

다음 방법의 has a 관계는 Aggregation has a 관계가 있습니다.

 

집합형이라 불리는 관계입니다 동일한 종류의 부품을 여러 개 가지는 관계입니다.

public class ExamConsole {

	private Exam[] exams;

	public ExamConsole() {
		exams = new Exam[3];
      

	}

ExamConsole 객체가 생성될 때 Exam을 참조하는 참조 변수 3개가 생성이 자동적으로 됩니다.

반응형

댓글