240116-TIL

2024. 1. 16. 21:12내일배움캠프

오늘은 팀 프로젝트 마지막 날이다

 

팀원들과 함께 작업한걸 하나로 합쳤고 어떠한 오류가 있는지

 

작업을 하다가 막혔던 부분은 뭐가 있는지 아직도 해결을 못해서 과제 결과물로

 

구현하지 못한 부분이 어떤 부분이 있는지 살펴보았다.

 

그간 써내려온 코드를 주르르르륵 보면서 느낀점은 

 

서로 공통된 부분은 부모 클래스 하나를 만들어서 상속받아 쓰는것도 나쁘지 않겠다 였다.

 

그래서 오늘은 클래스의 상속에 대해서 좀더 자세히 알아볼까 한다.

 

상속

더보기

클래스의 상속이란?

 

일단 우리가 아는 그 상속이 맞다 유산을 상속하다.

 

객체 지향  프로그래밍에선 부모 클래스와 자식 클래스라는 개념이 있는데

 

부모 클래스는 자식 클래스의 기반이 된다 하여 기반 클래스라고 부르기도

 

자식 클래스는 부모 클래스로부터 파생되었다고 해서 파생 클래스라고도 불리기도한다.

 

 

부르는 용어가 여러가지가 있긴 한데 그래서 어떻게 쓰냐?

 

C#에서 자식 클래스를 정의하는 방법은 클래스 명 뒤에 :(Colon) 을 찍고 부모 클래스의 이름을 써주면 된다.

 

단! 지난번에 C#에 대해 전체적인 학습을 했을때 배웠던것처럼 C#에선 클래스의 다중상속은 지원하지 않는다

 

class 부모 클래스
{
 // 부모 클래스 필드 값
 // 부모 클래스 메소드
}

class 자식 클래스 : 부모 클래스
{
  // 부모 클래스의 모든 상태와 행동이 전달
}

 

예시 코드를 보자 부모 클래스는 자식 클래스에게 모든 필드와 메소드를 물려주게 되며

 

자식 클래스는 부모의 모든 멤버를 사용할 수 있다.

 

protected 접근제한자

접근제한자에도 좀 다른것이 있는데

 

public , private 모두 익숙하게 사용하고 있지만 이 클래스의 상속에서 사용할 수 있는 접근제한자인

 

protected란 녀석이 있다. 이 녀석은 private와 같이 외부에서 접근이 불가하지만

 

상속한 클래스에선 예외로 접근이 가능한 접근제한자이다.

 

 

this 와 base 키워드

this 키워드는 클래스 내부에서 멤버에 접근할 때 멤버의 이름으로 바로 멤버에 접근할 수 있다.

 

예시 코드를 보자

class Character
{
    protected int hp;
    private int attack;

    public Character(int attack)
    {
        this.attack = attack; 
        //매개변수와 내부 멤버 변수의 이름이 같은 상황
        //this키워드를 통해 내부 멤버 변수에 접근할 수 있다.
    }
}

 

attack이라는 내부 멤버 변수와 Character()의 매개변수 이름이 같은 상황에 this키워드를 통해 내부 멤버 변수에

 

매개변수로 값을 할당해 줄 수 있다.

 

Base 키워드는 this와 다르게 부모 클래스에 있는 것을 가르킨다.

 

예시 코드를 보자

class Character
{
    protected int hp;
    protected int attack;

}
class Knight : Character
{
    int hp;
    private int defense;
    public Knight(int hp)
    {
        base.hp = hp;
        this.hp = 100;
    }
    public int Hp
    {
        get { return hp; }
    }
    public int Php //부모의 hp를 확인
    {
        get { return base.hp; }
    }
}

class Program
{
    static void Main(string[] args)
    {
        Knight knight = new Knight(200);
        Console.WriteLine(knight.Hp); //현재 hp를 출력
        Console.WriteLine(knight.Php); //부모의 hp를 출력
    }
}

// 출력결과
Knight.hp = 100;
Character.hp = 200;

출력결과를 보면 Knight의 hp는 100이 출력되고 Character의 hp는 200으로 출력되는것을 볼 수 있다.

 

자식 클래스에서 부모클래스의 내부 멤버변수에 접근이 가능하다는 것을 알 수 있다.

 

 

아까 내가 말했던 클래스의 다중 상속이 불가능 하다라는걸 기억하는가?

 

물론 C#에서의 클래스는 다중 상속이 불가능하지만 부모클래스에서 자식클래스로 상속을 해주고

 

이 자식클래스가 또 자식 클래스에게 자기 자신을 상속해 줄 수 있다.

 

상속 -> 상속의 느낌이다.

 

너무 잘그렸지 않은가? 왼쪽의 그림처럼 2가지의 부모클래스를 가지는건 불가능하지만

 

오른쪽 그림처럼 부모 자식 손주 클래스를 가지는건 가능하다.

 

이렇게 클래스에 상속에 대해서 알아보았다.

 

사실 아직도 감이 잘 오질 않는다.

 

어쩔때 상속을 해서 사용을 하는게 좋을지 좀더 많은 코드를 작성해보며

 

몸으로 느껴야 좀 더 잘 활용하게 될 것 같다

 

1월 18일 TIL은 이렇게 마치도록 하겠다.

 

 

 

'내일배움캠프' 카테고리의 다른 글

240122-TIL  (0) 2024.01.22
240118-TIL  (0) 2024.01.18
240115-TIL  (0) 2024.01.15
240112-TIL  (0) 2024.01.12
240111-TIL  (0) 2024.01.11