오늘도 다시 시작되는 주간!!!!!!
모의고사를 풀어보아요!!!!!
지난주에 내일배움 캠프에서 제공되는 강의는 다 들어서
이번주중에 한번 다시 훑듯이 들어볼 예정이고
HTML을 당장 본캠프 들어가면 써야한데서 처음부터 복습을 하며
자바에 힘을 줘서 집중해보려한다!!!!
지난주 얄코님의 강의를 이어서 들어볼예정이다
잘 모르는 계념이다보니 확실하게 알고 가는게 중요한 부분이라 조금 느리지만 확실하게!!!
YalcoChicken
을 부모로 하는 자식 클래스 YalcoChickenDT
만들기extends
연산자 사용(상속한다는 말을 가짐)dtStore1
인스턴스 살펴볼 것protected
필드들을 private
으로 바꿔 볼 것public class ToggleButton extends Button {
private boolean on;
public ToggleButton(String print, boolean on) {
super(print);
this.on = on;
}
@Override
public void func () {
super.func(); // 💡 부모에서 정의한 메소드 호출
this.on = !this.on;
System.out.println(
"대문자입력: " + (this.on ? "ON" : "OFF")
);
}
}
위의 내용이 잘 이해가 되지 않았다.
super
부모의 생성자/메소드 호출super
를 사용해서 부모의 생성자를 먼저 호출super
로 시작해야 함super.
를 붙임super
는 부모 클래스의 인스턴스를 가리킴this
가 해당 클래스의 인스턴스를 가리키듯…@Override
어노테이션
⭐️ 부모/자식 관계는 범주의 포함 관계로 이어짐
// 💡 가능 - 자식 클래스는 부모 클래스에 속함
Button button1 = new Button("Enter");
Button button2 = new ShutDownButton();
Button button3 = new ToggleButton("CapsLock", true);
// ⚠️ 불가
ShutDownButton button4 = new Button("Enter");
ToggleButton button5 = new ShutDownButton();
// ⭐️ 편의 : 모두 Button이란 범주로 묶어 배열 등에서 사용 가능
Button[] buttons = {
new Button("Space"),
new ToggleButton("NumLock", false),
new ShutDownButton()
};
for (Button button : buttons) {
// ⭐️ 모든 Button들은 func 메소드를 가지므로
button.func();
}
instanceof
연산자 Button button = new Button("버튼");
ToggleButton toggleButton = new ToggleButton("토글", true);
ShutDownButton shutDownButton = new ShutDownButton();
// true
boolean typeCheck1 = button instanceof Button;
boolean typeCheck2 = toggleButton instanceof Button;
boolean typeCheck3 = shutDownButton instanceof Button;
// false
boolean typeCheck4 = button instanceof ShutDownButton;
boolean typeCheck5 = button instanceof ToggleButton;
// ⚠️ 컴파일 에러
boolean typeCheck6 = toggleButton instanceof ShutDownButton;
boolean typeCheck7 = shutDownButton instanceof ToggleButton;
YalcoChicken ycStores[] = {
new YalcoChicken(3, "판교"),
new YalcoChicken(17, "강남"),
new YalcoChickenDT(108, "철원"),
};
for (YalcoChicken store : ycStores) {
if (store instanceof YalcoChickenDT) {
// ⭐️ 자식 클래스의 기능을 사용하려면 명시적 타입 변환
((YalcoChickenDT) store).takeDTOrder();
} else {
store.takeHallOrder();
명시적 타입 중요....벗 어렵...
Object 클래스 - 모든 클래스의 최고 조상🌟중요!!!!!!!(단군할아부지)
import Sec05.chap01.ex03.YalcoChicken;
import Sec05.chap05.ex02.Button;
import Sec05.chap05.ex02.ShutDownButton;
import Sec05.chap05.ex03.FireSlime;
public class Main {
public static void main(String[] args) {
Object obj1 = new Object();
// ⭐️ IDE의 안내대로 다른 패키지의 클래스 임포트
// 💡 해당 클래스의 생성자가 public 이어야 함
Object obj2 = new YalcoChicken(3, "판교");
Object obj3 = new ShutDownButton();
Object obj4 = new FireSlime();
// 원시 자료형들도 Object의 인스턴스로... - 이후 자세히 배울 것
Object obj5 = true;
Object obj6 = 1;
Object obj7 = "Hello";
// ⭐️ 모든 자료형을 포함할 수 있는 배열
Object[] objs = {
1, false, 3.45, '가', "안녕하세요", new Button("Space")
};
for (Object obj : objs) {
System.out.println(obj);
}
}
}
이런식으로 작성을 해도는 되지만 유동성이 좋은 다른 언어들은 몰라도 Java는 이런식으로 하다간 알수없는 오류에 막혀서 암울해질수 있기에 하나하나 정확한 명시를 해주는것이 좋다.
public abstract class YalcoGroup {
protected static final String CREED = "우리의 %s 얄팍하다";
// 💡 클래스 메소드는 abstract 불가
// abstract static String getCreed ();
protected final int no;
protected final String name;
public YalcoGroup(int no, String name) {
this.no = no;
this.name = name;
}
public String intro () {
return "%d호 %s점입니다.".formatted(no, name);
}
// 이후 다른 패키지에서의 실습을 위해 public으로
public abstract void takeOrder ();
}
abstract
클래스abstract
메소드🔴 : 추상 클래스 / 🔷 : 인터페이스
추상 클래스는 계열 같은것(족보)
인터페이스는 자격증같은것!!!!(아이템)
추상 클래스 | 인터페이스 | |
---|---|---|
기본 개념 | 물려 받는 것 (혈통/가문/계열) | 장착하는 것 (학위/자격증) |
다중 적용 | 불가 (모회사는 하나 뿐) | 가능 (학위는 여럿 딸 수 있음) |
상속관계에 의한 제한 | 있음 | 없음 |
생성자 | 가짐 | 가지지 않음 |
메소드 | 구상, 추상 모두 가능 | 추상 메소드 (abstract 안 붙여도 됨), default 구상 메소드, 클래스 메소드 |
필드 | 모두 가능 | 상수만 가능 (final 명시 불필요) |
적용 연산자 | extends | implements |
public static final
public abstract
default
구상 메소드default
로 구상 메소드를 넣을 수 있도록 한 이유
이런식으로 실행을 하면 각자의 값을 공유하지 않고 나온다.
그래서 공유하게 하려면 Tab 클래스와 Main 클래스에 변화를 주어서
밑의 사진처럼 하나하나 대입할수있게 바꾸어준다.
이러한 방법은 번거로움이 있고 협업자간의 공유가 되어있지 않으면 큰일.....
이젠 싱글턴을 이용하여 변화시켜 보자
굉장히 많이 쓰이는 패턴이고 유용한 패턴이다.
어렵고 복잡하다.
그래서 다시금 기본이 중요함을 느낀다.
여러 문장들 문법들 그런것들이 많이 부족한다고 느껴진다.
다시금 열심히 해야겠다고 다짐한다.
자바에 집중을하다보니 머리가 깨질듯하여 HTML로 도망을 와서 강의를 다시금 들으며 복습한다.
완전 기초적인 헤드들의 내용을 알아볼겸 오늘의 HTML을 했다!!!!!!!!!!!!!!
와 뭔가....힐링되는 느낌....
직관적으로 내가 뭘 바꿔야하는지가 보이니 참...좋으다....