11월 1일 Day 15

여우·2022년 11월 1일
0

공부중

목록 보기
9/38

추상 클래스

추상클래스는 추상메서드를 포함하는 클래스이다. 일반적인 클래스는 객체를 생성하기 위한 목적으로 작성이 된다. 추상적인 내용이 포함되면, 객체화를 할수가 없다. 추상 클래스는 생성자를 통하여 직접 객체를 생성 할 수 없다.

예시)

  • 추상 클래스는 객체를 통하여 직접 객체를 생성 못한다.
  • 추상메스드를 포함하는게 추상클래스인데 일반메서드도 같이 가질수있다.
  • 추상 메서드는 형식만 정의 되어 있고, 바디는 {} 는 서브 클래스에서 오버라이딩 되어 사용된다.

예시) 추상 클래스를 상속받는 서브 클래스

서브 클래스에서는 상속받은 추상클래스의 추상메서드를 오버라이딩하여 해당 클래스에 필요한 내용으로 정의 하면 된다.

<추상 클래스에서의 접근제한자>

  • 추상 메서드는 상속 받아서 써야 하기 때문에 private로 지정할 수 없다.
  • Protected 혹은 public으로 설정해야한다.
  • protected는 패키지가 달라고 상속관계에 있으면 접근 가능하다.
  • public은 패키지나 상속 여부와 상관없이 누구나 접근 가능하다.

예시)

  • 추상 클래스로 버튼이란 클래스를 만들고
  • 추상메서드 온클릭의 형태를 만들어두고
  • 일반메서드인 클릭도 만들어준다.
  • 버튼 클래스를 상속받는 메세지 버튼 클래스를 만들어주고 상속받는 추상메서드를 오버라이딩 해준다. 오버라이딩 내용은 Hello, world 출력이다.


그리고 메인문 아래에 메세지 버튼 클래스의 객체를 생성해주고 슈퍼클래스의 메서드인 클릭을 실행하면 다시 오버라이딩 된 자기 자신의 온클릭 메서드를 실행하게 되어 Hello, world가 출력이 된다.

  • 추상 클래스는 직접 객체를 생성할수 없기에 Button btn1 = new Button();은 실행이 불가능하다.
  • Button btn2 = new MessageButton(); 처럼 서브 클래스의 객체를 슈퍼클래스의 형태로 참조하는식으로 객체 생성은 가능하다. 상속받은 관계이기에 업캐스팅이 된다.

interface

  • interface 는 추상 클래스의 일종이다
  • interface 의 모든 필드는 public static final 이다
  • interface 의 모든 메서드는 public abstract 이다
  • interface 는 extends 가 아니라, implements 키워드로 상속처리한다 (인터페이스를 구현한다 라고 표현함)
  • interface 는 자바에서 유일하게 다중 상속을 허용하는 형식이다

예시)

Test3 라는 인터페이스를 만들고 멤버 필드 n1 과 n2를 정의해두었다. n1에는 안적혀 있지만 인터페이스의 필드는 모두 public static final 이다. 스테틱의 특징인 기울임체(이탤릭체)와 파이널의 특징인 굵은글씨(볼드체)가 적용되어져 있다.

인터페이스도 추상메서드의 틀만 정의하고 바디는 생략한다. void method1(); 이 추상 메서드이다.
method2는 스태틱 메서드이다.

인터페이스 Test3를 임플리먼트한 Test4 클래스에는 추상 메서드를 오버라이딩 하여 정의해준다.

메인문에서는 Test4 클래스를 이용한 객체를 생성해주면. 그 객체로 오버라이딩한 메서드를 실행할수있다. 인터페이스도 추상클래스가 그랬듯이 직접적인 생성자를 통한 객체 생성이 불가능하다.

추상클래스는 생성자를 이용한 객체를 직접 생성할수는 없지만, 익명 내부 클래스를 이용한 객체 생성은 가능하다. 인터페이스의 미완성된 내용을 자신이 직접 내부에서 이름이 없는 클래스를 이용하여 인터페이스를 구현하여 객체를 생성하는것이다.

예시)

interface로 USB를 만들고. 이를 임플리먼트 하는 클래스들 { PowerChargeCable, PortableSSD, Speaker} 만들고 각 클래스에 추상 메서드들을 알맞게 오버라이딩하였다.

그리고 PC 라는 클래스에서는 반환형이 없는 메서드를 만들어서 메개 변수를 USB 타입으로 받도록 하고 USB의 action 함수를 호출하도록 선언하였다.

메인문 아래에는 각 클래스들을 객체로 만들어두고 pc의 connect 함수에 각 객체들을 대입시켜주면 오버라이딩 된 메서드들이 실행이 된다.

  • 자바 8 이후 함수형 인터페이스 형식이 추가되었음
  • 함수형 인터페이스란, 단 하나의 추상메서드만 가지는 인터페이스를 말한다
  • 함수형 인터페이스는 람다식에 의해 객체를 생성할 수 있다
  • 익명 클래스에 의한 객체 생성보다 식이 간편하고, 내부 작동도 다르다

예시)

interface명 객체명 = 매개변수 -> {실행할 내용};

이런 형식이다.
다만, 함수 내용이 한 줄이면 {} 생략가능하고, 매개변수도 하나 이면 () 생략 가능하다.

profile
우당탕탕 지금은 개발중

0개의 댓글