추상화 : Abstract

·2024년 4월 1일
0

JAVA

목록 보기
6/7

🤍 01 추상메서드 (Abstract Method)

💗 1. 추상메서드 정의

메서드 구현부(=바디 {})가 없는 메서드

💗 2. 추상메서드 특징

1) 바디가 없고 선언부만 존재하며 선언부 마지막에 세미콜론(;)을 붙여 준다
2) 실행할 수 있는 코드가 없기 때문에 외부에서 호출하면 안됨 -> 서브클래스에서 구현한 후 호출
3) 메서드 정의 시 선언부의 접근제한자 뒤에 abstract 붙여서 정의
4) 슈퍼클래스에서 추상메서드로 선언하면 서브클래스는 반드시 오버라이딩 필수

💗 3. 추상메서드 형식

[접근제한자] abstract 리턴타입 메서드명 ([매개변수]);

*[대괄호]는 생략 가능

예시

public abstract void print();

🤍 02 추상 클래스 (Abstract Class)

💗 1. 추상클래스 정의

  • 객체를 생성할 수 없는 클래스
  • new 연산자를 통해 생성자 호출 불가능

💗 2. 추상클래스 특징

1) 상속받는 서브클래스에서 반드시 오버라이딩 해야 한다.
2) 추상클래스는 추상메서드, 일반메서드, 생성자, 멤버변수를 모두 가질 수 있다 (인터페이스와 차이점)
3) 상속을 통해 서브클래스에서 사용 가능하며 업캐스팅을 통한 다형성 활용 가능
4) 추상메서드를 하나라도 가지는 클래스는 추상클래스가 되어야 한다.

💗 3. 추상클래스 형식

abstract class 클래스명 {
멤버변수 (인스턴스 멤버, 클래스<static>멤버변수)
생성자
메서드 (일반, 추상메서드)
}


🤍 03 예시

1. 추상 메서드 및 추상 클래스 정의

abstract class A {
	//추상 메서드 정의
	public abstract void abstractMethod(); // 추상 메서드는 바디를 가질 수 없다

	// 멤버변수, 생성자, 일반 메서드를 가질 수 있다
	int x;
	static int y; //멤버변수

	public A() {} // 생성자
	
	public void Coding() {} // 일반 메서드
}

2. 서브 클래스 정의
-> 추상 클래스를 상속 받은 클래스는 반드시 오버라이딩 해야 한다.
-> 메서드 바디를 정의해야만 나머지 모든 상속이 적용된다
-> 만일, 오버라이딩 하지 않을 경우 서브클래스 또한 추상클래스로 변경한 후 이를 상속 받는 클래스에서 오버라이딩 해 줘야만 한다.

class B extends A {
	@Override
	public void abstractMethod() {
		System.out.println("추상메서드 오버라이딩");
	}
}

3. 호출

// 서브클래스 객체 생성 및 호출
B sub = new B();
sub.abstactMethod(); // 출력 = 추상메서드 오버라이딩

// 추상클래스 호출
// 객체 생성은 안 되지만 다형성 활용은 가능하다 -> 클래스 타입으로 접근 가능
A abs = sub;
abs.abstactMethod(); // 출력 = 추상메서드 오버라이딩

업캐스팅 시 참조영역이 축소되지만, 추상메서드는 서브클래스에서 반드시 구현되었기 때문에 호출 가능


🤍 04 결론

-> 추상을 하는 이유는 '강제성' 부여 + 코드의 통일성 때문이다. 하지만 상속은 하나밖에 되지 않기 때문에 다중 상속이 안 되는 불편함을 가지고 있다. 이러한 불편함을 해결하기 위해 '인터페이스'가 존재한다.

인터페이스는 다음 장에서 총총 ..

profile
~*

0개의 댓글