본문 바로가기

KOSTA

KOSTA 교육 (객체지향, reference 타입, instanceof 연산자, 추상메소드 , 인스턴스)

배운 내용

 

  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와 형변환이 된다면 을 조건하고 있으니 상속관계이기 때문에 출력이 된다고 볼 수 있다.
  • 나머지 메소드들은 이전 과제에서 설명하였으니 참고해주면 되겠다.