일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- SQL
- WHEREIN
- mybatis
- git reset
- content-box
- useContext
- passwordencoder
- ResultType
- 부적합한열
- git amend
- CRUD
- Variabla
- assertequals
- BCryptPasswordEncoder
- react
- oracle
- springboot
- Spring
- Thymeleaf
- Java
- JavaScript
- HTML
- git
- 배열
- JDBC
- git revase
- 이딴게개발자
- PathVariable
- localStorage
- MVC
- Today
- Total
개발새발
[Java] 추상클래스 Abstract 본문
실무에서는 거의 쓰이지 않는 방법이라고는 하나 개념은 알고 넘어갑시다
왜 추상 클래스라고 하는 것이며, 왜 쓰는 것일까?
1. 추상클래스 Abstract
일반적인 클래스와 다르게 직접 객체를 생성할 수 없음.
주로 다른 클래스들이 공통으로 가져야하는 메서드나 필드를 정의하는데 사용됨.
코드의 재사용성과 유지보수성을 향상시킬 수 있다는 특징이 있다.
2. 추상클래스 선언 방법
클래스 선언 앞에 'abstract'를 붙이면 끝!
구조는 다음과 같다
abstract class MyAbstractClass {
//추상메서드와 일반 필드, 메서드 등을 포함 가능
abstact void myAbstractMethod(); //추상메서드
}
3. 추상메서드
추상클래스는 하나 이상의 추상메서드를 포함해야 하는데, 이때 추상메서드는 선언만 있고 메서드의 구현은 없음
>>> 반드시 하위 클래스에서 구현 <<<
구현 없이 생성되고, 하위 클래스에서 추상메서드를 가져와 내용을 채워주는 식인 것이다.
그러니까 틀만 있고, 하위 클래스로 받은 사람이 '이 이걸 완성하면 되는걸까..'하면서 채우는거라.. 추상 메서드 아닐까.
아무튼 선생님도 설명하시면서 도대체 어떠한 연유로 이런 기능이 생기게 됐는지 궁금하다고 할 정도로.. 굳이 이런 기능이 왜 있는거지싶은 그런 녀석.
예제는 나중에 추가할게용 ~
예제 가지고 왔습니다~ 호호
문제)
1. CircleShape라는 추상클래스를 생성 후, 추상 메서드인 circleArea도 선언하자.
2. 하위 클래스 Circle을 통해 추상클래스를 상속 받고 추상 메서드를 마저 구현해주자.
3. 그리고 Main클래스를 통해 인스턴스 생성 후 Circle의 정보(원의 색상 및 넓이)를 출력하자~
일단 추상클래스 CircleShape부터 만들어보자
package circle;
abstract class CircleShape {//abstract : 추상클래스 정의
//일반필드
private String color;
//생성자
public CircleShape(String color) {
this.color = color;
}
//추상 메서드(하위 클래스에서 구현해야 함)
abstract double circleArea(); //메서드 선언만 하고 구현x
//일반 메서드 (Getter, Setter)
public void setColor(String color) {
this.color = color;
}
public String getColor() {
return color;
}
}
abstract를 통해 Circleshape라는 추상클래스를 생성하고, 클래스 내부에 추상 메서드 circleArea()도 하나 선언해줬다.
그럼 이제 이 추상클래스를 받아든 사람은 생각할 것이다. circleArea? 하위 클래스를 생성해서 마저 완성을 해야겠군.
뭐 어쩌라는건지는 잘 모르겠지만 메서드 이름으로 보아하니 원의 면적을 구하는 메서드를 구현하라는 거겠지?!
그래서 만들어준, 추상 클래스를 상속 받을 하위 클래스 Circle~
package circle;
//추상 클래스를 상속받는 구체적인 클래스 정의(하위 클래스)
public class Circle extends CircleShape {
private double radius;
//생성자
public Circle(String color, double radius) {
super(color); //부모 클래스의 생성자 호출
this.radius = radius;
}
//추상메서드를 구현
@Override
public double circleArea() {
return Math.PI * radius * radius;
}
}
circleShape클래스를 상속받아서 멤버변수 color도 잘 호출해줬고, 아래에서 추상 메서드를 마저 구현해준 모습이 보인다.
** @Override : circleArea() 메서드를 오버라이드 했음을 명시하는 용도
면적을 잘 구할 수 있게 야무지게 Math클래스를 사용해서 𝝿 * r^2 공식을 구현해 놨음도 확인했다.
마지막으로 출력용 Main클래스까지 구현하면 완료!
package circle;
public class Main {
public static void main(String[] args) {
Circle circle = new Circle("Blue",5.0);
System.out.println("원의 넓이 : " + circle.circleArea());
System.out.println("원의 색깔 : " + circle.getColor());
}
}
워딩에 비해 생각보다 어려운 개념은 아니었다.
하지만 충분한 소통을 전제하지 않은 이상, 팀원들끼리 사용할 일은 진짜 없을 것같다고는 느꼈다.
혹시 모르지 자바고수가 되면 쓸 생각이 생길지도..
끝!
'Java > 개념을 Java' 카테고리의 다른 글
[Java] 배열과 리스트 1 : Array ~ 다차원 배열 (1) | 2023.09.18 |
---|---|
[Java] API (1) | 2023.09.14 |
[Java] 변수의 종류 (0) | 2023.09.12 |
[Java] 생성자와 this (0) | 2023.09.11 |
[Java] 클래스와 객체 (0) | 2023.09.11 |