Java 101 Ep07 - Relationship between classes.

Junhyeok Choi·2023년 2월 23일

Java 101

목록 보기
8/10

객체 지향 프로그램에서는 객체는 다른 객체와 관계를 맺음..
관계의 종류는 총 3가지이다.

  • (1) 집합관계(포함관계) : 완성품과 부품의 관계
  • (2) 사용관계 : 객체가 다른 객체를 사용하는 관계
  • (3) 상속 관계 : 종류 객체와 구체적인 사물 객체관계.

<아래 둘은 코드는 똑같지만, 인간이 해석했을 때는 의미가 다른 것 뿐이다>
(1) Composition : 둘이 빼놓고는 설명이 안되면 집합관계이다. - 포함관계.
Ex) 사람과 뇌. 사람은 뇌를 빼놓고는 설명을 할 수가 없지.
계좌와 계좌번호. 계좌번호를 빼놓고는 계좌를 어떻게 설명하냐.

(2) Aggregation : 둘이 빼놓고 설명 할수도 있다. - 사용관계
Ex) 사람과 자동차. 사람은 자동차를 가질 수도 있고 안 가질 수도 있지.
고객과 계좌. 고객은 계좌를 가질 수도 있고 안 가질 수도 있지.
<사람은 자동차를 보유하고 있다>

1. Historic meaning

Java는 객체지향이다.

가장 강력한 툴이지만, 핵심은 코드를 줄이기 위해서이다. 내가 부분적으로 관리하는 클래스에서 뭔가를 잘못했더라도 다른 클래스의 내용은 온전하기 때문에 사고가 나더라도 쉽게 수습이 가능한 것이다.

또한, 객체로 만들다보면, 자손 객체들이 부모 객체를 상속 받아서 부모 객체에 심각한 영향을 줘서 contaminate 하는 경우가 생기는데 그럼 각각 권한을 부여해야하지 않을까?

2. Computer Engineering

상속은 근본적으로 각 class들간의 관계를 맺어주는 것이다. 그런데, 이 관계를 맺어주는 게 단순히 inheritance만 있는 건 아니다.

3. Syntax of Inheritance

3-0. Structure

3-1. Declare(+)

Class Parent {}
Class Child extend parent{
}

3-2. Changes(*) - so called, 'Overriding'.

Problem : 부모 class을 copy해서 가져다 오는 것이 상속이라고 했다. 그런데, 내가 가져온 부모 class가 자식 class에 무조건 다 맞을까? 분명히 조정을 해야할 필요가 있을 수도 있다. 그럼 수정을 해야하는데, 부모 클래스는 내버려두고 자식 클래스 안에서 부모클래스에서 온 메소드를 조금 수정해서 받을려고 하면 어떻게 해야할까?
Solution : 간단하다. 자식 class안에서 부모 클래스의 methods를 재정의하면 된다.
주석을 보자.

class Point{
		int x; int y;
        String getLocation(){
        return : 'x : ' + x + "y" + y;
        }
        }

위는 부모 클래스이다. 2차원 좌표 (x,y)

    ```
   class Point3D extends Point{
          int z;
       String getLocation(){
    return : 'x : ' + x + "y" + y + "z"+ z;
    }
  }
 ```

아래는 자식 클래스임. (x,y)에 z선언해주고, 메소드를 다시 정의해준 것이 보이는가?

원칙 3가지

    1. 선언부가 부모 클래스의 메서드와 일치해야한다. (이건 뭐 쉽다)
    1. 접근 제어자를 부모 클래스의 메서드보다 좁은 의미로 변경할 수 없다.
      (간단하게 말해서, 엄마 클래스는 소심해서 protected라면 자식클래스는 적어도 protected or public러럼 공개적으로 커져야한다)
    1. 예외는 부모 클래스보다 더 많이 선언할 수 없다. 단순한 개수를 의미한다.

2번과 3번의 이유는 아직 잘 모른다.

기술질문에 대비할만한 내용

Overloading과 Overriding의 차이가 뭔가? 완전히 다른 내용이다. 로딩은 메소드를 추가하는 거고, 라이딩을 메소드를 변경하는 거다.

3-3. Accessor : How to select it? : (1) Super (2) This

딱 2가지 방법이 있다. super와 this.
super와 this 모두 당연히 primitive type이 아니니 reference type의 변수이고, 둘다 같은 변수 이름을 지닌 변수를 찾아다 참조해주는 변수이지만, super은 무조건 부모 class의 변수를 찾고, this는 우선적으로 자기 class 안에 있는 변수를 찾는다는 것 뿐이다.
예를 들어, 부모 클래스에 int x = 10이 있고, 자식클래스에도 int x = 20; 이 있다면, super x = 10; this x = 20; 이지만
예를 들어, 부모 클래스에 int x =10이 있고, 자식클래스에는 없다면, super x = 10; this x = 10;인 셈이다.

    1. Super
      명확하게 말해서, 이 참조변수를 다시 재분류하자면, 이는 생성자이다.

3-4. Encapsulation : How to protect it? ""by using Accessor""

It is very simple concepts. We packed all the concepts as sophisticated word "Encapsulation". But, It is very straightforward. I will discuss about it in derived concepts as It is why 'Objects' exist.

4. Derived Concepts

4-1. Encapsulation : Data hiding

사실 이 개념도 Syntax 의 하위 개념이다. 그러나 너무나도 중요한 개념이라서 따로 뺐다.

  • Syntax
public class Time{
	protected int hour;
    protected int 변수;
   ...
   메소드~~
}

주로 protected 접근자를 부모 클래스에 적어준다. private는 ㅈ

4-2. Polymorphism 다형성

profile
Just do it jun

0개의 댓글