일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- GoingBus
- 프로그래머스
- 자바스크립트 코딩의 기술
- 리눅스마스터 3과목
- 리눅스마스터1급
- 문자열
- Linux
- 스프링 빈
- Kotlin
- toCharArray
- 연습문제
- 스프링 컨테이너
- 리눅스
- 백준 javascript
- 자바
- 카카오
- 반복문
- map
- 코딩테스트
- 명령어
- Memoir
- 고잉버스
- 리눅스마스터 1급 정리
- JavaScript
- 코테
- 백준 java
- Java
- java 백준 1차원 배열
- 개발자 회고록
- 월간코드챌린지
- Today
- Total
hoon's bLog
Java Abstract Class 자바 추상 클래스 본문
안녕하세요!
오늘은 추상클래스에 대해서 포스팅해보도록 하겠습니다.
인터페이스와 내부클래스도 같이하면 좋겠지만,
그래도 이렇게 조금이나마 시간이 있을 때 심도 있게 해 보고 가는 게 좋을 것 같아서,
추상클래스만 짚고 더 구체적으로 나머지 부분들 알아보도록 하겠습니다.
추상클래스란?
추상 클래스(abstract class)란 하나 이상의 추상 메서드를 포함하는 클래스입니다.
추상 메서드는 선언만 있고 본체는 없는 함수이며 선언부에 ‘abstract’라는 키워드를 붙입니다.
추상 메서드가 포함되었다면 클래스도 추상 클래스이므로,
클래스명 앞에도 ‘abstract’ 키워드를 붙여야 합니다.
따라서 이 abstract를 보고 상속을 통해 구현해줘야 한다는 것을 쉽게 알 수 있습니다.
abstract class Animal {
public String sName; //일반 멤버 변수
public void move() {
// 일반 메소드
}
abstract void howl(); //추상 메소드
}
추상 클래스는 추상 메서드를 포함하고 객체화할 수 없다는 점만 제외하고,
일반 클래스와 다르지 않으며 생성자, 멤버 변수와 일반 메서드도 가질 수 있습니다.
추상 클래스 자체로는 클래스로의 역할을 하지 못하며 객체를 생성할 수 없지만,
새로운 클래스를 작성하는 데 있어서 부모 클래스로서 중요한 역할을 갖습니다.
위의 예에서 Animal 클래스는 직접 객체를 생성하지 못하고,
이를 상속받는 자식 클래스에서는 추상 메서드의 구체적인 본체를 가질 수 있습니다.
abstract class Animal {
public String sName;
public void move() {
System.out.println("어슬렁 어슬렁");
}
abstract void howl();
}
class Dog extends Animal {
public void move() {
System.out.println("팔짝 팔짝");
}
void howl() {
System.out.println("멍멍");
}
}
class Cat extends Animal {
void howl() {
System.out.println("냐옹");
}
}
public class Tut02 {
public static void main(String[] args) {
Dog puppy = new Dog();
Cat kitty = new Cat();
puppy.move(); // 오버라이드된 멤버함수 호출
puppy.howl(); // 구현된 멤버함수 호출
kitty.move(); // 일반 멤버함수 호출
kitty.howl(); // 구현된 멤버함수 호출
}
}
[실행결과]
//팔짝 팔짝
//멍멍
//어슬렁 어슬렁
//냐옹
추상 메소드의 접근 지정자로 private는 사용할 수 없는데,
이는 자식 클래스에서 받아서 구현되어야 하기 때문입니다.
다른 접근 지정자(public, protected)는 사용할 수 있고 생략되면 default 즉, 같은 패키지 안에서만
접근 가능하며 일반 클래스와 동일합니다.
위의 예에서 처럼 추상 클래스는 다른 클래스들에게서 공통으로 가져야 하는 메서드들의 원형을 정의하고,
그것을 상속받아서 구현토록 하는 데 사용됩니다.
메서드 오버라이드(override)와 유사해서 혼동되어, 오버라이드는 안 해도 상관없지만,
추상 메서드는 자식 클래스에게 그 구현을 강요하는 기능을 합니다.
위 예에서도 Dog 클래스는 move() 메서드를 오버라이드 했지만 Cat클래스는 그러지 않았죠?
하지만 howl() 메서드는 반드시 구현해야 합니다.
그리고 만약 어떤 추상클래스를 상속받은 자식 클래스에서 추상 메서드를 구현하지 않았다면,
자식 클래스도 추상 클래스가 되어야 한다는 점도 알아 두시기 바랍니다.
그럼 오늘 포스팅은 여기서 마무리하겠습니다!
정리하다 보니 또 내용은 얼마 없지만... 그래도 한 번에 아는 것보단,
나눠서 그 차이점을 정확히 짚고 넘어가는 게,
더 중요하다고 생각이 들었습니다 ㅎㅎ
다음 시간엔 인터페이스에 대해서 알아보도록 하겠습니다!
수고하셨습니다.
출처 : 자바의 정석 3rd Edition 내용 정리
'IT > Java' 카테고리의 다른 글
Java public, protected, private, static, final 제어자 (0) | 2021.01.06 |
---|---|
Java interface implements 자바 인터페이스 구현 (0) | 2021.01.06 |
Java method Overriding, Overloading 자바 메서드 오버라이딩과 오버로딩 (0) | 2021.01.06 |
Java class extends 자바 클래스 상속 (0) | 2021.01.06 |
Java ArrayList 선언, 추가, 삭제, 출력 (0) | 2021.01.06 |