Dorothy_YANG
With Dorothy
Dorothy_YANG
전체 방문자
오늘
어제
  • 분류 전체보기 (279)
    • Hi, I'm Dorothy 🕵️‍♂️ (21)
      • Slowly but Surely (18)
      • IT certifications (3)
    • 🤯TIL (80)
      • HTML & CSS (2)
      • Javascript & jQuery (13)
      • React (13)
      • C언어 (1)
      • JAVA (22)
      • Python (2)
      • Oracle SQL (10)
      • My SQL (5)
      • Spring (12)
    • 💻Programmers (17)
    • 🏫 Open API_JAVA (101)
    • 🌎 Project (10)
      • Shopping (10)
    • 💥 Error (24)
    • ⚙ Setting (23)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • sql기간
  • spring
  • SQLD합격후기
  • oracle
  • 이것이자바다
  • Javascript
  • 오류해결
  • 노마드코더
  • 파이썬온라인
  • Database
  • 백준
  • 기간쿼리
  • 비쥬얼스튜디오코드
  • 서버등록
  • CSS
  • 콜라보레이토리
  • colaboratory
  • SQLD합격
  • googlecolaboratory
  • 시작일종료일
  • 독학후기
  • 기간설정
  • SQL
  • 연습문제
  • 코딩앙마
  • 창초기화
  • java
  • Eclipse
  • AllArgsConstructor
  • HTML

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Dorothy_YANG

With Dorothy

[39일차] 추상 클래스 / 추상 메소드 / 인터페이스
🏫 Open API_JAVA

[39일차] 추상 클래스 / 추상 메소드 / 인터페이스

2022. 9. 19. 20:30
728x90

20220916(금)

  • 목차
    - 추상 클래스
    - 추상 메소드
    - 인터페이스

< 추상 클래스 > - 실체 클래스는 추상 클래스를 무조건 상속받아 작성

실체 클래스가 공통적으로 가져야 할 필드와 메소드를 정의해 놓은 추상적인 클래스

  • 상속을 목적으로 한다.
    클래스들 보니까 공통적인 특성이 있네? 뽑아내서 상속하게 하자.
    왜? ➡ 이 클래스들이 추상 클래스의 추상 메서드를 구현하려고.

  • 객체를 생성할 수 없다.
    실체 클래스들의 공통되는 필드와 메서드 정의한 클래스
    추상 클래스는 실체 클래스의 부모 클래스 역할 (단독 객체 X)

 

  • (실체) 클래스와 추상 클래스의 차이

출처 : 이것이 자바다

(실체) 클래스 추상클래스
설계도로 객체를 만든다.
(실체 클래스 : 객체를 만들어 사용할 수 있는 클래스)
미완성 설계도
- 필드, 메서드, 생성자도 만들 수 있고 + 추상메서드

- 객체생성 불가능. A a = new A(); 작업 불가능
- 재사용, 코드량 줄이기 목적 - 상속이 목적

 

  • 추상 클래스의 용도
    실체 클래스의 공통된 필드와 메소드의 이름 통일할 목적
    ex) 개발자마다 "에이3만드세요~" ➡ aaa(); AAA(); aAa(); 개발자별로 난리남
    기본적으로 만들어야 할 기능들을 ➡ 추상 클래스에 강제적으로 집어넣으면 개발자별로 맘대로 만들 수 없다!

  • 추상 클래스 선언
    클래스 선언에  abstract 키워드 사용 
    New 연산자로 객체 생성하지 못하고 상속 통해 자식 클래스만 생성 가능
    public abstract class 클래스 { // 필드 // 생성자 // 메소드 }

< 추상 메서드 >

메소드의 선언만 통일화하고, 실행 내용은 실체 클래스마다 달라야 하는 경우

일반메서드 추상메서드
void methodA() { }
메소드의 실행 내용 작성(오버라이딩(Overriding))
 abstract void methodA(); 
메소드의 선언부만 작성 (추상 메소드)
* 추상메서드가 하나라도 있으면 클래스에도 abstract를 달아줘야 한다.
abstract class A { abstract void methodA(); }

 

  • 메소드 이름 동일하지만, 실행 내용이 실체 클래스마다 다른 메소드? 
    ➡ ex) 동물은 소리를 낸다. 하지만 실체 동물들의 소리는 제각기 다르다.

출처 : 이것이 자바다


  • 원하지 않아도 상속받아야 하는 추상 메소드
    상속받았으면 Horse가 원하지 않아도 Animal의 sound를 상속받아야 한다.
    작업할 때마다 상속받아서 작업해야 함 ➡ 강제적으로 쓰게 하기 위함
    (이렇게 미리 설계되어 있으면 개발자가 바뀌어도 추가되는 작업에 대해 일관성이 생긴다.)

더보기

만약 구성 안 하고 넘기려면 Horse도 abstract으로 만든 뒤 넘긴다.

* 하지만 Horse를 상속받는 HorseSon에는 Animal의 추상 메서드를 써야 함. 
 (끝없이 대물림 되는 abstract 메서드 ㅎㅎ)

 


