1. 상속
상위 클래스의 기능을 extends 키워드로 하위 클래스에서 사용 또는 재정의
상위 클래스에서 공통적인 기능을 정의하고 자식 클래스에서 사용 또는 재정의
이미 마련되어 있는 클래스를 재사용하기 떄문에 효율적
private 필드/메서드는 상속 받을 수 없음
다른 패키지의 default 필드/메서드도 상속 받을 수 없음
ERP의 경우 기능개발자가 부모 클래스 형태로 제공하면 파트별로 개발자가 이를 상속받아 구현
package lec09;
// 콜라 부모 클래스
public class Cola {
public String colaName = String.valueOf("콜라");
public void showColaProperty() {
System.out.println("음료 종류는 탄산");
}
public void showColaName(String getColaName) {
colaName = String.valueOf(getColaName);
System.out.println("콜라 이름 ::: " + colaName);
}
}
package lec09;
public class PepsiCola extends Cola{
@Override
public void showColaProperty() {
super.showColaProperty();
}
@Override
public void showColaName(String getColaName) {
super.showColaName(getColaName);
}
public void whereIsPepsiCola() {
System.out.println("미국 뉴욕");
}
}
2. 인터페이스
클래스에 기능 목록을 제공
객체-인터페이스 간의 상속 관계를 통해 핵심적인 설계를 형성
표준화된 관리타입을 위해, 매서드를 관리하기 위해 사용되며 이는 다형성과도 연결
implements 키워드로 재정의 (오류 클릭 > add unimplement methods)
추상 메서드와 상수만을 포함하며 매서드는 반드시 재정의 해야함
implement 키워드와 콤마를 이용해 다중 구현이 가능
구현한 클래스를 상속 받아 재정의할 수도 있음
package lec10;
public interface ProgramInterface {
public void start();
public void stop();
public void run();
public void shutdown();
}
package lec11;
// 추상 클래스를 상속 받기 위해 extends 키워드 추가 후, add unemplmented class
public class ExtendsClass extends AbstractClass{
@Override
public void methodFirst() {
// TODO Auto-generated method stub
System.out.println("상속받은 클래스의 오버라이딩된 methodFirst");
}
@Override
public void methodSecond() {
System.out.println("상속받은 클래스에서 로직이 더 들어갑니다");
// TODO Auto-generated method stub
super.methodSecond();
}
@Override
public int methodThirds() {
int getData = super.methodThirds();
int addMoreData = 12;
return getData + addMoreData;
}
}
3. 추상 클래스
상속과 인터페이스를 모두 사용
인터페이스의 기능목록(추상 메서드) 와 상속의 공통 기능을 제공
상위 클래스의 기능을 extends 키워드로 하위 클래스에서 사용 또는 재정의
인터페이스와는 다르게 간단한 로직을 들고 있을 수 있다.
package lec11;
// 추상클래스: 구체적인 기능이 정의되지 않은 추상 메소드
// 보통 복잡한 메서드를 지원하지 않음. 간단한 로직과 공통된 로직을 구현.
// abstract 를 앞에 붙여 정의
public abstract class AbstractClass {
public abstract void methodFirst();
public void methodSecond() {
System.out.println("추상클래스 methodSecond");
methodFirst();
}
public int methodThirds() {
return 10 + 2;
}
}
package lec11;
// 추상 클래스를 상속 받기 위해 extends 키워드 추가 후, add unemplmented class
public class ExtendsClass extends AbstractClass{
@Override
public void methodFirst() {
// TODO Auto-generated method stub
System.out.println("상속받은 클래스의 오버라이딩된 methodFirst");
}
@Override
public void methodSecond() {
System.out.println("상속받은 클래스에서 로직이 더 들어갑니다");
// TODO Auto-generated method stub
super.methodSecond();
}
@Override
public int methodThirds() {
int getData = super.methodThirds();
int addMoreData = 12;
return getData + addMoreData;
}
}
4. 익명 클래스
객체 생성 후 바로 사용
스프링보단 모바일 단에서 많이 사용
package lec12;
// 익명클래스: 객체 생성 후 바로 사용
public class UnanyClassMainMethod {
public static void main(String[] args) {
// Runnable(): 일종의 쓰레드 관련 클래스
// new Runnable ctrl+space
Runnable action = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("Runnalbe 구동 중");
}
};
action.run();
}
}
5. 내부 클래스
클래스 내부에 클래스 정의
선언된 곳 외에는 잘 사용되지 않아야 함
거의 안쓰임
package lec12;
// 내부 클래스
public class InnerClassMake {
public void outMainMethod1() {
System.out.println("외부 클래스의 메소드 1");
}
class SampleInnerClass{
public void inMethod1() {
System.out.println("내부 클래스 메소드1");
}
}
}
package lec12;
// 내부 메서드 출력
public class InnerClassMainMethod {
public static void main(String[] args) {
InnerClassMake innerClassMake =new InnerClassMake();
InnerClassMake.SampleInnerClass sampleInnerClass = innerClassMake.new SampleInnerClass();
innerClassMake.outMainMethod1();
sampleInnerClass.inMethod1();
// "외부 클래스의 메소드 1" 출력
// "내부 클래스 메소드1" 출력
}
}
6. 기타 코멘트
1) ERP: 전사적 자원관리. 모든 부서의 수입과 비용 등을 계산하는 프로그램
ERP 개발의 경우 규모가 커질수록 복잡도를 줄이기 위해 유사 기능을 한 곳에서 관리
업무에 해당하는 부모 클래스 형태의 기능이 개발되면
파트별로 이를 상속받고 부서에 해당하는 DB 데이터를 끌고와 적용하는 식으로 개발함
2) PL(PM 관리) - PM(개발자 관리) - 개발자(기능 구현)
3) 스프링에서는 인터페이스를 이용해 공통된 기능목록을 제공
'백앤드 개발 > Java & Spring' 카테고리의 다른 글
| [Java] 컬렉션 프레임워크 실습 (0) | 2023.10.19 |
|---|---|
| [Java] 컬렉션 프레임워크 (1) | 2023.10.19 |
| [Java] Java 객체 지향 (0) | 2023.10.18 |
| [Java] 메소드와 변수 (1) | 2023.10.10 |
| [Java] JVM과 JRE (0) | 2023.10.10 |