🐯[TIL] 250613-010

byoΒ·2025λ…„ 6μ›” 13일

πŸ’« JAVA

βœ”οΈ Acess-Modifier

public, protected, default, private

public λͺ¨λ‘ μ ‘κ·Ό κ°€λŠ₯
private μžκΈ°μžμ‹ λ§Œ μ ‘κ·Όκ°€λŠ₯
protected 같은 νŒ¨ν‚€μ§€, νŒ¨λ°€λ¦¬μ—μ„œ μ ‘κ·Ό κ°€λŠ₯ (family, package)
default 같은 νŒ¨ν‚€μ§€μ—μ„œ μ ‘κ·Όκ°€λŠ₯ (package)


βœ… public

public μ–΄λ””μ„œλ‚˜ import만 ν•˜λ©΄ μ ‘κ·Όκ°€λŠ₯ν•œ public

πŸ”΄πŸŸ‘πŸŸ’

1️⃣self : μ ‘κ·Όκ°€λŠ₯ 🟒
public class Main {
    πŸ’‘publicπŸ’‘ static String testField = "testField";
    
    public static void main(String[] args) { 
        System.out.println(new Main().testField); 
    }
}
2️⃣same package : μ ‘κ·Όκ°€λŠ₯ 🟒
public class SamePackage {
    public SamePackage() {
        System.out.println(Main.testField);
    }
}
3️⃣other package-child : μ ‘κ·Όκ°€λŠ₯ 🟒
public class Child extends Main {
    public Child() {
        System.out.println(Main.testField);
    }
}
4️⃣other package : μ ‘κ·Όκ°€λŠ₯ 🟒
import Main;
public class OtherPackage {
    public OtherPackage() {
        System.out.println(Main.testField);
    }
}

βœ… protected

protected λ‹€λ₯Έ νŒ¨ν‚€μ§€λ‚˜ ν΄λ”λŠ” λ°°μ²™ν•˜μ§€λ§Œ κ·Έλž˜λ„ μžμ‹μ€ μ±™κΈ°λŠ” protected

πŸ”΄πŸŸ‘πŸŸ’

1️⃣self : μ ‘κ·Όκ°€λŠ₯ 🟒
public class Main { 
    πŸ’‘protectedπŸ’‘ static String testField = "testField";
    public static void main(String[] args) {
        System.out.println(new Main().testField);
    }
}
2️⃣same package : μ ‘κ·Όκ°€λŠ₯ 🟒
public class SamePackage {
    public SamePackage() {
        System.out.println(Main.testField);
    }
}
3️⃣other package-child : μ ‘κ·Όκ°€λŠ₯ 🟒
public class Child extends Main {
    public Child() {
        System.out.println(Main.testField);
    }
}
4️⃣other package : μ ‘κ·ΌλΆˆκ°€ ❌
import Main;
public class OtherPackage {
    public OtherPackage() {
        System.out.println(Main.testField);
    }
}

βœ… default

default 기본적으둜 같은 νŒ¨ν‚€μ§€ λ‚΄ μ ‘κ·Όλ§Œ ν—ˆμš©ν•˜λŠ” default

πŸ”΄πŸŸ‘πŸŸ’

1️⃣self : μ ‘κ·Όκ°€λŠ₯ 🟒
public class Main {
    πŸ’‘defaultπŸ’‘ static String testField = "testField";
    public static void main(String[] args) {
        System.out.println(new Main().testField);
    }
}
2️⃣same package : μ ‘κ·Όκ°€λŠ₯ 🟒
public class SamePackage {
    public SamePackage() {
        System.out.println(Main.testField);
    }
}
3️⃣other package-child : μ ‘κ·ΌλΆˆκ°€ ❌
public class Child extends Main {
    public Child() {
        System.out.println(Main.testField);
    }
}
4️⃣other package : μ ‘κ·ΌλΆˆκ°€ ❌
import Main;
public class OtherPackage {
    public OtherPackage() {
        System.out.println(Main.testField);
    }
}

βœ… private

private μžκΈ°μžμ‹ λ§Œ μ ‘κ·Όκ°€λŠ₯ν•œ private

πŸ”΄πŸŸ‘πŸŸ’

