The Debugging Chronicles : "코드의 미학"
추상 클래스 본문
자바의 추상화
자바 웹 개발을 하다보면 JAVA가 아닌 언어를 사용할 확률이 점점 높아집니다.
JAVA를 기반으로한 회사마다의 새로운 언어 or 프레임워크가 많다
그 회사에서만 사용하는 언어 혹은 기술이 있다
만약 JAVA만 공부하면, 다른 언어를 만났을 떄 ….. 어 안배워서 모른다,… 라는 이야기가 나오면 개발자 인생 끝….
세상 모든 JAVA기반 언어들이 공통으로 하는 모토 혹은 기준 같은게 있는데,
그게 바로 “추상화”개념을 반드시 가지고 있다는 점
그래서 웹 개발 책이나 인강을 보면 잘안나올 수도 있다, 당장 안쓰긴함
>>> 세상 모든 언어들이 이 “추상화”개념을 바탕으로 뭔가 한다는 점….
———————————————————————————
추상화의 역사
네모 클래스, 원 클래스, 세모 클래스가 있다.
하트 클래스를 만드려고 한다
네모는 줌심점, 가로길이 세로길이, 넓이가 있다.
원은 중심점, 원주율, 반지름, 넓이가 있다.
세모는 중심점, 변의 길이, 넓이
하트 클래스를 만드려면???
- 카피하려고 기존의 것들을 살펴본다.
- 하트도 중심점, 넓이가 있다 - 하지만 내가 만드려는 클래스가 기존 클래스들의 하위가 아니라, 기존 클래스 급이라서 그렇다
- 복사해도 되지만 만약 멤버변수가 수십만개라면 복사가 불가능하다. - >복사 불가능
- 기존 클래스들의 상위 개념이 있구나!! 라는 생각이 도출….
== 기존 클래스들의 상위 개념
== 기존 클래스들에게 공통점이 있구나!!
- 형체 없이, 기존 클래스들의 공통점을 뽑아냄
가장 상위 개념인 중심점과 넓이가 있다. 공통적인것들을
==> 추상 클래스 (기존 클래스들의 상위 클래스)
==> 형체가 없어서 객체화가 불가능하다
==> 클래스들을 정의하는데에 활용함
클래스들의 틀(추상 클래스) ——> 클래스 ———> 객체를 뽑아내려고
———————————————————————————
초기 JAVA 는 여러개의 국가에서 동시에 개발
네모 세모 원 —> 어 공통점이 있네 = > 뽑아내자
=> 추상 클래스 “abstract “
객체화 x 클래스들을 정의 (클래스들의 틀)
ex) 포켓몬 포켓몬 = new 포켓몬 ();
피카츄 클래스에서 피카츄 여러마리 생성 가능
메타몽 여러마리
동물 돌물
———————————————————————————
추상 클래스에서
자기 자식들 클래스에게
특정 메서드를 오버라이딩 하라고 ‘강제’하고 싶은 상황
오버라이딩을 강제하는 문법이 필요하다
>> 강제하는 개발자에게 좋은 의미
>> 실수를 줄여주니까!!
abstract
———————————————————————————
[추상화]
abstract 을 붙인 클래스를 추상 클래스
abstract 을 붙인 메서드를 추상 메서드라고 한다
추상 클래스는 객체화가 안 되고 클래스들의 틀
추상 메서드는 기능 구현 안됨
오버라이딩을 강제하는 역할!
package class02;
abstract class Shape { // abstract 추상 클래스
private String name;
protected double area;
Shape(String name){
this.name=name;
this.area=0.0;
}
// 메서드는 쓰라고 만드는거라서,
// public 공개정책을 사용
abstract public void draw();
// abstract이 붙은 메서드를
// "추상 메서드"라 부른다.
// "오버라이딩 강제"하는 역할!!!!!★
// 기능의 내용이 필요없기때문에,
// {} 메서드 바디가 필요없음!
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getArea() {
return area;
}
public void setArea(double area) {
this.area = area;
}
@Override
public String toString() {
return this.name+"의 넓이 : "+this.area;
}
}
class Rect extends Shape {
int x;
int y;
Rect(int x,int y){
super("네모"); ////////
this.x=x;
this.y=y;
this.area=this.x*this.y;
}
@Override
public void draw() {
System.out.println("네모 그리기"); ////////
}
}
class Circle extends Shape {
private int radius;
static final double PI=3.14;
Circle(int radius){
super("원");
this.radius=radius;
this.area=this.radius*this.radius*Circle.PI;
}
@Override
public void draw() {
System.out.println("동그라미 그리기");
// 개발자가 실수로라도 빠뜨리는 일없이 구현할수있다!!!!!
}
public int getRadius() {
return radius;
}
public void setRadius(int radius) {
this.radius = radius;
}
}
public class Test01 {
public static void main(String[] args) {
//Shape s=new Shape("모양");
// 추상 클래스로는 객체화(인스턴스화) 할 수 없음!!!
// 객체를 생성하려고 존재하는게 아니라,
// 클래스들을 정의하려고 존재하기때문에!!!!!
// == 클래스들의 틀
Circle c=new Circle(10);
System.out.println(c);
}
}
package class05;
// 설계★
// 속성: 이름,레벨,공격력,...
// 메서드: Q(),W(),E(),R(),귀환(),...
abstract class Champ {
private String name; // private 멤버변수
private int level; // 속성,필드,attribute,property
Champ(String name){ // 생성자 == 멤버변수 초기화
this.name=name;
this.level=3;
}
abstract public void Q(); // 메서드
abstract public void W(); // 하위 클래스들아, 잊지말고 재정의해! (강제)
public void B() { // 귀환
System.out.println("집으로 돌아가기");
}
public String getName() { // getter, setter
return name;
}
public void setName(String name) {
this.name = name;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
@Override
public String toString() { // toString()
return "Champ [name=" + name + ", level=" + level + "]";
}
}
// 티모,아리,...
class Teemo extends Champ {
Teemo() {
super("티모");
}
@Override
public void Q() {
System.out.println("독침");
}
@Override
public void W() {
System.out.println("빨리가기");
}
}
class Ari extends Champ {
Ari() {
super("아리");
}
@Override
public void Q() {
// 추상 메서드의 오버라이딩 강제 덕분에
// 쉽고 빠르게 잊지않고 메서드 재정의 가능!!!
System.out.println("구슬");
}
@Override
public void W() {
System.out.println("불꽃");
}
}
public class Test01 {
}
'JAVA > 자바 수업 내용' 카테고리의 다른 글
MVC 패턴 예제 (0) | 2024.07.29 |
---|---|
제네릭 배열리스트 컬렉션 프레임 워크 (0) | 2024.07.29 |
오버라이딩 : 메서드 재정의 (final 상수화 static 클래스 변수) (0) | 2024.07.29 |
클래스의 상속 super 생성자 함수 강제성 (0) | 2024.07.29 |
멤버 변수 초기화, 클래스의 생성자 함수 (0) | 2024.07.29 |