static - 클래스의, 공통적인
- static은 멤버변수, 메서드, 초기화 블록에 사용할 수 있습니다
- 클래스변수(static 멤버변수)는 인스턴스에 관계없이 같은 값을 갖습니다. 모든 인스턴스가 공유합니다. (멤버변수)
- 클래스가 메모리에 로드될 때 생성됩니다. (멤버변수)
- static 메서드 내에서는 인스턴스 멤버들을 직접 사용할 수 없습니다.(메서드)
abstract
- 각자 직접 구현이 필요한 메서드는 추상화 시킨다. (당근과 채찍)
- 공통으로 쓰는 메서드는 일반메서드로 뺀다.
- 선생님이 만든 시험<-->시험을 푸는 학생 관계?
- 다른 클래스들이 Pclass의 자손으로 관리가 되어질 필요가 있는 경우 사용됩니다. (구조적 기능)
- 다른 클래스들이 Pclass에서 제공되는 공통 기능의 메서드를 사용하되 일부 메서드는 각자가 기능구현해야 되는 경우 사용됩니다.(기능적)
-회원실명인증 기능에서 로그기록 기능은 결제파트, 포인트파트, 회원관리파트에서 따로 구현해야 합니다. 이때 로그기록 기능을 추상화시켜 각자 파트에서 만들도록 합니다.
Interface
- abstract은 추상(일반메서드,추상메서드)이고, Interface는 완전 추상(추상메서드)입니다.
- abstract은 공통으로 사용하는 일반메서드, 반드시 각자 구현하는 추상메서드로 나뉘어져 있습니다.
- interface는 main()을 만들 수 없습니다 == 실행의 목적이 아닙니다 == 부모가 되려는 목적으로 쓰입니다.
- interface는 공통의 메서드를 모아두고 부모 역할을 하기 위해 사용합니다.
- 변수는 상수만을 갖고, 메서드는 추상만을 갖습니다
public interface Lec인터페이스{
double PI = 3.141592; // (public static final) double PI
void add(); // (public abstract) void add
}
- 인터페이스는 다중상속 가능합니다. <--> 클래스는 단일 상속만 가능합니다.
public interface Lec07인터페이스 extends 인터페이스부모1, 인터페이스부모2{
double PI = 3.141592; //--> public (static) (final) double PI
public void add(); //--> public (abstract) void add();
}
interface 인터페이스부모1{
public void inter1ParentMethod1();
public void inter1ParentMethod2();
}
interface 인터페이스부모2{
public void inter2ParentMethod1();
}
- 추상클래스가 인터페이스를 상속받은 경우 둘다 추상이기 때문에 반드시 오버라이딩 할 메서드는 없다.
다형성(너무너무너무중요)
- 다양한 형태의 성질입니다. (뜻)
Child c = new Child(); // 5
Parent p = new Parent(); //2
// 자식 인스턴스로 부모타입의 객체에 접근하는 것
Parent pc = new Child(); // 2 parent에 있는거만 사용할 수 있음
// 왠 자식 클래스에 멤버들은 건들지 못하나??
- 자식의 클래스에 있는 메서드들(부모에게도 있는 자식의 메서드)을 제한적으로 사용하면서 공통의 것을 해야할 때 사용합니다.
- 관계없는 클래스를 묶어줄 수 있다.
인터페이스를 부모로 두면 좋은 점
- 다형성 : 동일한 인터페이스를 구현한 다양한 클래스들을 사용하여 유사한 작업을 수행할 수 있습니다. 다양한 페이 방식을 페이 인터페이스로 처리할 수 있습니다.
- 유연성 : 다른 클래스들이 각자의 방식으로 동작할 수 있도록 할 수 있습니다. (중요) --> 유지보수가 용이해지며, 코드 가독성를 높입니다. 추가 확장이 용이합니다.
- 확장성 : 새로운 클래스나 데이터 유형을 추가할 때 기존의 코드를 수정하지 않고도 쉽게 추가할 수 있습니다.
- 구조화 : 동일한 인터페이스로 다양한 클래스들을 사용하여, 코드를 더 추상화하고 간결하게 할 수 있습니다.
- 폴리모피즘 : 동일한 이터페이스를 구현한 객체들이 다양한 형태를 가질수 있습니다. 이로 인해 객채간의 관계를 더 추상화하고 코드의 가독성을 높일 수 있습니다.
class Parent{
public int point = 100;
public void add(int a){
System.out.println(a*100);
}
public void parentMethod(){
System.out.println("ParentMethod() 실행");
}
}
class Child expends Parent{
public int point = 10;
@Override
public void add(int a){
System.out.println(a*10);
}
public void childMethod(){
System.out.println("childMethod() 실행");
}
public static void main(String[] args){
// 1. 자식타입 = 자식 인스턴스
child c = new child();
System.out.println(c.point); // 자식 10
c.add(8); // 자식-오버라이딩 80
c.parentMethod(); // 부모
c.childMethod(); // 자식
// 2. 부모타입 = 부모 인스턴스
Parent p = new Parent();
System.out.println(p.point) // 부모 100
p.add(8); // 부모 800
p.parentMethod() // 부모
// 3. 부모타입 = 자식 인스턴스
Parent pc = new Child();
System.out.println(pc.point) // 부모 100
pc.add(8); // 자식-오버라이딩 80
pc.parentMethod(); // 부모
}
}
'KOSTA : 클라우드 네이티브 애플리케이션 개발 전문가 양성과정' 카테고리의 다른 글
05/13 22일차 VO, JSON API(json.simple, Jackson) (0) | 2024.05.13 |
---|---|
05/09 21일차 컬렉션 (0) | 2024.05.10 |
05/08 19일차 Java OOP Test (0) | 2024.05.08 |
05/08 19일차 Java 문법 Test (0) | 2024.05.08 |
05/07 18일차 객체지향언어II : 예외처리 (0) | 2024.05.07 |