1️⃣self : μ ‘κ·Όκ°€λŠ₯ 🟒
public class Main {
    πŸ’‘privateπŸ’‘ static String testField = "publicField";
    public static void main(String[] args) {
        System.out.println(new Main().testField);
    }
}
2️⃣same package : μ ‘κ·ΌλΆˆκ°€ ❌
public class SamePackage {
    public SamePackage() {
        System.out.println(Main.testField);
    }
}
3️⃣other package-child : μ ‘κ·ΌλΆˆκ°€ ❌
public class Child extends Main {
    public Child() {
        System.out.println(Main.testField);
    }
}
4️⃣other package : μ ‘κ·ΌλΆˆκ°€ ❌
import Main;
public class OtherPackage {
    public OtherPackage() {
        System.out.println(Main.testField);
    }
}

βœ”οΈ getter/setter

객체의 데이터λ₯Ό μ•ˆμ „ν•˜κ²Œ 읽고 μˆ˜μ •ν•˜κΈ° μœ„ν•œ μΊ‘μŠν™” 도ꡬ

βœ… getter, setterλ₯Ό μ“°μ§€ μ•Šκ³  직접 κ°€μ Έλ‹€ μ“°λŠ”κ²½μš°

class Person {
    public String name;
}
public class Main {
    public static void main(String[] args) {
        Person p = new Person();
        p.name = "John";
        System.out.println(p.name);
    }
}

βœ… getter setter μ‚¬μš©

πŸ”΄πŸŸ‘πŸŸ’

package gettersetter;
class Person {
    private String name;
    πŸ’‘getter
    public String getName() {
        return name;
    }
    πŸ’‘setter
    public void setName(String name) {
        this.name = name;
    }
}

public class Main {
    public static void main(String[] args) {
        Person p = new Person();
        p.setName("John");
        System.out.println(p.getName());
    }
}

πŸ’‘getter만 μ‚¬μš©ν•˜λ©΄ read-only λ‘œλ„ λ§Œλ“€ 수 μžˆλ‹€.


mvcμ„€λͺ…
modelDB의 ꡬ쑰가 μžλ°” μ½”λ“œλ‘œ λ˜μ–΄μžˆλ‹€
viewν™”λ©΄
controllerμ„œλΉ„μŠ€

βœ”οΈ Polymorphism

λ‹€ν˜•μ„±
λΆ€λͺ¨ 클래슀 νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ‘œ μžμ‹ 객체λ₯Ό 가리킬 수 있음
μ‹€ν–‰ μ‹œμ μ— μ‹€μ œ 객체에 따라 λ‹€λ₯Έ 객체가 할당됨 (동적바인딩)

πŸ€”β”λ‹€ν˜•μ„± μ“°λŠ” μ΄μœ κ°€ 뭘까?
πŸ’‘λ°°μ—΄λ‘œ λ¬Άμ–΄μ„œ 곡톡 κΈ°λŠ₯을 μ‚¬μš©ν•˜κΈ° νŽΈν•˜κ²Œλ” ν•˜λ €κ³ 

πŸ”΄πŸŸ‘πŸŸ’

package polimorphism;
class Animal {
    public void makeSound() {
        System.out.println("animal sound");
    }
}
class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("bark");
    }
}
class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("meow");
    }
}
class Hamster extends Animal {
    @Override
    public void makeSound() {
        System.out.println("squeak");
    }
}
public class Main {
    public static void main(String[] args) {
       πŸ’‘Type은 Animal, λ©”μ†Œλ“œλŠ” 각 λ™λ¬Όμ˜ λ©”μ†Œλ“œκ°€ 호좜됨 λ©”μ†Œλ“œκ°€ 호좜됨
        Animal dog = new Dog();
        Animal cat = new Cat();
        Animal hamster = new Hamster();
        dog.makeSound();
        cat.makeSound();
        hamster.makeSound();
    }
}

▢️
bark
meow
squeak

πŸ€”β”λ‹€μ€‘μƒμ† 문제

πŸ”΄πŸŸ‘πŸŸ’

class Dog {
	public void makeSound() {
		System.out.println("멍멍");
    }
}
class Cat {
	public void makeSound() {
		System.out.println("μ•Όμ˜Ή");
    }
}
class Kimera extends Dog, Cat {
	// πŸ’‘kimera.makeSound(); ν•˜λ©΄ μ–΄λ–€ λ©”μ†Œλ“œκ°€ ν˜ΈμΆœλ˜μ–΄μ•Ό ν•˜λŠ”κ°€???
}

βœ”οΈ abstract class

