ABOUT ME

-

오늘
-
어제
-
-
  • KOSTA 교육 10일차 (객체지향, reference 타입, instanceof 연산자, 추상메소드 , 인스턴스)
    Review 2020. 6. 20. 21:48

    18.11.9(금)

     

    배운 내용

     

    1. reference 타입
    2. 인스턴스(Instance)
    3. 추상메소드(Abstract)
    4. instanceof 연산자

    1. reference(레퍼런스) 타입

    레퍼런스 타입은?

    메모리상에 할당되는 각각의 공간에 참조를 위한 주소값이 들어가는 타입을 말한다.

    • 상속 관계에서만 유효하다.
      Account obj1 = new CheckingAccount -> 이는 Account로 형변환이 된 것
    • 상위클래스 객체에 하위클래스 객체를 담을 수 있지만 반대의 경우 불가능하다.
      CheckingAccount obj2 = (CheckingAccount) obj1 -> obj2를 1로 강제로 형변환 시켜야한다.

    2. 인스턴스

    인스턴스는?

    객체가 실질적으로 메모리를 차지하게 되는 것을 말한다.

    • 이런 생성된 객체를 실제로 생성하는 것을 인스턴스화라고 한다.

    • str을 String클래스로 객체를 선언
    • new를 사용하여 str에 메모리를 할당해주고 출력하면 인스턴스화 한다는 것이다.

    3. 추상메소드(Abstract)

    추상메소드는?

    abstract를 사용하여 자식클래스가 반드시 추상메소드를 구현하도록 시킨다.

    • abstract키워드를 사용하여 추상클래스를 형성하여 메소드를 생성한다.
    • 메소드에는 메소드 제외 내용을 첨가하지 않는다.
      이유는 자식클래스에게 오버라이딩을 강요하게 만들어 졌기 때문이다.
    • 추상클래스를 쓰는 이유는 코드의 독립성을 강조하기 때문이다.

     

    • abstract키워드를 사용하여 Role이라는 클래스를 만들었다.
    • doIt 메소드를 선언하고 끝낸다.

     

    • Role을 상속하는 Driver 자식클래스를 생성하여 오버라이드를 한다.
    • 출력은 운전 역할을 할 예정이다.

     

    • Role을 상속하는 Work 자식클래스를 생성하여 오버라이드를 한다.
    • 출력은 작업 역할을 할 예정이다.

     

    • 필드변수로 이름과 추상메소드를 선언하고 디폴트값을 생성한다.
    • 생성자를 생성하는데 이 때 파라미터 값으로 추상메소드가 나타나고 있다.
    • doIt 메소드를 생성하여 doIt을 출력시킨다.
    • get, set을 생성한다.

     

    • Person의 객체를 생성하여 파라미터 값을 입력해준다.
    • 이 때 new Work를 선언하여 Work의 메소드를 출력한다.
    • doIt을 출력시키면 작업 역할이 출력되고 Driver을 선언하면 운전 역할이 출력된다.

    4. instanceof 연산자

    instanceof는?

    인스턴스의 실제 타입을 알아보기 위하여 사용한다.

    • 형변환이 가능한지의 여부를 판단해준다.
    • 주로 조건문에 사용한다.
    • 조건은 “참조변수 instansof 타입” 으로 실행된다.

     

    새로운 전화번호부 예제를 풀어보면서 instanceof 연산자가 포함되어있는 예제를 학습해보도록 하자

     

    • PhoneInfo 클래스에 대한 자식클래스를 생성한다.
    • override를하여 PhoneInfo의 show메소드를 재정의한다.
    • getter, setter를 선언한다.

     

    • PhoneInfo 클래스에 대한 자식클래스를 생성한다.
    • override를하여 PhoneInfo의 show메소드를 재정의한다.
    • getter, setter를 선언한다.

     

    • 변수에 대한 생성자를 선언하고 디폴트 생성자를 선언한다.
    • phoneInfo의 변수에 대한 출력값을 show메소드로 선언한다.
    • getter, setter를 선언한다.

     

    • Manager클래스에 있는 출력된 메소드들을 불러들이기 위해 객체를 선언해준다.
    • static을 통하여 만들어준 Scanner를 통하여 입력값을 선언하고 while switch문을 이용하여 입력시 출력이 될 수 있도록 한다.

     

    • 추가를 할 때 학생인지 직원인지 선택하기 위해선 switch문을 이용하여야 한다. addPhoneInfo메소드 안에 switch문을 생성하여 출력값을 입력해주고 생성한 phoneInfo 배열을 이용하여 등록을 완료 할 때마다 count가 추가되도록 한다.
    • 전체출력 부분에선 3가지를 출력해야하므로 동일하게 switch문을 이용하고 그냥 전체출력시 다른 조건 없이 배열을 출력시키면 되겠고 학생과 직장인을 구별하여 출력할 때에는 instanceof 연산자를 이용하여 if문을 사용해 형변환을 확인한 후에 출력시킨다.
    • instanceof를 살펴보자면 배열이 Universe, Company와 형변환이 된다면 을 조건하고 있으니 상속관계이기 때문에 출력이 된다고 볼 수 있다.
    • 나머지 메소드들은 이전 과제에서 설명하였으니 참고해주면 되겠다.

    오늘 교육 간 느낀점

    객체지향을 약 5일간 했지만 현재 절차지향에 대해서도 제대로 숙달이 되어있지 않은 상태에서 객체지향을 하다보니 이해도가 떨어져 제대로 된 학습이 되지 않고있다. 단기간에 많은 내용과 코드를 넣다보니 서로의 개념이 섞여서 아예 다른 코드를 생각해 낼 때도 있고 생각이 안날 때도 있으며 또 생각이 잘 날 때도 있다.

     

    2주까지 교육을 듣고 공부를 해오면서 느낀건 주먹구구식으로 외우고 코딩을 의식의 흐름대로 한다면 기억이 나면 좋은거고 안나면 아예 나지 않는 이런 운에 맡기는 식의 코딩은 결국 나를 하나도 발전시키지 않는다는 것을 알았다.

     

    처음부터 이러한 사항을 알았으면 좋았겠지만 처음부터 잘해서 내가 모든 퀘스트를 완수 했으면 그건 천재나 다름없다. 하지만 나는 지극히 평범한 사람이고 그런 훌륭한 머리는 없지만 이러한 시행착오를 겪으면서 깨닫고 학습하여 변화하는 사람이다.

    주말에 부족한 개념들, 코딩을 복습해서 이번 주말 간 해왔던 내용들을 리뷰해보면서 내 부족함을 채워야겠다!

    댓글