Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 배열
- HTML
- CS
- github
- 회고
- 항해99
- 99클럽
- 면접(java
- 개발자 취업
- Grafana
- 코딩테스트 준비
- Entity
- 이진 탐색(binary search)
- css
- Spring
- wil
- cs 공부)준비
- GIT
- aop
- 자바
- 프로그래머스
- ArrayList
- Til
- 코딩
- 코딩공부
- 정렬 알고리즘(sort algorithm)
- Java
- 코딩문제
- 자료구조
- 메서드
Archives
- Today
- Total
hayu's 개발 일지
[TIL]240712 추상 클래스(Abstract) 본문
공부한 내용
추상 클래스(Abstract)
- 일반적인 클래스는 구체적으로 데이터를 담아 인스턴스화 하여 직접 다루는 클래스이다. 그 반대로 구체적이지 않은 추상적인 데이터를 담고 있는 클래스가 추상 클래스이다.
- 추상 클래스는 일반 클래스와 다르게 인스턴스화가 불가능한 클래스이며, 추상 클래스를 선언할 때는 abstract 키워드를 사용한다는 차이점이 있다.
추상화
- 객체 지향 프로그래밍 특징 중 하나이다.
- 추상화는 객체 지향(oop)의 핵심이며 객체 프로그래밍의 시작이 되기도 한다.
- 예) 문자를 대문자로 변환해주는 String.toUpperCase() 라는 메서드일 경우, 우리는 이 메서드가 내부에서 어떤식으로 동작하여 소문자를 대문자로 변환 해주는 로직에 대해 자세히 알지도 못한다. 그저 대문자로 모두 변환된 문자열을 결과값으로 받아서 사용할 뿐이다.
- 즉, 우리는 구체적으로 알지도 못하는 String.toUpperCase() 라는 클래스와 그 안에 있는 메서드를 그냥 생각없이 사용해왔던 것이고, 생각이 없다는 것은 곧 추상적이라고 말할 수 있는 것이다.
String text = "Hello world";
String textUpper = text.toUpperCase();
// 우리는 메서드 내부가 어떤식으로 돌아가는지 생각 없이 결과값만 받을 뿐이다.
// 그냥 메서드 내부에서 대충 알아서 잘 대문자로 마술같이 변환해주겠지 하고 막연하게 추상적으로 생각할 뿐이다.
System.out.println(textUpper); // "HELLO WORLD";
⇒ 추상 클래스는 추상화를 클래스에 결합시킨 것이다.
추상 클래스의 용도
- 클래스는 인스턴스를 생성해주는 틀이나 설계도와 같은 개념이다.
- 인스턴스 객체 자료형을 사용하여 우리는 구조적으로 프로그램을 설계할 수 있다.
→ 이것이 객체 지향적 프로그래밍이라고 불리는 이유다.
⇒ 추상 클래스는 클래스에 추상화를 결합시켜 보다 구조적이게 객체 설계를 하고, 프로그램의 유지보수성을 올리며, 어떠한 기능을 수정 / 추가 를 유연하게 만들어준다.
추상 클래스 기본 문법
- 자바에서는 abstract 키워드를 클래스명과 메서드명 옆에 붙임으로서 컴파일러에게 추상 클래스와 추상 메서드임을 알린다.
- 추상 메서드는 작동 로직은 없고 이름만 남아았는 메서드이다.
→ 메서드의 선언부만 작성하고 구현부는 미완인 채로 남기는 것이다.(메서드의 구현부인 중괄호가 없는 상태이다.)
- 보통 문법적인 측면으로는 하나 이상의 추상 메서드를 포함하는 클래스를 가리켜 추상 클래스라고 정의한다.
- 추상 클래스 안의 메서드를 미완으로 남겨 놓는 이유는 추상 클래스를 상속받는 자식 클래스의 주제에 따라서 상속 받는 메서드의 내용이 달라질 수 있기 때문이다.
- 부모(추상) 클래스에서 메서드를 선언부만을 작성하고, 실제 내용은 상속받는 클래스에서 구현하도록 하기 위해 일부로 비워두는 개념이다.
→ 추상 클래스를 상속받는 자식 클래스는 부모의 추상 메서드를 상황에 맞게 재정의하여 구현해야 사용이 가능하다.
⇒ 클래스의 선언부에 abstract 키워드가 있다는 말은 안에 추상 메서드(abstract mathod)가 있어, 상속을 통해 구현해주라는 지침이기도 하다.
// 추상 클래스
abstract class Pet {
abstract public void walk(); // 추상 메소드
abstract public void eat(); // 추상 메소드
public int health; // 인스턴스 필드
public void run() { // 인스턴스 메소드
System.out.println("run run");
}
}
class Dog extends Pet {
// 상속 받은 부모(추상) 메소드를 직접 구현
public void walk() {
System.out.println("Dog walk");
}
public void eat() {
System.out.println("Dog eat");
}
}
public class main {
public static void main(String[] args) {
Dog d = new Dog();
d.eat(); // 부모(추상) 클래스로 부터 상속받은 추상 메소드를 직접 구현한 메소드를 실행
d.walk();
d.run(); // 부모(추상) 클래스의 인스턴스 메소드 실행
}
}
- 추상 클래스에서 추상 메서드를 포함하는 것을 제외하면 일반 클래스와 다를 게 없다.
- 추상 클래스도 생성자가 존재하며, 독립적인 인스턴스 멤버 변수와 메서드를 가질 수 있다.
회고
- 추상 클래스를 공부하는데 이해하기가 너무 어려웠다..
- 다시 돌아가서 공부해보기로 했다.
'기술 > java' 카테고리의 다른 글
[TIL]240711 자바 코드 구조 이해 (0) | 2024.07.11 |
---|---|
[TIL]240710 상속 (0) | 2024.07.10 |
[TIL]240706 final (0) | 2024.07.06 |
[TIL]240705 static (0) | 2024.07.05 |
[TIL]240704 자바 메모리 구조 (0) | 2024.07.04 |