뭉지(moonz)
작은 발자국들의 위대한 여정
뭉지(moonz)
  • All (200)
    • Test Code (4)
    • 백엔드 개발하며 작성한 (25)
      • Spring (16)
      • 데이터베이스 (6)
      • 기억할 내용 (3)
    • 언어 (53)
      • Java (25)
      • node.js (7)
      • Python (21)
    • 클라우드 (6)
    • Algorithm & Data Structure (51)
      • 개념 (15)
      • 문제 풀이 (36)
    • 유용한 모든 것 (16)
    • monologue (7)
      • 업무 노트 (1)
      • 관리 로그 (0)
      • 내 이야기 공책 (6)
    • Project (2)
    • TroubleShooting (8)
    • 지식 (18)
      • Machine Learning (6)
      • Review (7)
      • Web (5)
    • Computer Science (5)

블로그 메뉴

  • 홈
  • 태그

인기 글

최근 글

최근 댓글

전체 방문자
오늘
어제

티스토리

hELLO · Designed By 정상우.
뭉지(moonz)

작은 발자국들의 위대한 여정

기초 #5. 추상클래스 (ex. 계산기 프로그램)
언어/Java

기초 #5. 추상클래스 (ex. 계산기 프로그램)

2020. 8. 22. 12:28
반응형

 

추상?

추상이란, 실체들 간에 공통되는 특성을 추출한 것이다. ex) 삼각형, 사각형, 원 -> 모양, 그리기 등

 

추상 클래스?

실체 클래스(서브)들의 공통되는 필드와 메소드를 정의만 한 클래스이다.

  • 실체클래스의 부모 역할이어야 한다. 단독X
  • 추상클래스는 온전한 클래스가 아니기때문에 (new연산자로) 인스턴스 생성을 못한다. (상속받은 자식클래스에서 생성 가능하다.)

추상 메서드 : 실체 클래스(서브)들의 공통되는 메서드. (정의만)

실체 클래스 : 추상 클래스의 메서드를 구현하는 클래스.

실체 메서드 : 추상메서드를 구현. (오버라이딩-메서드 이름은 동일하지만 실행내용이 다른 메서드.)

 

간단한 예를 들면,

Animal()이라는 추상클래스가 있고, 여기에는 Sound()라는 추상 메서드를 정의한다.

public abstract class Animal {		//추상클래스이자 부모클래스 Animal
    public void breathe() {
    	System.out.println("숨을 쉽니다.");
    }
    public abstract void Sound() {};
    public void run() {			//추상클래스에도 일반메서드 정의&구현할 수 있음.
    	breathe();
        Sound();
    }
}

 

Animal()를 상속받는 Cat(), Dog() 클래스들은 Sound()를 구현하는 메서드를 오버라이딩해야한다.

public class Cat extends Animal {		//추상클래스 Animal 상속받은 Cat
	public void Sound() {
    	System.out.println("야옹!");
    }
}
public class Dog extends Animal {		//추상클래스 Animal 상속받은 Dog
	public void String {
    	System.out.println("멍멍!");
    }
}

 

main 메서드로 Cat 클래스, Dog 클래스의 각 객체를 생성한 후,

그 객체로 메서드에 접근하면 각각의 클래스의 메서드가 실행된다. 

public class Main {
	public static void main(String[] args) {
    	Cat cat = new Cat();
        Dog dog = new Dog();

        cat.run();
        System.out.println("--------------------------");
        dog.run();
    }
}

결과

 

 

[예제] 계산기 프로그램

[참고]

추상클래스 Calculator에는 추상메서드 add,substract,average 가 있다.

클래스 GoodCalc은 추상 클래스 Calculator를 상속받는다.

메인에서 GoodCalc클래스 객체 c를 생성해서 호출한다.

 

[코드]

추상메서드를 정의한 추상클래스

abstract class Calculator {	
	abstract int add(int a, int b);
    abstract int substract(int a, int b);
    abstract double average(int[] c);
}

추상 클래스를 상속받는 클래스

class GoodCalc extends Calculator {
	int add(int a, int b) {
    	return a+b;
    }
    int substract(int a, int b) {
    	return a-b;
    }
    double average(int[] a) {
    	double sum = 0;
        for (int i=0;i<a.length;i++)
        	sum+=a[i];
        return sum/a.length;
    }
    
    public static void main(String[] args) {
    	GoodCalc c = new GoodCalc();		//객체 생성할 수 있는 클래스는 GoodCalc
        System.out.println(c.add(5,10));
        System.out.println(c.substract(10,5));
        System.out.println(c.average(new int[] {2,3,4,6}));
    }
}

[결과]

 

반응형
저작자표시 (새창열림)

'언어 > Java' 카테고리의 다른 글

기초 #7. 중첩 클래스(인스턴스 멤버 클래스, 정적 멤버 클래스, 로컬 클래스)  (0) 2020.08.30
기초 #6. 인터페이스 예습  (0) 2020.08.23
기초 #4. 상속과 다형성  (0) 2020.08.21
기초실습 #2. 학생 점수 프로그램, 차량 관리 프로그램  (0) 2020.08.16
기초실습 #1. 계좌이체 프로그램 예제  (0) 2020.08.14
    '언어/Java' 카테고리의 다른 글
    • 기초 #7. 중첩 클래스(인스턴스 멤버 클래스, 정적 멤버 클래스, 로컬 클래스)
    • 기초 #6. 인터페이스 예습
    • 기초 #4. 상속과 다형성
    • 기초실습 #2. 학생 점수 프로그램, 차량 관리 프로그램
    뭉지(moonz)
    뭉지(moonz)
    제가 깨달은 것을 정리하는 공간입니다. 🧡

    티스토리툴바