코드 그라데이션

Day16 (2). 생성자(2), HAS 관계 본문

Java/Mega

Day16 (2). 생성자(2), HAS 관계

완벽한 장면 2023. 4. 5. 09:31
class B{
	//static int a1;
	int a1;
	int b1;
	B(int a, int b){
		a1 = a;
		b1 = b;
	}
}

public class CTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		B b = new B(5,7); //a1 5 0 b1 7 
		b.a1 = 20;
		//a1 = 20, b1 = 7
		//static a1로 바뀌면 B 객체가 100개 만들어지더라도 a는 하나가지고 쓰면 되어서 하나.
		//static이면, a는 객체 만들 필요 없이 B.a1 찍으면 사용이 가능함.
	}

}

 

 

Has 관계

클래스 내부에 다른 클래스의 요소를 가지고 있는 관계

 

상황설정

Class A{
    int a;
    String str;
    B b;
}

Class B{
    int x;
}

A a = new A();

 

내가 a인데, b를 불러서 B에 있는 x를 쓰고 싶다.

어떻게 해야 할까?

a.b.x??? 될까??? 안 된다.

 

a.b = new B(); // 이걸 먼저 하고

a.b.x = 20; // 이렇게 값을 집어넣는다.

이러면 x에 20이 들어감.

 

Class A{
    int a;
    String str;
    B b;
}

Class B{
    int x;
}
Class C{
   B b = new B();
}

이것도 된다.

 

우선

Class A{
    int a;
    String str;
    B b; // 여기 있는 b와
}

Class B{
    int x;
}
Class C{
   B b = new B(); // 이 b
}

는 같은 걸까??

No.

 

C c = new C();

c.b.x = 30; 

이건 될까? Yes

클래스 C에다가 b 객체를 바로 만들잖아.

그래서 만드는 순간 세팅이 되어서 나오는 것이다.

 

그렇다면

C c = new C();

c.b.x = 30;

C c1 = new C();

C1.b.x = 40; 

이 두개는 같은 것인가? No!

=> 객체가 서로 다른데 어떻게 그 안에 있는 것들이 같다고 할 수 있겠는가.

 

ex)

자동차 안에 바퀴, 헨들 등의 여러가지 요소(클래스)가 포함되어있는 관계라고 생각하면 된다.

 

자동차 객체

엔진(객체), 바퀴(객체), 핸들(객체)

 

코드 예시

package Day16;

class C{
	int a;
	D d;
}
class D{
	String str;
}

public class HasTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		C c = new C();
		c.d = new D();
		c.d.str = "안녕하세요~~~~";
		c.a = 10;
		System.out.println(c.a+c.d.str);
	}

}

실행결과

10안녕하세요~~~
728x90

'Java > Mega' 카테고리의 다른 글

Day19. 문방구 퀴즈 <제품 구매> 공통 코드  (0) 2023.04.08
Has 관계 예제  (0) 2023.04.05
Day16 (1). 생성자  (0) 2023.04.05
Day15. 클래스 도입  (0) 2023.04.05
Day14. 재귀함수의 개념  (0) 2023.04.05
Comments