본문 바로가기
국비 과정/Java

국비 - 0719 (추상클래스 , 인터페이스)

by 코딩호야 2022. 7. 19.


추상클래스(Abstract Class)

: 추상클래스는 설계도에 비유한다면 미완성 설계도라고 할수 있습니다.
미완성 설계도란 완성되지 못한 설계도면을 말합니다.
미완성 설계도로 완성제품을 만들수 없듯이 추상클래스도 인스턴스를
만들수 없습니다. 추상클래스는 상속을 통해서 자손 클래스에 
의해서만 객체를 만들수 있습니다.

Abstract Method 와 Abstract Class 

: 추상메서드는 직접 어떠한 명령을 수행하는것이 아니고 메서드의 머리부분만
정의해 놓은 것을 의미합니다.
추상클래스는 추상메서드를 한개이상 포함하고 있는 클래스를 의미합니다.

- 추상메서드 : 메서드의 머리부분만 정의해 놓은 메서드
- 추상 클래스 : 추상메서드를 한개이상 포함하는 클래스

추상 클래스를 상속받은 클래스는 추상메서드를 재정의( 오버라이딩 )해서 더이상 
추상메서드를 갖지않는 클래스로 바꾸고 객체화 합니다.

:추상 클래스의 역할
- 작업 명세표를 제공합니다.
- 추상클래스에 있는 추상 메서드를 반드시 구현하도록 강제합니다.

: 추상클래스와 추상메서드의 사용

형식 
abstract class 클래스이름
 {
abstract void 추상메서드 이름( ) ;
...;
 }

abstract class 도형 {
	int i = 33;

	abstract void draw(); // 아래서 상속받을때 꼭 오버라이딩 해줘야한다.

	void show() {
		System.out.println(" 도형 클래스 속 show() 메서드 ~~~~ ");
	}
}

class 사각형 extends 도형 {

	@Override
	void draw() {
		System.out.println(" 사각형을 그린다 .");
	}
}

class 삼각형 extends 도형 {

	@Override
	void draw() {		
		System.out.println(" 삼각형을 그린다. ");
	}
}

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

		도형 obj1 = new 사각형();		// 다형성 활용 
		도형 obj2 = new 삼각형();

		obj1.draw();
		obj1.show();
		obj2.draw();
		obj2.show();

	}
}


Interface (인터 페이스)

: 인터페이스

인터페이스는 상수와 몸통이 없는 메서드로 구성됩니다.

즉 추상메서드와 상수만으로 구성된것이 인터페이스 입니다.

 

인터페이스와 추상클래스의 차이

추상클래스는 단일 상속만 가능하지만 인터페이스는 다중상속이 가능합니다.
추상클래스는 한개이상 추상 메서드를 갖지만 인터페이스는 모든 메서드가 추상메서드입니다.

추상클래스는  abstract 키워드를 사용하지만 인터페이스는 interface 키워드를 사용합니다.

추상클래스를 상속받을때 extends 키워드를 사용하지만 인터페이스는 implements 키워드를 사용합니다.

인터페이스에 있는 모든 메서드가 추상메서드이기 때문에 메서드앞에 abstract 키워드를 따로 붙이지 않습니다.

인터페이스의 사용방법

public interface 인터페이스이름 [extends 인터페이스2,,,]
{
.....; // 상수선언
.....; // 이름만 있는 메서드 선언
}

자바에서 추상클래스와 유사한 인터페이스를 만든이유

1. 단일상속의 한계를 보완합니다.
:클래스는 단일상속만 가능하기때문에 클래스의 확장성 , 재사용성에
한계가 있습니다. 하지만 인터페이스는 다중상속이 가능하기때문에
단일상속의 문제를 어느정도 보완할수 있습니다.

2. 클래스 명세표를 만듭니다.
:인터페이스는 내용이 없는 메서드로 구성되기 때문에
인터페이스를 상속받은 클래스는 반드시 메서드를 재정의 ( 오버라이딩 ) 해서
사용합니다.

인터페이스 사이의 상속

public interface  인터페이스 이름 extends 인터페이스이름 ,,,
{
  ...; // final 상수
  ...; // 메서드
}

클래스에서의 구현

public class 클래스이름 implements 인터페이스 이름 ,,,
{
...;  //멤버
...; //구현 메서드
}

 

Singleton  

소프트웨어 디자인 패턴에서 싱글턴 패턴을 따르는 클래스는,
생성자가 여러차례 호출되더라도 실제로 생성되는 객체는 하나이고
최초생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다.
이와같은 디자인 유형을 싱글턴 패턴이라고 한다.
주로 공통된 객체를 여러개 생성해서 사용하는  DBCP(DateBase Connection Pool)와 같은 
상황에서 많이 사용된다.

final class Singleton{

	private static Singleton ss ; 
	
	
	
	private Singleton() {}
	
	public static Singleton getInstance() {
		if (ss==null) {
	
			ss = new Singleton();	
		}
		return ss;
	}
}

 

getInstance() 메서드를 호출 했을때 null 값이라면 Singleton 객체를 생성해서 ss에 넣고

객체가 있다면 그 객체를 그래도 ss 값으로 리턴한다.