상세 컨텐츠

본문 제목

Java Interface / 추상클래스 - Class 5

개발생활/Java

by 한국인맛집 2021. 10. 19. 23:51

본문

반응형

추상 클래스 

추상클래스는 객체를 생성할수 없는 클래스입니다.

 

추상클래스는 기본적으로 상속을 받아 메소드를 오버라이드(재정의) 해서 사용해야합니다.

 

추상클래스를 만드는 방식은 다음과 같습니다.

 

public abstract class AbsClass{
	public void MethodFunc();
	public void Foo();
}

 

추상클래스를 상속받아 메소드를 오버라이드 하는 방법은 다음과 같습니다.

public abstract AbsClass{
	public void Foo();
	public void Boo();
}


public MyClass extends AbsClass{

	public void Foo(){
    	System.out.println("Foo Print");
    }
    
    public void Boo(){
    	System.out.println("Boo SomeThing");
    }
}

 

추상클래스를 상속을 받고 함수의 몸체를 구현하지 않는다면 에러가 발생한다. 

상속을 받은 클래스에서 몸체를 구현 해줘야하는게 키 포인트이다.

 

 

인터페이스

 

인터페이스는 추상클래스와 사용하는방법이 같다.

 

사용하는방법은 다음과 같다.

 

interface MyInterface{
   public void Foo();
   public void Boo(int a);
}

 

인터페이스는 상속을 받아 사용하는것이아니다.

확장이라는 개념을 사용한다.

그래서 상속과 다르게 Implement 키워드를 사용한다.

 

다음은 인터페이스의 사용의 예이다.

 

interface MyInterface{
	public void Foo();
    public void Boo(int a);
}


public class MyClass implements MyInterface{

	public void Foo(){
    	System.out.println("Foo SomeThing");
    }
    
    public void Boo(int a){
		System.out.println(a+" == > Boo ");
	}

}

 

인터페이스와 추상 클래스는 사용하는 방법이 키워드를 제외하곤 다른점이 없어보인다.

 

하지만 사용처가 다르다.

 

추상클래스는 상속을 이용하여 연관성이 있는 객체를 추가 구현이 필요하다 생각할때 사용하게 되고

 

인터페이스의 경우 관련이 없는 클래스에 추가 구현이 필요하다 생각하면 사용하게 된다.

 

예를들어 

 

추상클래스는 다음을 예를 들면

 

추상클래스 : 라면

 

라면을 조리하는 방법에 따라 여러 요리를 만들수 있다. 

조리방식에 따라 끓인 라면,  볶음 라면이 있다.

 

끓인 라면, 볶음 라면은 같은 라면이지만 조리방법이 조금 씩 다르다 

 

끓인라면은 스프를 끓여 라면을 계속 끓이지만, 볶음 라면은 물을 일정만 남기고 버리고 스프를 볶아 기호에 따라 볶아먹는 라면이다.

 

두 종류의 라면은 다 라면이다 하지만 조리방식이 조금 다를뿐 같은 라면의 종류이다. 이럴때 조리방식이 일부 메소드라고 생각해보면 좋다. 

 

그 조리방법을 추상메소드로 지정해 끓인 라면과 볶음라면을 상속받아 수정하여 사용하는게 추상클래스의 사용방법이다.

 

 

 

자바에서 기본적으로 상속은 1개만 가능합니다. 

1개의 클래스를 상속하여 처리하기 힘든경우가 존재합니다. 

그런데 인터페이스는 상속이란 개념이 아닌 확장이라는 개념입니다. 그러다보니 인터페이스는 1개가아닌 2~3개 이상 확장할수 있습니다.그래서 인터페이스를 사용하게 됩니다.

 

하지만 인터페이스를 늘릴수 있다고해서 모든걸 인터페이스로 하게되면 객체지향프로그래밍의 기본 모토를 깨기 때문에 무분별한 인터페이스 사용은 하면 안됩니다.

 


혼자해보기

 

 

라면을 Ramen 추상클래스로 만들고

볶음라면은 Buldark 로 하고

진라면을 Jin로 이름을 명합니다.

 

라면은 Cook 메소드를 가지고있습니다.

라면은 조리시간을 time 을 멤버변수로 가지고있습니다.

 

 

cook 메소드를 오버라이딩 하여 조리방법을 출력하는 메소드를 만들고

RamenInfo메소드를 Call하면 각 객체의 조리방법 + 조리시간을 출력하는 함수를 만들으세요

 

 

Ramen클래스는 추상클래스입니다.

 

Cook 메소드를 가지고 있습니다.

RamenInfo메소드는 라면정보와 조리시간을 출력하는 함수입니다.

 

 

반응형

'개발생활 > Java' 카테고리의 다른 글

Java Study 혼자 해보기 문제  (0) 2021.11.07
Java Study - Generic & Exception  (0) 2021.11.01
Java Inheritance class -4  (0) 2021.10.11
Java I/O , class -3  (0) 2021.09.26
Java Variable, Loop, Flow Control -2  (0) 2021.08.29
Java 개발환경 설정-1  (0) 2021.08.29

관련글 더보기