-
JAVA - 상속 및 인터페이스IT/JAVA 2020. 4. 28. 18:25반응형
JAVA 에는 'extends - 상속' 과 'implements - 인터페이스를 구현'하는 것이 있습니다.
예시를 들기보다는 이번에는 기본에 대해서 SK고용디딤돌에서 배웠던 내용을 정리해보았습니다.
상속
자식(하위) 클래스가 부모(상위) 클래스의 맴버를 물려 받는 것
자식이 부모를 선택해 물려 받을 수 있다.
상속 대상 : 부모의 필드와 메소드
상속의 효과
부모 클래스 재사용해서 자식 클래스를 빨리 개발 가능하다.
반복된 코드의 중복을 줄인다.
유지 보수 편리성을 제공한다.
객체 다형성 구현이 가능하다.
extends
class 자식클래스 extends 부모 클래스
<자바는 단일 상속 -부모 클래스 나열 불가>
<자바는 다중상속이 안된다.>
다중상속을 허용하지 않는 2 가지
같은 이름이 있어서 변수가 햇갈릴수 있어서.
베이스 부모를 어떤걸 해야할지 몰라서.
자식 객체 생성하면 부모 객체도 생성되는가?
부모 없는 자식은 없다.
자식 객체 생성할 때는 부모 객체부터 생성 후 자식 객체 생성
부모 생성자 호출 완료 후 자식 생성자 호출 완료
명시적인 부모 생성자 호출
부모 생성자 없다면 컴파일 오류 발생한다.
반드시 자식 생성자의 첫 줄에 위치해야 한다.
부모 클래스에 기본(매개변수 없는) 생성자가 없다면 필수 작성
메소드 재정의
오버로딩 - 파라미터만 다르고, 함수이름이 같은 것
오버라이딩 - 함수이름도 같고, 파라미터도 같은걸 자식클래스에서 재정의 하는 것
<상속관계에서만 된다.>
접근 제한을 더 강하게 오버라이딩 불가능
ex) 부모가 public 인데, 자식은 private로 수정 불가능
ex) 반대로 부모가 default 이면, 자식은 public으로 수정 가능하다.
부모 메소드 사용(super)
메소드 재정의는 부모 메소드 숨기는 효과가 있다.
- 자식클래스에서는 재정의된 메소드만 호출한다.
자식클래스에서 수정되기 전 부모 메소드 호출 - usper 사용
- super는 부모 객체 참조(this는 자신 객체 참조)
final 키워드의 용도
final 필드 : 수정 불가 필드
final 클래스 : 부모로 사용 불가한 클래스
final 메소드 : 자식이 재정의 할 수 없는 메소드
protected 접근 제한자
- 상속과 관련된 접근 제한자
같은 패키지 : default와 동일하다.
다른 패키지 : 자식 클래스만 접근 허용
public - 모두 접근 가능
protected - 같은 패키지 내에서 접근 가능
defualt - 같은 패키지면 허용, 다른패키지면 허용안함. 외부접근X
자동 타입 변환(promotion)
프로그램 실행 도중에 자동 타입 변환이 일어나는 것
ex) 부모클래스 변수 = 자식클래스 타입;
이러면 원래는 오류가 나야하는데, 자식클래스를 부모클래스로
자동 타입 변환이 이루어져서 오류가 안난다.
ex) Cat cat = new Cat();
Animal naimal = cat;
cat == animal //true
모든 클래스는 Object로 바꿀 수 있다.
어떤 클래스는 Object의 자식이기 때문이다.
추상 클래스 (Abstarcr Class)
추상
- 실체들 간에 공통되는 특성을 추출 한것
예 : 삼성, 현대, LG ---- 회사(추상)
추상클래스
- 실체 클래스들의 반드시 구현되어야 하는 공통되는 필드와 메소드를 정의한 클래스
- 추상 클래스는 실체 클래스의 부모 클래스 역할
- 아직 함수 구현이 안되있는 것
추상 클래스 용도
- 실체 클래스의 공통된 필드와 메소드의 이름 통일할 목적
- 실체 클래스 설계 규격을 만들고자 할 때
- 실체 클래스를 작성할 때 시간 절약
추상 클래스 선언
클래스 선언에 abstract 키워드 사용
New 연산자로 객체 생성하지 못하고 상속을 통해 자식 클래스만 생성 가능하다.
인터페이스
인터페이스와 유사한 단어, 의미가 같은 단어는 에이전트(대리)이다.
에이전트에서 가장 큰 역할은 이 부품이 고장나거나 바뀌어도 전체시스템은 돌아가야 한다.
모든함수에는 바디가 있는데, 바디가 비어있으면 안된다.
바디에 추상적인것이 있어야하고, 구현할게 없다면, 인터페이스로 하는 것이 가장 좋은 것이다.
바디가 비어있을 때는 클래스보다 인터페이스를 이용하는 것이 더 좋다.
JAVA는 다중상속을 허용하지 않기 때문에, 인터페이스가 나왔다.
인터페이스란?
외부 내부를 연결시켜주는 통로이다.
사용할 때나 개발할 때 동시에 만족해야 하는 함수들을 인터페이스로 만들어 놓고 사용하는 것
개발 코드와 객체가 서로 통신하는 접점
인터페이스의 역할
- 개발 코드가 객체에 종속되지 않게 -> 객체 교체 할 수 있도록 하는 역할
- 개발 코드 변경 없이 리턴 값 또는 실행 내용이 다양해질 수 있다.
추상클래스는 실체는 없고 함수 이름만 나타낸 것.
추상클래스 안에는 그냥 함수도 들어갈 수 있다.
100% 추상함수로만 되있는 것은 인터페이스라고 한다.
<순수 추상 클래스>
인터페이스는 다중상속이 되고 추상클래스는 안된다.
인터페이스 선언
인터페이스 이름 - 자바 식별자 작성 규칙에 따라 작성
[public] interface 인터페이스 명 {....}
인터페이스에서는 상수와, 추상메소드만 정의가 가능하다.
선언
- 인터페이스에 선언된 필드는 모두 public static fianl이 자동적으로 컴파일 과정에서 붙는다.
<변수로 쓸 수 없다.>
- 상수명은 대문자로 작성한다.
서로 다른 단어로 구성되어 있을 경우에는 언더바로 연결
추상메소드 선언
- 인터페이스 통해 호출된 메소드는 최종적으로 객체에서 실행한다.
- public abstract를 생략하더라도 자동적으로 컴파일 과정에서 붙게된다.
- 인터페이스의 메소드는 기본적으로 실행 블록이 없는 추상 메소드로 선언한다.
런타임 : 컴파일은 되는데 예외(오류)가 있는 것
컴파일 : 코드에 오류가 있는 것
많이 간단하게 정리를 했었네요 :)
간단하면서도 몇번을 봐도 기본을 아는것이 제일 중요하다고 생각하기에 한번 더 읽어보며 정리했습니다.
프로그래머는 신기하면서 재밌는 직업인 것 같습니당.
저는 이만 !
반응형'IT > JAVA' 카테고리의 다른 글
JAVA - 로또 게임 만들기 (9) 2020.04.28 JAVA - 가위바위보 만들기 (0) 2020.04.28 JAVA - 클래스 (2) 2020.04.25 JAVA - 조건문과 반복문, 그리고 배열 (0) 2020.04.25 JAVA - 변수 및 연산자 (0) 2020.04.25 댓글