11/3 수업 : 추상클래스 abstract class

리무 rimu ·2023년 1월 8일
0

Java

목록 보기
24/35
post-thumbnail

추상클래스

추상클래스

  • 추상메서드를 포함하는 클래스
  • 객체가 만들어지는걸 원하지 않음
  • 하위의 존재하는 클래스(하위개념)를 위해 존재
  • 부모의 추상메서드자식이 오버라이딩 해야 함(하지않으면 에러뜸)

추상메서드

추상메서드

  • body가 없는 메서드
  • 메서드는 일반적으로 선언부와 구현부가 존재 그런데 추상 메서드는 선언부만 존재하고 구현부는 작성하지 않는 채로 남겨 둔 것을 의미.
  • 즉, 미완성 메서드! 메서드를 미완성으로 두는 이유는 메서드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문에 상위 클래스에서 선언만 해두고 실제 내용은 상속받는 클래스에 구현하도록 비워둔다.
  • 추상클래스로부터 상속받은 하위 클래스는 오버라이딩을 통해 추상메서드를 모두 구현해줘야 한다. 그렇지 않는다면 그 역시 추상 클래스로 지정해줘야 한다.
public void todo() { ←헤더(무엇을 하는지)How 어떻게 하는지
}
``
abstract class Some { // 추상클래스
}
abstract public void todo(); // 추상메서드 

도형의 면적

shape
+getArea(): int
개념상으로만 존재함

+abstract getArea():int
이렇게 사용 가능

추상클래스 만드는 법

abstract class 클래스_이름 { }

추상메서드 만드는 법

접근 제한자 abstract 반환 타입 메서드이름(매개변수);

추상화: 클래스간의 공통점을 찾아내서 공통의 클래스를 만드는 것 (추상 클래스)
구체화: 상속을 통해 클래스를 구현, 확장하는 작업 (상속)

접근 제어자 종류

  • public > protected > default > private

왼쪽에서 오른쪽으로 갈수록 해당 변수나 메소드(함수) 등에 대한 접근이 어렵게 된다.

결국, main() 메소드가 어디에 있는지 JVM(Java Virtual Machine)이 접근하는데 제한이 없어야 하기 때문에 public을 접근 제어자로 선언하는 것이다.

접근제한자 protected

해당 클래스 혹은 서브클래스의 인스턴스(객체)에서만 접근이 가능하다.
단, 서브클래스에서 protected로 된 값public으로 오버라이딩한다면
해당 값은 public으로 취급된다.

//프렌차이즈
abstract class JavaBurger {  //추상클래스
	// 오버라이드 금지(final void), 순서를 바꿀 수 없음, 완벽하게 만들어놨으니 더 이상 상속금지
    // 하위클래스는 건들일수 없음
	public final void welcome(){ 
		greeting();
		order();
		serve();
		sayGoodbye();
	}
	//추상메서드 
	protected abstract void greeting(); // 인사만 수정 가능

	private void order(){
		System.out.println("자바버거의 메뉴를 보여주고 주문을 받는다.");
	}
	private void serve(){
		System.out.println("주문한 자바버거를 서빙한다.");
	}
	private void sayGoodBye(){
		System.out.println("안녕히 가세요~ 자바버거에 또 오세요~");
	}
}

class JavaBurgerBusan extends JavaBurger {
	@Override
	public void greeting(){
		System.out.pritnln("어서오이소~ 자바버거입니더~");
	}
}
class JavaBurgerSeoul extends JavaBurger {
	@Override
	public void greeting(){
		System.out.println("어서오세요~ 자바버거입니다~");
	}
}
class JavaBurgerJeju extends JavaBurger {
	@Override
	public void gretting(){
		System.out.println("혼저옵서예~ 자바버거입니다~");
	}
}

class Ex2 {
	public static void main(String[] args) {
		
	}
}

추상클래스를 쓰면 무엇을 하는가(표기)가 전부 통일이 됨
오버라이드하면 강제할 수 있음

-추상클래스는 주로 어떤 용도로 사용되는가?

상위개념을 표현하기 위해서, 상위개념에서는 구체적인 기능을 정의하는게
힘든 경우가 많아서 추상메서드를 만들고 거기에 추상클래스
가 따라 옴

  • 추상클래스는 추상 메소드가 아닌 일반 메소드를 가질 수 있는가?
    가질수 있다. 그 외에도 멤버변수, 생성자도 가질 수 있음

  • 추상클래스만으로 객체를 생성할 수 있는가?
    없다. 존재하는 이유는 하위클래스를 위해서

has-a

  • association 멤버변수냐 아니냐 aggregation 종합 or composition 구성
  • HAS-A 관계에서는 상속을 사용하지않음, 수업시간에서는 그냥 has-a 관계로 통일

is-a

  • 상속inheritance
    상속은 IS-A관계에서 사용하는 것이 가장 효율적
    IS-A 관계(is a relationship, inheritance)는
    일반적인 개념과 구체적인 개념의 관계
    사람동물이다.
    동물이다
    동물이다.

클래스다이어그램 만들때 사용하는 화살표들!

profile
JAVA / SQL / Spring 을 공부하고 있습니다 🐥

0개의 댓글