< 인터페이스 역할과 선언 >

  • 클래스 vs 추상 클래스 vs 인터페이스
클래스 : 완성 설계도 추상 클래스 : 미완성 설계도 인터페이스 : 추상메소드 목적
- 객체 생성, 상속 목적 선택적
- 필드, 메소드, 생성자
- 객체 생성 불가, 상속 목적
- 필드, 메소드, 생성자, 추상메소드
- 객체 생성 불가, 상속 목적 ( = 추상 클래스)
- 상수, 추상메소드, 디폴트메소드, static 메소드
- - 단일 상속
: 2개 이상의 부모 클래스를 상속 X
- 다중 상속
: 2개 이상의 인터페이스를 상속할 수 있다.

 

  • 인터페이스란?
    - 객체의 사용방법을 정의한 타입
    - 개발 코드와 객체가 서로 통신하는 접점 / 데이터를 저장할 수 없음

  • 인터페이스의 역할
    개발 코드가 객체에 종속되지 않게 ➡ 객체 교체할 수 있도록 하는 역할
    개발 코드 변경 없이 리턴 값 또는 실행 내용이 다양해질 수 있음 (다형성)

 

  • 인터페이스 선언
    ➡ 인터페이스는 객체 사용 설명서이므로 런타임 시 데이터를 저장할 수 있는 필드 선언 X

     interface 인터페이스명 {
     // 상수
     타입 상수명 = 값;
     // 추상 메소드
     타입 메소드명(매개변수, ...);
     // 디폴트 메소드
     default 타입 메소드명(매개변수, ...) {...}
     // 정적 메소드
     static 타입 메소드명(매개변수) {...}
     }

(1) 상수 필드 - 인터페이스는 상수 필드만 선언 가능 ➡ 데이터 저장하지 않음 
- 인터페이스에 선언된 필드는 모두 public static final 자동적으로 컴파일 과정에서 붙음
(2) 추상 메소드 - 인터페이스 통해 호출된 메소드는 최종적으로 객체에서 실행
- 인터페이스의 메소드는 기본적으로 실행 블록이 없는 추상 메소드로 선언
- public abstract를 생략하더라도 자동적으로 컴파일 과정에서 붙게 됨
(3) 디폴트 메소드 - 자바8에서 추가된 인터페이스의 새로운 멤버
- 실행 블록을 가지고 있는 메소드
(4) 정적 메소드
더보기

 

 


< 인터페이스 구현 >

(1) 구현 클래스

 public class 구현클래스명 implements 인터페이스명 { // 인터페이스에 선언된 추상 메소드의 실체 메소드 선언 }

 

(2) 익명 구현 객체
인터페이스 변수 = new 인터페이스() { // 인터페이스에 선언된 추상 메소드의 실체 메소드 선언}

   - 이름이 없다. / 소스 파일을 만들지 않고 구현 객체를 만들 수 있는 방법 제공

   - 일회성으로 쓰겠단 의미 (클래스는 영구적으로 사용 가능)


(3) 다중 인터페이스 구현 클래스

public class 구현클래스명 implements 인터페이스A, 인터페이스B {

// 인터페이스 A에 선언된 추상 메소드의 실체 메소드 선언

// 인터페이스 B에 선언된 추상 메소드의 실체 메소드 선언

}

 

   ✨ 추상메소드는 무조건 필수이나,
         디폴트 메소드와 static 메소드는 상속클래스에서 선택적으로 사용가능.

 

 

728x90
저작자표시 (새창열림)

'🏫 Open API_JAVA' 카테고리의 다른 글

[41일차] 자동 리소스 닫기 / 사용자 정의 예외와 예외 발생 / java.lang과 java.util 패키지 / Object 클래스 / Tomcat 설치  (0) 2022.09.21
[40일차] 인터페이스 상속 / 디폴트 메소드와 인터페이스 확장 / 중첩 클래스 / 익명 객체 / 예외처리  (0) 2022.09.20
[38일차] 필수 이론 정리 / 오라클 테이블 생성 / 매개 변수의 다형성  (0) 2022.09.19
[37일차] final / 접근 제한자 / 타입 변환과 다형성 / Oracle Database 설치  (0) 2022.09.15
[36일차] static / 싱글톤 / final / import 문 / 디버깅 / getter setter / 상속 / 재정의  (0) 2022.09.14
    '🏫 Open API_JAVA' 카테고리의 다른 글
    • [41일차] 자동 리소스 닫기 / 사용자 정의 예외와 예외 발생 / java.lang과 java.util 패키지 / Object 클래스 / Tomcat 설치
    • [40일차] 인터페이스 상속 / 디폴트 메소드와 인터페이스 확장 / 중첩 클래스 / 익명 객체 / 예외처리
    • [38일차] 필수 이론 정리 / 오라클 테이블 생성 / 매개 변수의 다형성
    • [37일차] final / 접근 제한자 / 타입 변환과 다형성 / Oracle Database 설치
    Dorothy_YANG
    Dorothy_YANG
    Slowly but Surely, 비전공 문과생의 개발공부

    티스토리툴바