좔상 클래슀 = 섀계 ν…œν”Œλ¦Ώ. μ•½κ°„ κ΅¬ν˜„λœ 섀계도 같은? μΈν„°νŽ˜μ΄μŠ€μ™€ 클래슀의 쀑간 단계닀.

좔상 ν΄λž˜μŠ€λŠ” μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 수 μ—†λ‹€.
상속을 톡해 μžμ‹ ν΄λž˜μŠ€κ°€ μ™„μ„±ν•œλ‹€.

μΈν„°νŽ˜μ΄μŠ€μ™€ 달리,
ν•„λ“œ 속성을 κ°€μ§ˆ 수 μžˆλ‹€.
ν•˜λ‚˜ μ΄μƒμ˜ 좔상 λ©”μ†Œλ“œλ₯Ό ν¬ν•¨ν•œλ‹€.
일반 λ©”μ†Œλ“œλ„ 포함이 κ°€λŠ₯ν•˜λ‹€.
닀쀑 상속이 λΆˆκ°€λŠ₯ν•˜λ‹€.

βœ… Quiz! Shape 배열에 μ—¬λŸ¬ λ„ν˜• λ„£κΈ°

πŸ”΄πŸŸ‘πŸŸ’

abstract static class Shape {
    String name;
    public String getName() {
        return name;
    }
    // πŸ’‘λ„ν˜•μ˜ 넓이 : λ„ν˜•λ§ˆλ‹€ λ‹€λ₯΄κ²Œ κ΅¬ν˜„ν•΄μ•Ό ν•˜λŠ” λΆ€λΆ„μ΄λ―€λ‘œ 좔상 λ©”μ†Œλ“œλ‘œ λ‘”λ‹€.
    //   좔상 λ©”μ†Œλ“œλ₯Ό ν¬ν•¨ν•˜κΈ° λ•Œλ¬Έμ— 좔상 ν΄λž˜μŠ€κ°€ λœλ‹€.
    abstract double area(); 
}
static class Rectangle extends Shape {
    private String name = "Rectangle";
    private int x;
    int y;
    public Rectangle(int x, int y) {
        this.x = x;
        this.y = y;
    }
    public String getName() {
        return name;
    }
    public double area() {
        return x * y;
    }
}
static class Circle extends Shape {
    private String name = "Circle";
    int r;
    public Circle(int r) {
        this.r = r;
    }
    public String getName() {
        return name;
    }
    public double area() {
        return Math.PI * r * r;
    }
}
public class Main {
    public static void main(String[] args) {
        Shape r = new Rectangle(2, 3);
        Shape c = new Circle(5);
        Shape[] shapes = {r, c};
        for (Shape s : shapes) {
            System.out.println(s.getName() + " 의 면적은 " +  s.area() + "μž…λ‹ˆλ‹€.");
        }
    }
}

βœ”οΈ interface

μΈν„°νŽ˜μ΄μŠ€ = 섀계도

ν΄λž˜μŠ€κ°€ 따라야 ν•  섀계도.
κ΅¬ν˜„μ€ ν΄λž˜μŠ€κ°€ μž‘μ„±ν•œλ‹€.

ν΄λž˜μŠ€μ™€ 달리,
ν•„λ“œ 없이, 좔상 λ©”μ†Œλ“œλ§Œ μ •μ˜ν•œλ‹€.
implemet ν•œ ν΄λž˜μŠ€λŠ” λ°˜λ“œμ‹œ λͺ¨λ“  좔상 λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€.
μžλ°”μ—μ„œλŠ” 닀쀑 κ΅¬ν˜„μ΄ κ°€λŠ₯ν•˜λ‹€.

πŸ”΄πŸŸ‘πŸŸ’

