20230621 _[14일차]_01. 인터페이스
[ 인터페이스 ] _ 자식클래스명 + 상속(extends to (부모클래스명)) + 인터페이스 (implements (인터페이스명))
abstract class Hero
> interface Do _ attack() , eat(), sleep()
> interface Fly _ fly()
> class Ironman _ Do , Fly
> class Hulk _ Do
> class Spiderman _ Do , Fly
인터페이스로 공통된 기능과, 개별적으로 필요한 기능을 구분해서 넣어줌
extends ~ 상속
implements ~ 구현
package interf;
// 인터페이스 만들어보기
// 2203-06-21 프로그래밍언어 활용
// 다중 상속 --- 상속... 단일 상속
// 인터페이스는 추상 메소드만 들어가요
abstract class Hero{ // 추상 클래스 : 인스턴스 X, 상속용도로만 존재
String name;
// 추상 메소드 : 상속 받는 자식들은 강제로 구현
}
// 인터페이스 : 각종 기능 : 추상 메소드들이 인터페이스 안에 들어갑니다.
interface Do{
// 상수도 가능
static final int NUMBER = 150;
public abstract void attack(); // 추상 메소드만 오니까
public abstract void eat();
public abstract void sleep();
}
interface Fly {
public abstract void fly(); // 날아다니는 기능을 다른 인터페이스로 제작했습니다.
}
class Ironman extends Hero implements Do, Fly { // 다중상속
// Hero상속만 받았습니다 + 인터페이스(구현)
@Override
public void attack() {}
@Override
public void eat() {}
@Override
public void sleep() {}
@Override
public void fly() {} // Hero상속만 받았습니다 + 인터페이스
}
class Hulk extends Hero implements Do {
@Override
public void attack() {}
@Override
public void eat() {}
@Override
public void sleep() {}
}
class Spiderman extends Hero implements Do, Fly {
@Override
public void attack() {}
@Override
public void eat() {}
@Override
public void sleep() {}
@Override
public void fly() {}
}
public class Inter01 {
public static void main(String[] args) {
Ironman ironman = new Ironman();
ironman.fly();
Hulk hulk = new Hulk();
// hulk.fly(); 실행안됨. fly메소드 없음
Spiderman spiderman = new Spiderman();
spiderman.fly();
}
}
** 주의 **
인터페이스 내에서 선언된 메서드에 파라미터가 존재하면
내려받은 자식클래스 내 같은 메서드에서 파라미터 존재해야함! (파라미터 유무 맞춰주기)
(달라지면 자식만 가지고 있는 메서드인 오버로드가 됨)
[ 인터페이스 ]
인터페이스는 왜 생겼을까?
어떻게 써야 할까?
특징은 무엇인가?
인터페이스란?
추상 클래스 : 추상 메소드가 하나라도 있거나 class 앞에 abstract를 붙인 것
인스턴스 생성을 위해 존재하는 것이 아니라
상속에서 부모 용도로 존재하기 위해서 만들어 준 것.
추상 메소드 : 바디({})가 없는 메소드 = 구현부가 없습니다.
리턴 타입 앞에 abstract를 붙여줍니다.
public abstract void print();
자식 클래스에서 오버라이드 해야 합니다.
인터페이스 : 상수 + 추상 메소드
다중 상속이 가능합니다.
외부와 연결하는 통로역할을 합니다.
[ 인터페이스 생성 ]
package interf;
public class Inter02 {
public static void main(String[] args) {
// 인터페이스 생성하고 자식클래스 생성 후 여기에서 실행만 할 예정
}
}
클래스 파일 만들때처럼 New -> Interface 생성 클릭.
( 인터페이스 RemoteControl 생성 )
package interf;
public interface RemoteControl { // class처럼 생성됨
// 상수
public int MAX_VOLUME = 10;
public int MIN_VOLUME = 0;
// 추상 메소드
public void turnOn();
public void turnOff();
public void setVolume(int volum); // int 파라미터 받음
}
( 클래스 Television 생성 & RemoteControl 인터페이스 연결 )
package jun21;
public class Television implements RemoteControl { // 인터페이스와 연결
// Add unimplemented methods 선택해주면 메소드 자동 오버라이드
private int vol;
@Override
public void turnON() {
System.out.println("TV를 켭니다.");
}
@Override
public void turnOff() {
System.out.println("TV를 끕니다.");
}
@Override
public void setVolume(int volum) {
if(vol > RemoteControl.MAX_VOLUME) {
this.vol = RemoteControl.MAX_VOLUME;
} else {
this.vol = volum;
}
System.out.println("현재볼륨 : " + this.vol);
}
}
( 클래스 Audil 생성 & RemoteControl 인터페이스 연결 )
package jun21;
public class Audio implements RemoteControl {
int vol;
@Override
public void turnON() {
System.out.println("오디오를 켭니다.");
}
@Override
public void turnOff() {
System.out.println("오디오를 끕니다.");
}
@Override
public void setVolume(int volume) {
if(vol > RemoteControl.MAX_VOLUME) {
this.vol = RemoteControl.MAX_VOLUME;
} else if (vol < RemoteControl.MIN_VOLUME){
this.vol = RemoteControl.MIN_VOLUME;
} else {
this.vol = volume;
}
System.out.println("현재 Audio 볼륨 : " + this.vol);
}
}
package jun21;
public class inter02 {
public static void main(String[] args) {
Television tv = new Television();
Audio audio = new Audio();
tv.turnOn(); // TV를 켭니다.
audio.turnOn(); // 오디오를 켭니다.
tv.setVolume(20); // 현재 TV 볼륨 : 10
tv.setVolume(10); // 현재 TV 볼륨 : 8
audio.setVolume(5); // 현재 Audio 볼륨 : 5
audio.setVolume(-1); // 현재 Audio 볼륨 : 0
RemoteControl rcT = new Audio();
RemoteControl rcA = new Television();
rcT.turnOff(); // TV를 끕니다.
rcA.turnOff(); // 오디오를 끕니다.
}
}
Television 과 Audio 가 RemoteControl(인터페이스) 아래에 있기 때문에
RemoteControl rcT = new Audio();
RemoteControl rcA = new Television();
와 같이 객체생성 가능. (상속관계)
[ project 파일 zip파일로 추출 ]
원하는 project 파일 선택후 Browse.. 에서 원하는 위치에 저장. => zip파일로 저장
반대의 경우는 import _ 캡쳐..어디있지..????
[ jar파일로 exe 파일만드는 방법 how to make exe file to jar file ]
https://aljjabaegi.tistory.com/446
[launch4j] jar파일로 exe 파일만드는 방법 how to make exe file to jar file
[launch4j] jar파일로 exe 파일만드는 방법 how to make exe file to jar file jar 파일로 배포를 하다 보면은 batch 파일 생성시에 몇가지 문제점이 발생합니다. 예를 들어 window기반에서 실행은 경로로 하는 것
aljjabaegi.tistory.com
[ 관계형 데이터베이스란? ]
https://cloud.google.com/learn/what-is-a-relational-database?hl=ko
관계형 데이터베이스(RDBMS)란 무엇인가요? | Google Cloud
관계형 데이터베이스의 작동 방식, 관계형 데이터를 사용하여 조직 데이터를 저장하는 경우의 이점, 비관계형 데이터베이스의 비교에 대해 알아봅니다.
cloud.google.com
[ 클래스간 관계비교 ]
package isHas;
// is a
// has a
class Human{
String name;
int age;
int sex;
}
class Student extends Human {
int number;
String major;
}
// 학생은 사람입니다. (상속관계)
class Gun {
String name;
int shot;
}
class Police{
Gun gun; // Gun 클래스를 가져와 Police 클래스 내부에서 객체생성.
} // 내부 구성요소로 사용.
// 경찰이 총을 가지고 있습니다.
public class IsHas {
public static void main(String[] args) {
}
}
[ 객체지향 설계원칙 ] _ SOLID
https://dev-coco.tistory.com/142
[Java] 객체지향 설계 원칙 SOLID 알아보기
객체지향 프로그래밍 설계시 좋은 객체지향 설계를 위한 SOLID 라고 불리는 5가지 원칙이 있다. SOLID 원칙은 소프트웨어를 설계함에 있어 이해하기 쉽고, 유연하며, 유지보수 및 확장이 편하다는
dev-coco.tistory.com