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("강아지");
    }
}

 

인터페이스의 장점

  1. 다중 구현이 가능함
  2. 일관되고 정형화된 개발을 위한 표준화가 가능
  3. 클래스 작성과 인터페이스 구현을 동시에 진행할 수 있음 👉 개발 시간 단축
  4. 독립적인 프로그래밍이 가능함