abstract class Animal {
    abstract void makeSound();
    public void sleep() {
        System.out.println("μžλŠ”μ€‘...");
    }
}
class Dog extends Animal {
    @Override
    void makeSound() {
        System.out.println("멍멍");
    }
}
interface flyable {
    void fly();
}
interface layEggs {
    void layEggs();
}
// πŸ’‘ μžλ°”λŠ” 닀쀑 extendsλŠ” λΆˆκ°€, 닀쀑 implememtsλŠ” κ°€λŠ₯ν•˜λ‹€.
class Bird extends Animal implements flyable, layEggs { 
    @Override
    void makeSound() {
        System.out.println("μ§Ήμ§Ή");
    }
    @Override
    public void fly() {
        System.out.println("λ‚ κΈ°");
    }
    @Override
    public void layEggs() {
        System.out.println("μ•Œ λ‚³κΈ°");
    }
}
public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog(); // πŸ’‘ μΆ”μƒν΄λž˜μŠ€λŠ” μΈμŠ€ν„΄μŠ€ν™”κ°€ κ°€λŠ₯ν•˜λ‹€.
        dog.makeSound();
        dog.sleep();
        Animal bird = new Bird();
        bird.makeSound();
        bird.sleep();
        // πŸ’‘ bird μΈμŠ€ν„΄μŠ€μ˜ ν΄λž˜μŠ€κ°€ Animal이기 λ•Œλ¬Έμ— Animalμ—λŠ” fly, layEggs λ©”μ†Œλ“œκ°€ μ—†μ–΄μ„œ Bird 클래슀둜 λ‹€μš΄μΊμŠ€νŒ… μ‹œν‚¨λ‹€μŒ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
        if (bird instanceof Bird) { 
            Bird bird2 = (Bird) bird;
            bird2.fly();
            bird2.layEggs();
        }
    }
}

πŸ” 1-6. μš”μ•½

클래슀 vs 좔상 클래슀 vs μΈν„°νŽ˜μ΄μŠ€

κ΅¬λΆ„μΌλ°˜ ν΄λž˜μŠ€μΆ”μƒ ν΄λž˜μŠ€μΈν„°νŽ˜μ΄μŠ€
상속 ν‚€μ›Œλ“œextendsextendsimplements
instance μƒμ„±βœ…κ°€λŠ₯βŒλΆˆκ°€βŒλΆˆκ°€
ν•„λ“œ(λ³€μˆ˜)βœ…κ°€λŠ₯βœ…κ°€λŠ₯public static final만 κ°€λŠ₯
μƒμ„±μžβœ…κ°€λŠ₯βœ…κ°€λŠ₯ (ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ μƒμ„±μžλ‘œ μƒμœ„ 클래슀의 ν•„λ“œ μ΄ˆκΈ°ν™” κ°€λŠ₯)βŒλΆˆκ°€
abstract λ©”μ†Œλ“œμ„ νƒμ  포함1개 이상전뢀 abstract (Java 8 이전)
일반 λ©”μ†Œλ“œβœ…κ°€λŠ₯βœ…κ°€λŠ₯Java 8 이후 default둜 κ°€λŠ₯ (ν•˜μ§€λ§Œ 거의 λΆˆκ°€λŠ₯)
닀쀑 상속/κ΅¬ν˜„βŒλΆˆκ°€βŒλΆˆκ°€βœ…κ°€λŠ₯
μ ‘κ·Όμ œμ–΄μžμ œν•œ μ—†μŒμ œν•œ μ—†μŒμ „λΆ€ public
μ‚¬μš© μš©λ„μ½”λ“œ μž¬μ‚¬μš©κ³΅ν†΅ μ½”λ“œ 제곡 + μΆ”μƒλ©”μ„œλ“œμ˜ λ‚΄λΆ€ μ½”λ“œ λ‹€μ–‘μ„±κΈ°λŠ₯ κ΅¬ν˜„ κ°•μ œ

πŸ’« CS

βœ”οΈ CPU λͺ¨λΈμ˜ 기초 이해

βœ… CPU의 μ£Όμš” κ΅¬μ„±μš”μ†Œ

ALU μ‚°μˆ  및 논리 μ—°μ‚° 처리

μ œμ–΄ μœ λ‹› λͺ…λ Ήμ–΄ 인좜, 해독, μ‹€ν–‰ 흐름 μ œμ–΄

λ ˆμ§€μŠ€ν„° μ΄ˆκ³ μ† μž„μ‹œ μ €μž₯μ†Œ

ν”Œλž˜κ·Έ λ ˆμ§€μŠ€ν„° μ—°μ‚° κ²°κ³Ό μƒνƒœλ₯Ό ν‘œμ‹œ

βœ… λͺ…λ Ήμ–΄ 싸이클

Fetch λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό λ©”λͺ¨λ¦¬μ—μ„œ 읽음
->
Decode 해석
->
Execute ALUλ‚˜ λ ˆμ§€μŠ€ν„°λ₯Ό μ‚¬μš©ν•΄ μ‹€μ œ μˆ˜ν–‰

βœ… μžλ°”λ‘œ κ΅¬ν˜„ν•˜λŠ” CPU

profile
πŸ—‚οΈ hamstern

0개의 λŒ“κΈ€