본문 바로가기
TIL

내일배움캠프 2주차 TIL + 상속, 추상클래, 인터페이스 등

by 율량동박씨 2024. 4. 26.

오늘의 키워드

  • 상속
  • 추상클래스
  • 인터페이스

오늘의 내용

  • 상속
    • 부모 클래스의 필드와 메서드를 자식 클래스에 물려주는것
    • 상속을 사용해 적은 양의 코드로 새로운 클래스를 작성 공통적인 코드 관리로 코드추가와 변경이 쉬워짐
    • 부모 클래스에 새로운 필드와 메서드가 추가되면 자식 클래스도 사용가능
    • 자식 클래스는 부모 클래스에 영향을 주지 않는다
    • extends를 사용 : public class 자식클래스 extends 부모클래스 { } 
    • 다중 상속을 허용하지 않고 final을 사용하면 상속과 오버라이딩이 불가하다
    • Object 클래스의 메서드
      • 모든 최상위 부모 클래스는 Object를 사용할 수 있고 부모가 없으면 자동으로 Object를 상속받음
      • Object clone() : 해당 객체의 복제본을 생성하여 반환함
      • boolean equals(Object object) : 해당 객체와 전달받은 객체가 같은지 여부를 반환함
      • Class getClass() : 해당 객체의 클래스 타입을 반환함
      • int hashCode() : 자바에서 객체를 식별하는 정수값인 해시 코드를 반환함
      • String toString() : 해당 객체 정보를 문자열로 반환함. & Object 클래스에서는 클래스이름 @해쉬코드값 리턴
    • 오버라이딩
      • 상속받은 메서드의 내용을 재정의 하는것을 말한다
      • 선언부가 부모 클래스 메서드와 일치해야한
      • 접근 제어자를 부모 클래스의 메서드보다 좁은 범위로는 변경이 불가하다
      • @Override 에노테이션(aanotation)
    • super & super( )
      • this & this( )와 사용법이 비슷하다
      • 자식 클래스에서 부모 클래스를 지칭할 때 사용된다
      • ex : public void setCarInfo(String model, String color, double price) {
               super.model = model; // model은 부모 필드에 set
               super.color = color; // color는 부모 필드에 set
               this.price = price; // price는 자식 필드에 set
               }
    • 다형성
      • 참조변수의 타입변환을 활용해 구현이 가능하다
      • 반환타입, 매개변수에도 적용이 가능하다
  • 추상 클래스
    • 클래스를 설계도라하면 미완성 설계도를 말한다
    • abstract를 사용하여 추상 클래스를 선언한
    • 추상 메서드는 포함시키지 못 한다
      • 추상 메서드 : 아직 구현되지 않은 미완성된 메서드, abstract를 사용해 선언, 블록{ } 부분이 없음, extends를 사용해 클래스에서 상속, 정의만 할 뿐 실행 내용은 가지고 있지 않다
    • 자식 클래스에 의해서만 완성이 가능하다
    • 추상 클래스의 추상메서드는 반드시 오버라이딩 되어야한다
  • 인터페이스
    • 상속 관계가 없는 다른 클래스들이 서로 동일한 메서드를 구성해야할 때 클래스들의 동일한 사용방법과 행위를 보장해준다
    • 구현 클래스들은 반드시 정의된 메서드들을 구현해야한다
    • 구현 클래스들의 동일한 사용방법과 행위를 보장해야 한다
    • interface 키워드를 사용하여 인터페이스를 선언할 수 있습니다.
      public interface 인터페이스명 { }
    • 클래스와 마찬가지로 public, default 접근 제어자를 지정할 수 있다
    • 직접 인스턴스를 생성할 수 없기에 클래스에 구현되어 생성된다
    • implements 키워드를 사용하여 인터페이스를 구현할 수 있습니다.
       - public class 클래스명 implements 인터페이스명 { // 추상 메서드 오버라이딩
      @Override
      public 리턴타입 메서드이름(매개변수, ...) { // 실행문
      }   }
    • 추상 메서드는 구현될 때 반드시 오버라이딩 되어야 한다
    • 추상 메서드가 일부만 구현되야 할때 추상 클래스로 변경해줘야 한다
    • 인터페이스간 상속을 하려면 extends를 사용한다
      interface C extends A, B { }
    • 클래스와 다르게 다중 상속이 가능하다
    • 인터페이스 다형성
      • 매개변수와 반환타입에서 다형성이 적용될 수 있다
      • 인터페이스 변수 = 구현객체; 는 자동으로 타입 변환이 일어난다
      • 구현객체타입 변수 = (구현객체타입) 인터페이스변수; 로 강제 타입변환이 가능하다
    • 디폴트 메서드
      • 추상 메서드의 기본적인 구현을 제공하는 메소드다
      • 메서드 앞에 default를 붙이도 { }블럭이 존재
        default void aa() { System.out.println("AA"); }
      • 접근 제어자는 public이며 생략가능하다
      • 추상 메서드가 아니기 때문에 인터페이스의 구현체들에서 필수로 재정의 할 필요가 없다
    • static 메서드
      • static의 특성 그대로 인터페이스의 static 메서드도 객체 없이 호출 가능하다
      • 선언방법과 호출방법은 클래스의 static메서드와 동일하다
      • 접근제어자를 생략하면 컴파일러가 public을 추가해준다

오늘의 회고

  • 개별 프로젝트를 진행할 수 있을정도의 강의는 끝났는데 프로젝트를 시작하려하니 막상 뭐부터 해야될지 떠오르지가 않는다
  • 평생을 주입식 교육만 받다 창의적인걸 하려니 머리가 잘 안돌아가는 기분
  • 그럼에도 불구하고 가장 긴 강의가 끝나니 기분은 좋다 다음이 끝판왕일지는 모르지만