ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2024.1.29
    TIL 2024. 1. 29. 22:42

    ohohohohoh

    금요일에 적다가 말았네요.

    사실 금요일 TIL 좀 욕심내다가 완성못했습니다. ㅠ

    그래서 마저 써보도록 하겠습니다. ㅎㅎ..

     


     

    변수에는 크게 값형(Value)와 참조형(Reference)로 나눠져 있습니다.

     

    값형(Value)

    값형은 stack에 저장되면서 선언될 때마다 자리를 차지하는 변수입니다.

    변수마다 자리를 가지고 있기 때문에 쌓일 수록 데이터가 쌓이게됩니다.

    그렇기 때문에 다른 변수의 값(a)을 가져온다 하더라도 별개의 존재로 있습니다.

     

     

    참조형(Reference)

    참조형은 heap에 저장되는데 new를 통해서 선언됩니다. 선언하게 되면 변수의 주소를 가져와 값형에 저장됩니다.

     

    주소로 가져오기 때문에 같은 주소를 받은 변수를 통해서 변수값을 수정하게 되면 주소에 있는 변수가 바뀌게 되기 때문에 같은 주소를 받는 변수의 값도 바뀌게 됩니다.

     


     

    Class

    참조형 변수 중 대표적인 것은 class 입니다.

     

    class를 가져오기 위해서는 new를 이용해서 선언해줘야합니다.

     

    class MyClass(){ }

    MyClass myClass = new MyClass;

    = 을 기준으로 왼쪽은 값형이고 오른쪽은 참조형입니다.

    즉, 왼쪽은 stack에 저장되고 오른쪽은 heap에 저장됩니다.

     

    new를 해서 새로운 class가 생성되는데 또 new를 하게되면 다른 주소를 가진 클래스가 생깁니다.

    이름은 같지만 서로 다른 존재이기 때문에 한 변수에 클래스를 두번 선언해줬다면 처음에 선언해준 클래스는 연결점이 사라집니다.

    연결이 없어진 클래스는 Garbage Collector(GC)가 수거해가서 빈자리로 만들어줍니다.

     

    Garbage Collector : 더 이상 사용하지 않는 메모리 공간을 자동으로 해제하여 이후 재할당이 가능하도록 만들어 주는 기능

     

    GC가 자리를 비워준다고 한다해서 사용하지 않는 클래스를 많이 만드는 것은 좋지 않습니다.


     

    그렇다면 만약에 한 클래스에 있는 함수를 다른 클래스에서 자주 사용하게 하기 위해서는 어떻게 하는게 좋을까요?

    계속 선언하는 것은 좋지 못하다 했습니다.

    사용할 수 있는 방법은 바로 상속입니다.

     

    기반이 되는 클래스를 '부모' 클래스라고 합니다.

    부모 클래스를 상속받는 클래스는 '자녀' 클래스 라고 합니다.

     

    자녀 클래스는 부모 클래스에 있는 변수나 함수를 사용할 수 있으며 부모 클래스에는 없어도 자녀 클래스에서는 사용할 수 있는 함수나 변수를 따로 생성할 수 있습니다.(없으면 새로 클래스를 만들 이유가 없으므로..)

     

    또한 부모 클래스에 있던 함수를 사용해서 함수의 내용을 바꿔 사용할 수 있습니다.

    클래스를 만들 때 부모 클래스의 형태로 값형을 만들고 자식 클래스의 형태로 참조형을 선언할 수 있습니다.

    이럴 경우에는 실제형태의 모든 부분을 사용할 수 없고, 창조형태에 있는 부분을 사용할 수 있습니다.

    이럴 경우 자식클래스에서 재정의한 함수가 아닌 부모클래스의 함수를 사용하게 됩니다.

     

    자식클래스의 함수를 사용하기 위해서는 어떻게 해야할까요?

    방법은 여러가지가 있습니다.


    Virtual

     

    부모클래스에서 virtual을 이용해서 정의한 함수를 자식클래스에서 override해서 재정의해서 불러올 수 있습니다.

    virtual로 정의된 함수를 사용할 때 override로 재정의되어 있다면 재정의된 내용을 불러오고 없다면 원래 클래스에 저장된 함수를 불러옵니다.


    Abstract

     

    virtual과 다르게 부모클래스에서 abstract를 이용해서 정의한 내용이 비어있는 함수를 자식클래스에서 override해서 정의해서 불러올 수 있습니다.

    부모클래스에 있는 함수들을 사용하기 위해서는 무조건 자식 클래스에서 overr ide해서 정의해줘야지 사용이 가능합니다.

     


    Interface

     

    interface는 기능만을 정의한 것으로 상속은 한가지 클래스만 가능하지만 interface는 두가지 이상 상속이 가능합니다.

    하지만 잘 사용 못할 것 같으면 사용하지 말라 하셔서 당분간 사용하지 않을 예정입니다.. ㅎㅎ

     


     

    금요일에 진행된 강의 내용을 정리했습니다 예~~~~

    내일은 팀과제 마무리하고 과제하면서 있었던 트러블 슈팅에 대해서 적어보도록 하겠습니다.

    'TIL' 카테고리의 다른 글

    2024.1.31  (0) 2024.01.31
    2024.1.30  (0) 2024.01.30
    2024.1.25  (1) 2024.01.25
    2024.1.24  (0) 2024.01.24
    2024.1.23  (2) 2024.01.23
Designed by Tistory.