eterno

JAVA 15일차. 상속과 인터페이스 본문

JAVA/강의노트

JAVA 15일차. 상속과 인터페이스

영원한별똥별 2022. 8. 22. 18:26
728x90
반응형

자바에서 자원(resource)을 쓰는 건 메모리에 올리기 위함이다.

 → 사용 방법 ① static, ② new 연산자, ③ 상속 ④ get instance()


상속(inheritance)

: 기존 클래스를 재사용하여 새로운 클래스를 작성하는 것 (우리가 재산을 물려받는 거랑 비슷)

  • 상속은 자원(빌트인 클래스)을 사용하기 위해 쓰인다.
  • 상속은 부모와 자식관계이다.
    • 부모 (super, parents)
       - 부모는 자식한테 증여한 거는 쓸 수 있지만 자식꺼는 허락을 받아야 한다.
    • 자식 (sub, child)

상속 쓰는 방법

  • extends(확장) 키워드 : class 클래스 상속 시 사용
     - 단일 상속(simple inheritance)
  • impolement(구현) 키워드 : interface클래스 상속 시 사용
     - 다중 상속(multiful inheritance)

*** extends, impolement는 클래스를 상속하는 키워드 로 호출하는 시점에 메모리에 올라간다.***

 

Class Object : 자바의 Root Class

  • Object는 모든 클래스를 상속하고 있다.(= 자바는 계층 구조)
    API > Class Object is the root of the class hierarchy.

* API에서 탭으로 구분하여 상속 관계를 표현하고 있다.

 

 

Object의 함수들

: Object에는 1개의 생성자11개의 함수로 구성되어있다.

 

 - Object의 생성자

 - Object의 함수

11개의 함수중 알아 둬야할건 5개 정도

  • clone() : 복사해서 가져오는 것
  • equals() : 문자열을 비교하는 것
  • get class() : 클래스 갖고 오는 것
  • hashCode() : identityHashCode와 동일(위치 값)

toString() : 클래스이름. 함수이름. hashcode.주소값을 가져온다.
⇒ 구조 : getClass().getName() + '@' + Integer.toHexString(hashCode())
              리턴값이 있으면 리턴값(문자열)로 반환되고 없으면 클래스이름.메소드이름.@위치값 으로 반환된다.


오버라이딩(Overriding)

 : 부모클래스에 있는 함수를 자식 클래스로 가져오는(호출하는) 행위

  • 부모클래스의 자원을 사용하려면(재정의하려고) 오버라이딩을 해야한다.
  • 오버라이딩은 반환형, 메서드 이름, 매개변수 개수, 매개변수 자료형이 반드시 같아야한다.

→ 다르면 오버로딩

더보기

오버로딩(Overloading) 이란?

: 클래스 내부에서 함수 이름이 동일하고 함수 시그니처 (생성자 + 매개변수) 가 다른 함수
  (순서, 개수, 데이터 자료형이 달라도 다른 시그니처로 봄)

   ex) Member() / Member(int a) / Member(int a, String s) => 매개변수 없는 시그니처, int형 시그니처 , int형과 string형 시그니처

ex) Object 클래스의 오버로딩 : wait로 함수 이름은 같지만 매개변수가 다르다.

 * 오버로딩과 오버라이딩은 함수에서 일어난다.

 

클래스 상속 관계에서는 
1. java.lang.Object 클래스가 메모리에 먼저 올라간다.
2. Object 클래스를 상속한  Super 클래스(부모 클래스, Parent 클래스)가 메모리에 올라간다.
3. Super 클래스를 상속한 자식 클래스가 메모리에 올라간다.

 

예제)

예제)

예제)

예제)

풀이방법>

1. TestConstructor_1 사용자 정의 클래스 선언
2. 참조변수 tc 선언
3. = 대입 연산자 선언
4. new 연산자(키워드) 선언
5. TestConstructor_1() 매개변수 없는 기본 생성자 생성자 선언
6. new TestConstructor_1() : 
JVM 이 소스코드에서 TestConstructor_1() 를 찾아서
메모리에 올리려고 한다.
이때 생성자를 메모리에 올릴 때 클래스의 상속관계를 확인한다.
7. TestConstructor_1 extends SuperClass_1 
상속해준 SuperClass_1 를 먼저 메모리에 올리려고 하는데
SuperClass_1 클래스의 상속 관계를 확인한다.
8. SuperClass_1 extends Object 
기본적을 상속된 Object 클래스를 메모리에 먼저 로드한다.

 

예제)

예제)


인터페이스(키워드)

: 클래스 혹은 프로그램이 제공하는 기능을 명시적으로 선언하는 역할

 

  - 추상 함수와 상수로만 이루어져 있는 불완전한 함수를 갖는 클래스이다. (인터페이스는 껍데기만 있는 클래스)

  - 함수는 [접근제한자] + [수정자] + 리턴형 + 함수이름 ([메소드]) { }이렇게 구성되어 있는데 인터페이스 함수는 { } (블럭)이 없다.

  - 인터페이스 + 인터페이스를 상속한 클래스를 같이 만들어야 함 (인터페이스는 불완전한 함수여서 단독으로 사용할 수 없기 때문)

  - 필요할 때 클래스에서 불러오는 거 → 인터페이스는 혼자 실행하지 못하지만 여러 개 만들 수 있다는 장점이 있다.

 

부모인터페이스 변수 = new 자식클래스();

ex) A_interface a_1 = new A_class();

 

 

인터페이스 만들기

패키지에다 마우스 우클릭 - New - Interface - 인터페이스 이름 쓰고 Finish 클릭

 

인터페이스가 포함된 클래스 만들기

패키지에서 마우스 우클릭 - new - class - interfaces - add클릭 - Choose interfaces 에 검색하면 생성한 인터페이스가 뜸 - ok클릭

 

인터페이스 사용방법

인터페이스 생성(블록이없는) → 상속 → 구현체 만들기(함수의 몸체( { } 안의 소스) → 부모 인터페이스 선언 → 부모 인터페이스를 참조, 선언해서 자식 클래스를 인스턴스함(new)→ 메모리에 올리면 부모에서 가져온 거 자기꺼 다 가져옴 → 오버라이딩을 찾아가 호출한다

 

예제)

1) A_interface.java로 인터페이스 생성

2) 불완전한 함수 A_interface.java를 구현체를 만드는 class 생성

3) 인스턴스하여 인터페이스함수를 호출한다.

728x90
반응형