java
2022.09.07 java 추상화
Han_5ung
2022. 9. 11. 15:08
🐧추상화
👉 기존 클래스들의 공통적인 요소들을 뽑아서 상위 클래스를 만들어 냄
추상메서드
👉 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드
abstract 반환타입 메소드이름();
ex)
abstract void Print();
- abstract = 추상
- 선언부만 있으며 구현부는 없음
추상클래스
👉 하나 이상의 추상 메서드를 포함하는 클래스
- 해당 클래스를 상속 받는 클래스는 반드시 추상 메서드를 재정의 해야함
- 하위 클래스에서 추상 메서드를 오버라이딩을 해야지만 객체를 생성할 수 있음
- 상층부에 위치할 수록 추상화 정도가 높으며 하층부로 내려갈 수록 구체화
abstract class 클래스이름{
abstract void 메소드이름();
}
⛄ex)
public class Example {
public static void main(String[] args) {
Job a = new Programmer();
a.Print();
Job b = new Designer();
b.Print();
}
}
abstract class Job{ //추상클래스
abstract void Print(); //추상메서드
}
class Programmer extends Job{
@Override
void Print() { //추상메서드 오버라이딩
System.out.println("Programmer 클래스");
}
}
class Designer extends Job{
@Override
void Print() {
System.out.println("Designer 클래스");
}
}
//출력값
Programmer 클래스
Designer 클래스
- 메서드 오버라이딩을 진행하지 않고 객체 생성시 오류 발생
- 하위 클래스 생성시 메서드 오버라이딩을 진행하지 않으면 오류 발생
🐧final 제어자
👉 변경할 수 없다라는 의미로 사용됨
final class Test{ // 상속이 불가능한 클래스
final int a; //상수화 되어 값 변경 불가
final void Print(){ //오버라이딩 불가
final double b = 10.12; //값 변경 불가
}
}
🐧인터페이스
👉 다른 클래스를 작성할 때 기본이 되는 틀 제공, 중간 매개 역할, 두 객체를 연결
선언
접근제어자 interface 인터페이스이름{
public static fianl 타입 상수이름 = 값;
public abstract 반환타입 메서드이름(매개변수목록);
}
- 상수의 경우 public static fianl로 정의해야하나 생략 가능
- 메서드의 경우 public abstract로 정의해야하나 생략 가능
⛄ex)
public interface Example{
public static final int a = 1;
int b =2 ; //생략 가능
public abstract void Print();
void Print2(); //생략 가능
}
- 생략된 부분은 컴파일러가 자동으로 추가
인터페이스 구현
class 클래스이름 implements 인터페이스 이름{...}
- 추상클래스와 마찬가지로 메서드 바디가 정의되어 있지 않다면 객체 생성 불가
- implements를 이용하여 상속
- 다중 상속 가능
- 인터페이스의 추상 메서드를 전부 구현해야함
⛄ex)
interface Job{
void Print(); //추상 메서드
}
class Programmer implements Job{
@Override
public void Print() {
System.out.println("Programmer 클래스"); //추상메서드 구현
}
}
인터페이스 다중 구현(상속)
- 인터페이스는 다중 구현이 가능함
- 인터페이스는 인터페이스로부터만 상속이 가능
interface Animal{ //Animal 인터페이스
void Print();
}
interface Pet{ //Pet 인터페이스
void Name();
}
class Dog implements Animal,Pet{ //다중 구현
@Override
public void Print() {
System.out.println("Dog 클래스");
}
@Override
public void Name() {
System.out.println("강아지");
}
}
⛄인터페이스의 장점
- 다중 구현이 가능함
- 일관되고 정형화된 개발을 위한 표준화가 가능
- 클래스 작성과 인터페이스 구현을 동시에 진행할 수 있음 👉 개발 시간 단축
- 독립적인 프로그래밍이 가능함