ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 추상클래스(Abstract Class)
    Java 2021. 12. 15. 23:30

    추상클래스(Abstract Class)란?

    추상클래스는 추상 메서드를 포함한 클래스를 말합니다.

    추상메서드는 구현부가 없이 선언부만 있는 메서드입니다.

    여기서 선언부 반환값, 메서드 이름, 매개변수를 말합니다.

     

    상속을 통해서 자손 클래스에서 완성하도록 유도하는 클래스이며

    일반 클래스"설계도" 라고 한다면 추상 클래스"미완성 설계도"라고 표현할 수 있습니다.

     

    선언부에 'abstract'라는 키워드를 붙여 만들 수 있습니다.

    다음은 추상클래스의 예시입니다.

    abstract class 클래스이름 {
    	....
        public abstract void 메서드이름();
    
    
    }

     

    추상클래스로 "객체"를 생성할 수 있을까요?

    "미완성 설계도"이기 때문에 객체(인스턴스)를 생성할 수 없습니다.

    따라서 상속을 통해 자식 클래스로 객체를 생성해야 합니다.

    또한 자식 클래스는 추상 클래스가 가지고 있는 추상 메소드를 반드시 구현(Overrideing) 해야 합니다.

     

    즉, 상속 전용의 클래스입니다.

    그러면 추상클래스는 왜 사용할까요?

    1. 공통 필드와 메서드 통일 목적

    프로젝트가 커지면 여러 개발자가 참여하게 되고 공통적으로 작성되어야 하는 내용이 생긴다.

    추상클래스를 사용함으로써 공통된 내용(메소드, 필드)들을 추출하여 통일된 내용을 작성하도록 합니다.

    개발자들은 자신의 클래스에 필요한 메소드나 필드만 추가로 정의하고, 추상 메소드를 오버라이딩하여 사용합니다.

    즉, 유지보수성을 높이고 통일성을 유지할 수 있습니다.

     

     

    2. 실체클래스 구현시, 시간절약

    실제 프로젝트에서 AA(Aplication Architecture)가 설계해 놓은 추상 클래스를 상속받으면, 프로젝트에서 공통적으로 들어가야하는 필드와 메서드가 오러버이딩 된다.

     

    이것을 기반으로 자신만의 스타일대로 구현하면 되기 때문에 설계 시간이 절약되고 구현에만 집중할 수 있다. (자신만의 스타일이지만 결국엔 규격 안에서 구현하는 것)

     

    3.구현의 강제를 통해 프로그램의 안정성을 향상

    추상 클래스를 상속받게 되면 메서드를 반드시 재정의 해야 하므로 프로그램의 안정성이 향상됩니다.

     

    추상클래스는 어떨 때 사용할까요?

    A클래스, B클래스, C클래스가 있습니다.

    3개의 클래스는 모두 각자의 필드와 메서드가 존재합니다.

    추상클래스는 3개의 클래스중 공통인 필드와 메서드를 추출하여 만들 수 있습니다.

     

    예를 들어 강아지 클래스와 고양이 클래스가 있습니다

    강아지와 고양이의 공통된 행동이나 모습이라면 다리가 4개이다, 털이 있다, 울음소리를 낸다(서로 다른 울음소리),숨을 쉰다 라는 특징이 있습니다.

     

     


    추상클래스는 어떻게 사용할까요?

    그러면 실제코드로 추상클래스를 통해 강아지, 고양이 클래스를 구현해보겠습니다.

     

    Animal이라는 추상클래스 구현

    public abstract class Animal {
    	public static int LEGCOUNT = 4;
    	public static boolean hasFur = true;
    	public String kind;
        
    	public void breath() {
    		System.out.println("숨을 쉰다");
    	}
    	
    	public abstract void sound(); //구체적인 구현부는 없음
    					
    }

     

    고양이와 강아지는 다리는 항상 4개를 가지고, 털은 항상 있기 때문에 static을 부여했고

    kind 변수에는 동물이 어떤류에 속하는지에 대한 변수입니다.

    고양이와 강아지는 항상 숨을 쉬기 때문에 breath() 메서드를 일반메서드로 구현하였습니다.

     

    그리고 sound() 울음소리는 고양이와 강아지가 다르기 때문에 abstract를 사용하여 추상메서드로 구현했습니다.

     

     

    Dog클래스 구현

    public class Dog extends Animal{
    
    	public Dog(){
    		this.kind ="포유류";
    	}
    	@Override
    	public void sound() {
    		// TODO Auto-generated method stub
    		System.out.println("멍멍");		
    	}
    
    }

     

    Cat클래스 구현

    public class Cat extends Animal {
    
    	public Cat(){
    		this.kind ="포유류";
    	}
    	@Override
    	public void sound() {		
    		// TODO Auto-generated method stub
    		System.out.println("야옹");		
    	}
    
    }

    두 클래스 모두 Animal 추상클래스를 상속받아 사용하며 sound() 추상메소드를 오버라이딩하여 구현하였습니다.

    sound() 추상메소드를 활용하여 자신의 클래스에 맞는 울음소리를 구현했기 때문에 추상메서드를 통해 다형성이 발생한다는 사실을 알 수 있습니다.

     

     

    이제 추상클래스와 추상클래스를 상속받아 구현한 실체클래스를 사용하는 예제를 보겠습니다.

    public class AnimalExameple {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Cat cat = new Cat();
    		Dog dog = new Dog();
    		
    		dog.sound();
    		cat.sound();
            
    
    	}
    
    }
    
    //출력
    //멍멍
    //야옹

    Dog, Cat 클래스는 구현한 sound()메소드에 따라 멍멍, 야옹 이라는 다른결과를 도출합니다.

     

    출처

    https://limkydev.tistory.com/188

     

    [JAVA] 자바 추상클래스란?

    [JAVA] 자바 추상클래스란? 추상클래스 이 글 하나로 박살내자. 추상클래스의 문법적인 특징이나, 객체생성이 되고 안되고 이런 특징들이 중요한게 아닙니다. 도대체 추상클래스가 무엇이고 왜

    limkydev.tistory.com

     

    https://velog.io/@gillog/Java-Abstract-Class%EC%B6%94%EC%83%81-%ED%81%B4%EB%9E%98%EC%8A%A4

     

    [Java] Abstract Class(추상 클래스)

    Abstract Class란 구체적이지 않은 Class를 의미한다. EX 독수리, 타조는 구체적인 새를 지칭하는데 새, 포유류 같은 것은 구체적이지 않다.주로 클래스들의 공통되는 필드와 메소드를 정의한 클래스

    velog.io

     

    댓글

Designed by Tistory.