λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Today I Learned(TIL)/슀파λ₯΄νƒ€ 내일배움캠프

ν”„λ‘œκ·Έλž˜λ° 기초_Day 3

by carrot0911 2024. 11. 14.

였늘 ν•œ 것

  • μ•Œκ³ λ¦¬μ¦˜ 문제(SQL, μžλ°”) 1문제 풀이 & λΈ”λ‘œκ·Έ 정리
  • Java 기초 μ„Έμ…˜ λ“£κΈ°
  • 컀리어 μ½”μΉ­ 상담
  • Java 문법 μ’…ν•©λ°˜_3μ£Όμ°¨ λ“£κΈ°

배운 λ‚΄μš© 정리

섀계도(클래슀)

객체

  • 세상에 μ‘΄μž¬ν•˜λŠ” 물체, 식별이 κ°€λŠ₯ν•œ 것을 μ˜λ―Έν•œλ‹€.
  • ex) μžλ™μ°¨, λ„μ„œκ΄€, 계산기... κ°•μ˜, 배달 μ£Όλ¬Έ, μš΄λ™
  • κ°μ²΄λŠ” 속성(νŠΉμ§•)κ³Ό ν–‰μœ„(행동)둜 κ΅¬μ„±λ˜μ–΄ μžˆλ‹€.
    • μžλ™μ°¨μ˜ νšŒμ‚¬, λͺ¨λΈ, 색상, 가격 - 속성
    • μžλ™μ°¨μ˜ 가속, 브레이크, κΈ°μ–΄ 변속 - ν–‰μœ„
  • Javaμ—μ„œλŠ” 속성과 ν–‰μœ„λ₯Ό ν•„λ“œμ™€ λ©”μ„œλ“œλ‘œ μ •μ˜ν•˜μ—¬ κ΅¬ν˜„ν•  수 μžˆλ‹€.
  • 객체 λͺ¨λΈλ§ : ν˜„μ‹€ 세계에 μžˆλŠ” 객체λ₯Ό μ†Œν”„νŠΈμ›¨μ–΄μ˜ 객체둜 μ„€κ³„ν•˜λŠ” 것

객체 κ°„μ˜ ν˜‘λ ₯

  • ν˜„μ‹€ μ„Έκ³„μ—μ„œ μ‚¬λžŒμ΄λΌλŠ” 객체와 μžλ™μ°¨λΌλŠ” κ°μ²΄λŠ” μ„œλ‘œ ν–‰μœ„λ₯Ό 톡해 μƒν˜Έμž‘μš©μ„ ν•˜λ©° ν˜‘λ ₯ν•  수 μžˆλ‹€.
  • Javaμ—μ„œλŠ” ν–‰μœ„λ₯Ό μ •μ˜ν•˜λŠ” λ©”μ„œλ“œλ₯Ό 톡해 이루어진닀.
    객체듀끼리 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœμ‹œν‚€λ©΄μ„œ μƒν˜Έμž‘μš©ν•œλ‹€.
    • μ‚¬λžŒ κ°μ²΄λŠ” μžλ™μ°¨ 객체가 가지고 μžˆλŠ” 가속 νŽ˜λ‹¬μ΄λΌλŠ” λ©”μ„œλ“œ gasPedal( ); λ₯Ό ν˜ΈμΆœν•œλ‹€.
      • μžλ™μ°¨ κ°μ²΄λŠ” 이에 λ°˜μ‘ν•˜μ—¬ 속도 μ†μ„±μ˜ 값을 μ¦κ°€μ‹œν‚¨λ‹€.
    • μ‚¬λžŒ κ°μ²΄λŠ” μžλ™μ°¨ 객체가 가지고 μžˆλŠ” 브레이크 νŽ˜λ‹¬μ΄λΌλŠ” λ©”μ„œλ“œ brakePedal( ); λ₯Ό ν˜ΈμΆœν•œλ‹€.
      • μžλ™μ°¨ κ°μ²΄λŠ” 이에 λ°˜μ‘ν•˜μ—¬ 속도 μ†μ„±μ˜ 값을 κ°μ†Œμ‹œν‚¨λ‹€.
  • λ©”μ„œλ“œλ₯Ό 톡해 데이터λ₯Ό μ£Όκ³  받을 μˆ˜λ„ μžˆλ‹€.

  • μ‚¬λžŒ κ°μ²΄λŠ” gasPedal(50); 처럼 λ§€κ°œλ³€μˆ˜ μ•ˆμ— 50μ΄λΌλŠ” λ§€κ°œκ°’μ„ λ„£μ–΄ ν˜ΈμΆœν•œλ‹€.
    • μžλ™μ°¨ κ°μ²΄λŠ” ν•΄λ‹Ήν•˜λŠ” 50의 데이터λ₯Ό 전달받아 μžλ™μ°¨ 객체의 속성인 μ†λ„μ˜ 값을 50으둜 λ§Œλ“ λ‹€.
βœ”οΈ μ°Έκ³  - λ§€κ°œκ°’κ³Ό λ§€κ°œλ³€μˆ˜λŠ” 같은 것인가?

NOPE! λ‘˜μ€ λ‹€λ₯Έ κ°œλ…μ΄λ‹€.
λ§€κ°œλ³€μˆ˜μ˜ κ΄„ν˜Έ μ•ˆμ— λ§€κ°œκ°’μ„ λ„£λŠ” 것이라고 μƒκ°ν•˜λ©΄ λœλ‹€.

객체 κ°„μ˜ 관계

  • μ‚¬μš© 관계
  • 포함 관계
  • 상속 관계
    • ν•˜μœ„ κ°μ²΄μ—μ„œ κ³΅ν†΅λœ κΈ°κ³„μ‹œμŠ€ν…œμ„ μ΄μš©ν•œλ‹€κ³  κ°€μ •ν•˜λ©΄ κΈ°κ³„μ‹œμŠ€ν…œ 객체λ₯Ό 생성 ν›„ λ‚΄λ €λ°›μ•„μ„œ μ‚¬μš©ν•œλ‹€κ³  μƒκ°ν•˜λ©΄ λœλ‹€.

객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ νŠΉμ§•

  • μΊ‘μŠν™” → λ³΄μ•ˆ λ•Œλ¬Έμ— μ€‘μš”ν•˜λ‹€.
    • 속성(ν•„λ“œ)와 ν–‰μœ„(λ©”μ„œλ“œ)λ₯Ό ν•˜λ‚˜λ‘œ λ¬Άμ–΄ 객체(=encapsulation)둜 λ§Œλ“  ν›„ μ‹€μ œ λ‚΄λΆ€ κ΅¬ν˜„ λ‚΄μš©μ€ μ™ΈλΆ€μ—μ„œ μ•Œ 수 μ—†κ²Œ κ°μΆ”λŠ” 것을 μ˜λ―Έν•œλ‹€.
    • ν•„μš”ν•˜μ§€ μ•Šμ€ 것을 ꡳ이 μ™ΈλΆ€λ‘œ λ…ΈμΆœμ‹œν‚€μ§€ μ•Šμ•„μ„œ ν˜Όλž€μ„ μ€„μ΄λŠ” 역할이 κ°€λŠ₯ν•˜λ‹€.
    • μΊ‘μŠν™”ν•˜μ—¬ μˆ©κΈ°λŠ” μ΄μœ λŠ” μ™ΈλΆ€ κ°μ²΄μ—μ„œ ν•΄λ‹Ή ν•„λ“œμ™€ λ©”μ„œλ“œλ₯Ό 잘λͺ» μ‚¬μš©ν•˜μ—¬ 객체가 λ³€ν™”ν•˜μ§€ μ•Šκ²Œ ν•˜λŠ” 데 μžˆλ‹€. 
    • λ…ΈμΆœμ‹œν‚¬μ§€ κ°μΆœμ§€ κ²°μ •ν•˜κΈ° μœ„ν•΄ μ ‘κ·Ό μ œμ–΄μž(public, private, default)λ₯Ό μ‚¬μš©ν•œλ‹€.
  • 상속
    • 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—λŠ” λΆ€λͺ¨ 객체와 μžμ‹ 객체가 항상 μ‘΄μž¬ν•œλ‹€.
    • λΆ€λͺ¨ κ°μ²΄λŠ” 가지고 μžˆλŠ” ν•„λ“œμ™€ λ©”μ„œλ“œλ₯Ό μžμ‹ 객체에 λ¬Όλ €μ£Όμ–΄ μžμ‹ 객체가 이λ₯Ό μ‚¬μš©ν•  수 μžˆλ„λ‘ λ§Œλ“€ 수 μžˆλ‹€. (overriding)
    • 상속을 ν•˜λŠ” 이유
      • 객체 κ°„μ˜ ꡬ쑰λ₯Ό νŒŒμ•…ν•˜κΈ° μ‰¬μ›Œμ§„λ‹€.
      • 일관성을 μœ μ§€ν•˜κΈ° μ’‹λ‹€.
      • μ½”λ“œμ˜ 쀑볡이 쀄어듀며 μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ΄ μ¦κ°€λœλ‹€.
  • λ‹€ν˜•μ„±
    • ν•˜λ‚˜μ˜ ν–‰μœ„μ— λŒ€ν•΄ 각 객체가 가지고 μžˆλŠ” κ³ μœ ν•œ νŠΉμ„±μ— 따라 λ‹€λ₯Έ μ—¬λŸ¬κ°€μ§€ ν˜•νƒœλ‘œ μž¬κ΅¬μ„±λ˜λŠ” 것을 μ˜λ―Έν•œλ‹€.
    • 각각 κ΅¬ν˜„λ˜λŠ” 객체듀은 λ‹€μ–‘ν•œ ν˜•νƒœμ˜ λ©”μ„œλ“œλ₯Ό κ°€μ Έκ°ˆ 수 μžˆλ‹€.
  • 좔상화
    • κ°μ²΄μ—μ„œ κ³΅ν†΅λœ 뢀뢄듀을 λͺ¨μ•„ μƒμœ„ κ°œλ…μœΌλ‘œ μƒˆλ‘­κ²Œ μ„ μ–Έν•˜λŠ” 것이닀.
      • 곡톡적이고 μ€‘μš”ν•œ 것듀을 λͺ¨μ•„ 객체λ₯Ό λͺ¨λΈλ§ν•œλ‹€.
      • 반볡되고 κ³΅ν†΅λ˜λŠ” 속성 → 좔상화 μ‹œμΌœλ†“κ³  μ—¬λŸ¬ κ΅°λ°μ—μ„œ κ°€μ Έλ‹€ μ“°λ©΄μ„œ ꡬ체화λ₯Ό μ‹œμΌœλ‚˜κ°€λŠ” κ³Όμ •μœΌλ‘œ λͺ¨λΈλ§ν•œλ‹€.

객체와 클래슀

  • 객체λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•΄μ„œ 섀계도(클래슀)κ°€ ν•„μš”ν•˜λ‹€.
  • 클래슀λ₯Ό ν† λŒ€λ‘œ μƒμ„±λœ 객체λ₯Ό ν•΄λ‹Ή 클래슀의 μΈμŠ€ν„΄μŠ€λΌκ³  λΆ€λ₯΄κ³  이 과정을 μΈμŠ€ν„΄μŠ€ν™”λΌκ³  λΆ€λ₯Έλ‹€.
    • class ν΄λž˜μŠ€μ΄λ¦„ → 객체λ₯Ό λ§Œλ“€κΈ° μœ„ν•œ 섀계도
  • λ™μΌν•œ 클래슀둜 μ—¬λŸ¬ 개의 μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€ 수 μžˆλ‹€.

클래슀 섀계

4 STEP

  • λ§Œλ“€λ €κ³  ν•˜λŠ” 섀계도λ₯Ό μ„ μ–Έν•œλ‹€. (클래슀 μ„ μ–Έ)
  • 객체가 가지고 μžˆμ–΄μ•Ό ν•  속성(ν•„λ“œ)을 μ •μ˜ν•œλ‹€.
  • 객체λ₯Ό μƒμ„±ν•˜λŠ” 방식을 μ •μ˜ν•œλ‹€. (μƒμ„±μž)
  • 객체가 가지고 μžˆμ–΄μ•Ό ν•  ν–‰μœ„(λ©”μ„œλ“œ)λ₯Ό μ •μ˜ν•œλ‹€.
package week3;
public class Car {  // 1. 클래슀 μ„ μ–Έ
    // <ν•„λ“œ μ˜μ—­>
    // 1) 고유 데이터 μ˜μ—­
    String company;  // μžλ™μ°¨ νšŒμ‚¬
    String model = "Gv80";  // μžλ™μ°¨ λͺ¨λΈ
    String color;  // μžλ™μ°¨ 색
    double price;  // μžλ™μ°¨ 가격

    // 2) μƒνƒœ 데이터 μ˜μ—­
    double speed;  // μžλ™μ°¨ 속도, km/h
    char gear;  // κΈ°μ–΄μƒνƒœ(P, R, N, D)
    boolean lights = true;  // μžλ™μ°¨ μ‘°λͺ…μ˜ μƒνƒœ

    // 3) 객체 데이터 μ˜μ—­
    Tire tire = new Tire();
    Door door;
    Handle handle;

    // <μƒμ„±μž μ˜μ—­>
    // μƒμ„±μž : 처음 객체가 생성될 λ•Œ(instanceν™”) μ–΄λ–€ λ‘œμ§μ„ μˆ˜ν–‰ν•΄μ•Ό ν•˜λ©°, μ–΄λ–€ 값이 ν•„μˆ˜λ‘œ 듀어와야 ν•˜λŠ”μ§€ μ •μ˜!
    public Car () {
        // logic
        // κΈ°λ³Έ μƒμ„±μž : μƒλž΅μ΄ κ°€λŠ₯

        System.out.println("μƒμ„±μžκ°€ ν˜ΈμΆœλ˜μ—ˆμŠ΅λ‹ˆλ‹€! 객체가 μƒμ„±λ©λ‹ˆλ‹€.");
    }

    // <λ©”μ„œλ“œ μ˜μ—­>

    // gasPedal
    // input : kmh
    // output : speed
    double gasPedal (double kmh, char type) {
        changeGear(type);  // 가속도 νŽ˜λ‹¬μ„ 밟으면 μžλ™μœΌλ‘œ κΈ°μ–΄κ°€ λ³€ν•œλ‹€.
        speed = kmh;
        return speed;
    }

    // breakPedal
    // input : x
    // output : speed
    double brakePedal () {
        speed = 0;
        return speed;
    }

    // changeGear
    // input : gear(char type)
    // output : gear
    char changeGear (char type) {
        gear = type;
        return gear;
    }

    // onOffLights
    // input : x
    // output : lights(boolean)
    boolean onOffLights () {
        lights = !lights;
        return lights;
    }

    // horn
    // input : x
    // output : x
    void horn () {
        System.out.println("λΉ΅λΉ΅!");
    }

    // μžλ™μ°¨μ˜ 속도 ... 가변길이 λ©”μ„œλ“œ
    void carSpeeds (double ... speeds) {
        for (double v : speeds) {
            System.out.println("v = " + v);
        }
    }
}

객체 생성과 μ°Έμ‘°ν˜• λ³€μˆ˜

객체 생성

new Car();  // Car 클래슀 객체 생성
  • μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜κΈ° μœ„ν•΄μ„œ new ν‚€μ›Œλ“œ μ΄μš©ν•œλ‹€.
  • new : μƒˆλ‘œμš΄ 객체λ₯Ό λ§Œλ“€μ–΄λ‹¬λΌλŠ” λͺ…령어이닀.

μ°Έμ‘°ν˜• λ³€μˆ˜

Car car1 = new Car();  // Car 클래슀의 객체인 car1 μΈμŠ€ν„΄μŠ€ 생성
Car car2 = new Car();  // Car 클래슀의 객체인 car2 μΈμŠ€ν„΄μŠ€ 생성

객체의 속성 - ν•„λ“œ

ν•„λ“œ

  • 객체의 데이터λ₯Ό μ €μž₯ν•˜λŠ” 역할을 ν•œλ‹€.
  • 객체의 ν•„λ“œλŠ” 크게 κ³ μœ ν•œ 데이터, μƒνƒœ 데이터, 객체 λ°μ΄ν„°λ‘œ λΆ„λ₯˜ν•  수 μžˆλ‹€.

ν•„λ“œμ˜ μ΄ˆκΈ°κ°’κ³Ό μ΄ˆκΈ°ν™”

  • 기본적으둜 μ΄ˆκΈ°κ°’μ„ μ œκ³΅ν•˜μ§€ μ•Šμ„ 경우 객체가 생성될 λ•Œ μžλ™μœΌλ‘œ κΈ°λ³Έκ°’μœΌλ‘œ μ΄ˆκΈ°ν™”λœλ‹€.
  • String model = "Gv80"; κ³Ό 같이 'ν•„λ“œνƒ€μž… ν•„λ“œλͺ… = κ°’'으둜 직접 μ΄ˆκΈ°ν™” ν•  수 μžˆλ‹€.

ν•„λ“œ μ‚¬μš©λ°©λ²•

  • ν•„λ“œλ₯Ό μ‚¬μš©ν•œλ‹€ → ν•„λ“œμ˜ 값을 λ³€κ²½ν•˜κ±°λ‚˜ μ½λŠ”λ‹€.
  • ν΄λž˜μŠ€μ— ν•„λ“œλ₯Ό μ •μ˜ν•˜μ—¬ μ„ μ–Έν–ˆλ‹€κ³  ν•΄μ„œ λ°”λ‘œ μ‚¬μš©ν•  수 μžˆλŠ” 것은 μ•„λ‹ˆλ‹€.
    μΈμŠ€ν„΄μŠ€ν™”λ₯Ό μ‹œμΌœμ•Ό μ‚¬μš©ν•  수 μžˆλ‹€..
  • ν΄λž˜μŠ€λŠ” 섀계도일 뿐 μ‹€μ œλ‘œ ν•„λ“œμ˜ 데이터λ₯Ό 가지고 μžˆλŠ” 것은 객체이닀.
  • 객체λ₯Ό μƒμ„±ν•œ ν›„ ν•„λ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

μ™ΈλΆ€ μ ‘κ·Ό

Car car = new Car();

car.color = "blue";
  •  κ°μ²΄μ˜ λ‚΄λΆ€ ν•„λ“œμ— μ ‘κ·Όν•˜λŠ” 방법 : λ„νŠΈ(.) μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•œλ‹€.

λ‚΄λΆ€ μ ‘κ·Ό

double brakePedal () {
    speed = 0;
    return speed;
}
  • 객체 λ‚΄λΆ€ λ©”μ„œλ“œμ—μ„œλ„ λ‚΄λΆ€ ν•„λ“œμ— μ ‘κ·Όν•  수 μžˆλ‹€.

예제

package week3;

public class Main {
    public static void main(String[] args) {
        Car car = new Car();  // 객체 생성

        System.out.println("νŽ˜λ‹¬ 밟기 μ „ car.gear = " + car.gear);

        // λ©”μ„œλ“œ 호좜 및 λ°˜ν™˜κ°’μ„ μ €μž₯
        double speed = car.gasPedal(100, 'D');
        System.out.println("speed = " + speed);

        boolean lights = car.onOffLights();
        System.out.println("lights = " + lights);

        System.out.println();

        System.out.println("νŽ˜λ‹¬ λ°Ÿμ€ ν›„ car.gear = " + car.gear);

        System.out.println();

        car.carSpeeds(100, 80);
        System.out.println();
        car.carSpeeds(110, 120, 150);
    }
}

객체의 ν–‰μœ„ - λ©”μ„œλ“œ

  • 객체의 ν–‰μœ„λ₯Ό λœ»ν•˜λ©° 객체 κ°„μ˜ ν˜‘λ ₯을 μœ„ν•΄ μ‚¬μš©λœλ‹€.
  • 블둝{ } 내뢀에 μ‹€ν–‰ν•  ν–‰μœ„λ₯Ό μ •μ˜ν•˜λ©΄ λœλ‹€.

λ©”μ„œλ“œ μ„ μ–Έ

λ¦¬ν„΄νƒ€μž… λ©”μ„œλ“œλͺ… (λ§€κ°œλ³€μˆ˜, ...) {
    μ‹€ν–‰ν•  μ½”λ“œ μž‘μ„±
}

리턴 νƒ€μž…

double brakePedal () {...}  // double νƒ€μž… λ°˜ν™˜
char changeGear (char type) {...}  // char νƒ€μž… λ°˜ν™˜
boolean onOffLights () {...}  // boolean νƒ€μž… λ°˜ν™˜
void horn () {...}  // λ°˜ν™˜ν•  κ°’ μ—†μŒ
  • 리턴 νƒ€μž… : λ©”μ„œλ“œκ°€ μ‹€ν–‰λœ ν›„ ν˜ΈμΆœμ„ ν•œ 곳으둜 값을 λ°˜ν™˜ν•  λ•Œ ν•΄λ‹Ή κ°’μ˜ νƒ€μž…μ„ μ˜λ―Έν•œλ‹€.
    • λ©”μ„œλ“œμ— λ¦¬ν„΄νƒ€μž…μ„ μ„ μ–Έν•˜μ—¬ λ°˜ν™˜ν•  값이 μžˆλ‹€λ©΄ λ°˜λ“œμ‹œ return 문으둜 ν•΄λ‹Ήν•˜λŠ” λ¦¬ν„΄νƒ€μž…μ˜ λ°˜ν™˜κ°’μ„ μ§€μ •ν•΄μ€˜μ•Ό ν•œλ‹€.
  • λ°˜ν™˜ν•  값이 없을 λ•ŒλŠ” λ¦¬ν„΄νƒ€μž…μ— voidλ₯Ό μž‘μ„±ν•œλ‹€.

맀개 λ³€μˆ˜

double gasPedal (double kmh, char type) {
    speed = kmh;
    return speed;
}
  • λ§€κ°œλ³€μˆ˜λŠ” λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ λ©”μ„œλ“œλ‘œ μ „λ‹¬ν•˜λ €λŠ” 값을 λ°›κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” λ³€μˆ˜μ΄λ‹€.
  • ν•΄λ‹Ή λ§€κ°œλ³€μˆ˜μ— 값을 μ „λ‹¬ν•˜κΈ° μœ„ν•΄μ„œλŠ” μˆœμ„œμ™€ νƒ€μž…μ— 맞좰 값을 λ„£μ–΄μ£Όλ©΄ λœλ‹€.
  • μ „λ‹¬ν•˜λ €λŠ” 값이 μ—†λ‹€λ©΄ μƒλž΅ κ°€λŠ₯ν•˜λ‹€.
  • κ°€λ³€(λ³€ν•  수 μžˆλŠ”) 길이의 λ§€κ°œλ³€μˆ˜λ„ μ„ μ–Έν•  수 μžˆλ‹€.
void carSpeeds (double ... speeds) {
    for (double v : speeds) {
        System.out.println("v = " + v);
    }
}
  • κ°€λ³€μœΌλ‘œ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄μ„œ for문이 ν•„μš”ν•˜λ‹€.

λ©”μ„œλ“œ 호좜 방법

  • λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œλ‹€ : λ©”μ„œλ“œμ˜ 블둝 내뢀에 μž‘μ„±λœ μ½”λ“œλ₯Ό μ‹€ν–‰ν•œλ‹€λŠ” μ˜λ―Έμ΄λ‹€. → ( ) μ•ˆμ— 값을 μ •ν™•ν•˜κ²Œ μž…λ ₯ν•΄μ•Ό ν•œλ‹€.
  • 클래슀의 λ©”μ„œλ“œλ₯Ό μ •μ˜ν•˜μ—¬ μ„ μ–Έν–ˆλ‹€κ³  ν•΄μ„œ λ°”λ‘œ μ‚¬μš©ν•  수 μžˆλŠ” 것은 μ•„λ‹ˆλ‹€.
  • ν΄λž˜μŠ€λŠ” 섀계도일 뿐 λ©”μ„œλ“œλŠ” 객체의 ν–‰μœ„λ₯Ό μ •μ˜ν•œ 것이닀.
  • 객체λ₯Ό μƒμ„±ν•œ 후에 λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

λ°˜ν™˜κ°’ μ €μž₯

  • λ©”μ„œλ“œμ˜ λ¦¬ν„΄νƒ€μž…μ„ μ„ μ–Έν•˜μ—¬ λ°˜ν™˜ν•  값이 μžˆλ‹€λ©΄ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 받아쀄 수 μžˆλ‹€.
  • λ°˜λ“œμ‹œ λ¦¬ν„΄νƒ€μž…κ³Ό λ³€μˆ˜μ˜ νƒ€μž…μ΄ λ™μΌν•˜κ±°λ‚˜ μžλ™ νƒ€μž… λ³€ν™˜λ  수 μžˆμ–΄μ•Ό ν•œλ‹€.
double speed = car.gasPedal(100, 'D');

λ©”μ„œλ“œ μ˜€λ²„λ‘œλ”©

μ˜€λ²„λ‘œλ”© : ν•¨μˆ˜κ°€ ν•˜λ‚˜μ˜ κΈ°λŠ₯λ§Œμ„ κ΅¬ν˜„ν•˜λŠ” 것이 μ•„λ‹ˆλΌ ν•˜λ‚˜μ˜ λ©”μ„œλ“œ μ΄λ¦„μœΌλ‘œ μ—¬λŸ¬ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λ„λ‘ ν•˜λŠ” Java의 κΈ°λŠ₯이닀.
ν•œ 클래슀 내에 이미 μ‚¬μš©ν•˜λ €λŠ” 이름과 같은 이름을 가진 λ©”μ„œλ“œκ°€ μžˆλ”λΌλ„, λ§€κ°œλ³€μˆ˜μ˜ 개수 λ˜λŠ” νƒ€μž…, μˆœμ„œκ°€ λ‹€λ₯΄λ©΄ λ™μΌν•œ 이름을 μ‚¬μš©ν•΄μ„œ λ©”μ„œλ“œλ₯Ό μ •μ˜ν•  수 μžˆλ‹€.

μ˜€λ²„λ‘œλ”©μ˜ 쑰건

  • λ©”μ„œλ“œμ˜ 이름이 κ°™κ³ , λ§€κ°œλ³€μˆ˜μ˜ 개수, νƒ€μž…, μˆœμ„œκ°€ 달라야 ν•œλ‹€.
  • 응닡 κ°’λ§Œ λ‹€λ₯Έ 것은 μ˜€λ²„λ‘œλ”©μ„ ν•  수 μ—†λ‹€.
  • μ ‘κ·Ό μ œμ–΄μžλ§Œ λ‹€λ₯Έ 것도 μ˜€λ²„λ‘œλ”©μ„ ν•  수 μ—†λ‹€.
  • μ˜€λ²„λ‘œλ”©μ€ λ§€κ°œλ³€μˆ˜μ˜ 차이둜만 κ΅¬ν˜„ν•  수 μžˆλ‹€. ⭐

μ˜€λ²„λ‘œλ”©μ˜ μž₯점

  • λ©”μ„œλ“œ 이름 ν•˜λ‚˜λ‘œ 상황에 λ”°λ₯Έ λ™μž‘μ„ κ°œλ³„λ‘œ μ •μ˜ν•  수 μžˆλ‹€.
  • λ©”μ„œλ“œμ˜ 이름을 μ ˆμ•½ν•  수 μžˆλ‹€.

κΈ°λ³Έν˜• & μ°Έμ‘°ν˜• λ§€κ°œλ³€μˆ˜

  • κΈ°λ³Έν˜• λ§€κ°œλ³€μˆ˜ → μ½λŠ” κ²ƒλ§Œ κ°€λŠ₯ν•˜λ‹€.
    • λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ 전달할 λ§€κ°œκ°’μœΌλ‘œ μ§€μ •ν•œ 값을 λ©”μ„œλ“œμ˜ λ§€κ°œλ³€μˆ˜μ— λ³΅μ‚¬ν•΄μ„œ μ „λ‹¬ν•œλ‹€.
    • λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…μ΄ κΈ°λ³Έν˜•μΌ λ•Œ κ°’ μžμ²΄κ°€ λ³΅μ‚¬λ˜μ–΄ λ„˜μ–΄κ°€κΈ° λ•Œλ¬Έμ— λ§€κ°œκ°’μœΌλ‘œ μ§€μ •λœ λ³€μˆ˜μ˜ 원본 값이 λ³€κ²½λ˜μ§€ μ•ŠλŠ”λ‹€.
  • μ°Έμ‘°ν˜• λ§€κ°œλ³€μˆ˜ μ½κ³  μ“°λŠ” 것이 κ°€λŠ₯ν•˜λ‹€.
    • λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ 전달할 λ§€κ°œκ°’μœΌλ‘œ μ§€μ •ν•œ κ°’μ˜ μ£Όμ†Œλ₯Ό λ§€κ°œλ³€μˆ˜μ— λ³΅μ‚¬ν•΄μ„œ μ „λ‹¬ν•œλ‹€.
    • λ§€κ°œλ³€μˆ˜λ₯Ό μ°Έμ‘°ν˜•μœΌλ‘œ μ„ μ–Έν•˜λ©΄ 값이 μ €μž₯된 곳의 원본 μ£Όμ†Œλ₯Ό μ•Œ 수 있기 λ•Œλ¬Έμ— 값을 μ½μ–΄μ˜€λŠ” 것은 λ¬Όλ‘  값을 λ³€κ²½ν•˜λŠ” 것도 κ°€λŠ₯ν•˜λ‹€.
package week3.parameter;

public class Main {
    public static void main(String[] args) {
        Car car = new Car(); // 객체 생성


        // κΈ°λ³Έν˜• λ§€κ°œλ³€μˆ˜
        char type = 'D';
        car.brakePedal(type);

        // λ©”μ„œλ“œ μ‹€ν–‰ μ™„λ£Œ ν›„ 전달할 λ§€κ°œκ°’μœΌλ‘œ μ§€μ •λœ type κ°’ 확인
        System.out.println("type = " + type); // 기쑴에 μ„ μ–Έν•œ κ°’ 'D' 좜λ ₯, 원본 κ°’ λ³€κ²½λ˜μ§€ μ•ŠμŒ
        // λ©”μ„œλ“œ μ‹€ν–‰ μ™„λ£Œ ν›„ λ°˜ν™˜λœ car μΈμŠ€ν„΄μŠ€μ˜ gear νƒ€μž… 확인
        System.out.println("gear = " + car.gear); // 객체 λ‚΄λΆ€μ—μ„œ type을 λ³€κ²½ν•˜μ—¬ μˆ˜μ •ν–ˆκΈ° λ•Œλ¬Έμ— 'P' 좜λ ₯

        System.out.println();



        // μ°Έμ‘°ν˜• λ§€κ°œλ³€μˆ˜
        Tire tire = new Tire();
        tire.company = "금호"; // 금호 타이어 객체 생성

        // μ°¨ 객체의 타이어λ₯Ό λ“±λ‘ν•˜λŠ” λ©”μ„œλ“œ ν˜ΈμΆœν•œ ν›„ λ°˜ν™˜κ°’μœΌλ‘œ μ°¨ 객체의 타이어 객체 λ°˜ν™˜
        Tire carInstanceTire = car.setTire(tire);

        // λ©”μ„œλ“œ μ‹€ν–‰ μ™„λ£Œ ν›„ 전달할 λ§€κ°œκ°’μœΌλ‘œ μ§€μ •λœ μ°Έμ‘°ν˜• λ³€μˆ˜ tire의 company κ°’ 확인
        System.out.println("tire.company = " + tire.company); // "KIA" 좜λ ₯
        // 전달할 λ§€κ°œκ°’μœΌλ‘œ μ§€μ •λœ tire μΈμŠ€ν„΄μŠ€μ˜ μ£Όμ†Œκ°’μ΄ μ „λ‹¬λ˜μ—ˆκΈ° λ•Œλ¬Έμ— 호좜된 λ©”μ„œλ“œμ— μ˜ν•΄ 값이 변경됨.

        // λ©”μ„œλ“œ μ‹€ν–‰ μ™„λ£Œ ν›„ λ°˜ν™˜λœ car μΈμŠ€ν„΄μŠ€μ˜ tire 객체 값이 λ°˜ν™˜λ˜μ–΄ μ €μž₯된 μ°Έμ‘°ν˜• λ³€μˆ˜ carInstanceTire의 company κ°’ 확인
        System.out.println("carInstanceTire.company = " + carInstanceTire.company); // "KIA" 좜λ ₯
    }
}

μΈμŠ€ν„΄μŠ€ 멀버와 클래슀 멀버

멀버 = ν•„λ“œ + λ©”μ„œλ“œ

  • μΈμŠ€ν„΄μŠ€ 멀버 = μΈμŠ€ν„΄μŠ€ ν•„λ“œ + μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ
  • 클래슀 멀버 = 클래슀 ν•„λ“œ + 클래슀 λ©”μ„œλ“œ
  • ν•„λ“œμ™€ λ©”μ„œλ“œλŠ” μ„ μ–Έν•˜λŠ” 방법에 λ”°λΌμ„œ μΈμŠ€ν„΄μŠ€ 멀버와 클래슀 λ©€λ²„λ‘œ ꡬ뢄할 수 μžˆλ‹€.
  • μΈμŠ€ν„΄μŠ€ λ©€λ²„λŠ” 객체 생성 후에 μ‚¬μš©ν•  수 있고 클래슀 λ©€λ²„λŠ” 객체 생성 없이도 μ‚¬μš©ν•  수 μžˆλ‹€.

μΈμŠ€ν„΄μŠ€ 멀버

  • μ§€κΈˆκΉŒμ§€ ν•™μŠ΅ν•˜λ©΄μ„œ μ„ μ–Έν•œ ν•„λ“œμ™€ λ©”μ„œλ“œλŠ” μ „λΆ€ μΈμŠ€ν„΄μŠ€ 멀버이닀.
  • 객체가 μΈμŠ€ν„΄μŠ€ν™” ν•  λ•Œλ§ˆλ‹€ 객체의 λ©”μ„œλ“œλ“€μ€ μΈμŠ€ν„΄μŠ€μ— ν¬ν•¨λ˜μ–΄ 맀번 μƒμ„±λ˜λŠ” 것이 μ•„λ‹ˆλΌ λ©”μ„œλ“œλŠ” λ©”μ„œλ“œ μ˜μ—­μ— λ‘κ³ μ„œ λͺ¨λ“  μΈμŠ€ν„΄μŠ€λ“€μ΄ κ³΅μœ ν•΄μ„œ μ‚¬μš©ν•œλ‹€.
  • μΈμŠ€ν„΄μŠ€λ₯Ό ν†΅ν•΄μ„œλ§Œ λ©”μ„œλ“œκ°€ μ‚¬μš©λ  수 μžˆλ„λ‘ μ œν•œμ„ κ±Έμ–΄λ‘” 것이닀.

클래슀 멀버

  • λ©”μ„œλ“œ μ˜μ—­μ˜ ν΄λž˜μŠ€μ™€ 같은 μœ„μΉ˜μ— κ³ μ •μ μœΌλ‘œ μœ„μΉ˜ν•˜κ³  μžˆλŠ” 멀버λ₯Ό μ˜λ―Έν•œλ‹€.
  • 클래슀 λ©€λ²„λŠ” 객체의 생성 ν•„μš” 없이 λ°”λ‘œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€.

클래슀 λ©€λ²„μ˜ μ„ μ–Έ

  • ν•„λ“œμ™€ λ©”μ„œλ“œλ₯Ό 클래슀 λ©€λ²„λ‘œ λ§Œλ“€κΈ° μœ„ν•΄μ„œλŠ” static ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€.
    • 일반적으둜 μΈμŠ€ν„΄μŠ€λ§ˆλ‹€ λͺ¨λ‘ 가지고 μžˆμ„ ν•„μš” μ—†λŠ” 곡용적인 데이터λ₯Ό μ €μž₯ν•˜λŠ” ν•„λ“œλŠ” 클래슀 λ©€λ²„λ‘œ μ„ μ–Έν•˜λŠ” 것이 μ’‹λ‹€.
    • μΈμŠ€ν„΄μŠ€ ν•„λ“œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  μ‹€ν–‰λ˜λŠ” λ©”μ„œλ“œκ°€ μ‘΄μž¬ν•œλ‹€λ©΄ static ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 클래슀 λ©”μ„œλ“œλ‘œ μ„ μ–Έν•˜λŠ” 것이 μ’‹λ‹€.
βœ”οΈ μ£Όμ˜ν•  점

클래슀 λ©€λ²„λ‘œ μ„ μ–Έλœ λ©”μ„œλ“œλŠ” μΈμŠ€ν„΄μŠ€ 멀버λ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€.
μΈμŠ€ν„΄μŠ€ λ©€λ²„λ‘œ μ„ μ–Έλœ λ©”μ„œλ“œλŠ” 클래슀 멀버λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.
클래슀 λ©€λ²„λŠ” 객체 생성없이 λ°”λ‘œ μ‚¬μš© κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— 객체가 μƒμ„±λ˜μ–΄μ•Ό μ‘΄μž¬ν•  수 μžˆλŠ” μΈμŠ€ν„΄μŠ€ 멀버λ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€.

클래슀 멀버 μ‚¬μš©

Car.company = "Audi";
String companyName = Car.setCompany("Benz");
  • 클래슀 멀버λ₯Ό μ‚¬μš©ν•˜λ €λ©΄ 클래슀의 이름과 ν•¨κ»˜ λ„νŠΈ(.) μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€.
Car car = new Car();  // 객체 생성

car.company = "Ferrari";
String companyName2 = car.setCompany("Lamborghini");
  • μ°Έμ‘°ν˜• λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 클래슀 멀버에 접근은 κ°€λŠ₯ν•˜μ§€λ§Œ μΆ”μ²œν•˜μ§€ μ•ŠλŠ”λ‹€. ν΄λž˜μŠ€ μ΄λ¦„μœΌλ‘œ μ ‘κ·Όν•˜λŠ” 것이 μ’‹λ‹€.

예제

package week3.staticFolder;

public class Main {
    public static void main(String[] args) {
        // 클래슀 ν•„λ“œ company 확인
        System.out.println(Car.company + "\n");
        // 클래슀 ν•„λ“œ λ³€κ²½ 및 확인
        Car.company = "Audi";
        System.out.println(Car.company + "\n");

        // 클래슀 λ©”μ„œλ“œ 호좜
        String companyName = Car.setCompany("Benz");
        System.out.println("companyName = " + companyName);

        System.out.println();
        // μ°Έμ‘°ν˜• λ³€μˆ˜ μ‚¬μš©
        Car car = new Car(); // 객체 생성

        car.company = "Ferrari";
        System.out.println(car.company + "\n");

        String companyName2 = car.setCompany("Lamborghini");
        System.out.println("companyName2 = " + companyName2);
    }
}

μ§€μ—­λ³€μˆ˜

  • λ©”μ„œλ“œ 내뢀에 μ„ μ–Έν•œ λ³€μˆ˜λ₯Ό μ˜λ―Έν•œλ‹€.
  • λ©”μ„œλ“œκ°€ 싀행될 λ•Œλ§ˆλ‹€ 독립적인 값을 μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•˜κ²Œ λœλ‹€.
  • 지역 λ³€μˆ˜λŠ” λ©”μ„œλ“œ λ‚΄λΆ€μ—μ„œ μ •μ˜λ  λ•Œ μƒμ„±λ˜μ–΄ λ©”μ„œλ“œκ°€ μ’…λ£Œλ  λ•ŒκΉŒμ§€λ§Œ μœ μ§€λœλ‹€.
package week3.sample;

public class Main {
    public static void main(String[] args) {
        Main main = new Main();  // κΈ°λ³Έ μƒμ„±μžκ°€ λ‚΄μž₯λ˜μ–΄ μžˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 선언이 κ°€λŠ₯ν•˜λ‹€.

        System.out.println(main.getNumber());
        System.out.println(main.getNumber());
    }

    // λ©”μ„œλ“œ
    public int getNumber () {
        // μ§€μ—­λ³€μˆ˜ <-> μ „μ—­λ³€μˆ˜(static)
        // ν•΄λ‹Ή λ©”μ„œλ“œκ°€ 싀행될 λ•Œλ§ˆλ‹€ 독립적인 값을 μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•œλ‹€.
        // 이 μ§€μ—­λ³€μˆ˜λŠ” λ©”μ„œλ“œ λ‚΄λΆ€μ—μ„œ μ •μ˜λ  λ•Œ μƒμ„±λœλ‹€.
        // 이 λ©”μ„œλ“œκ°€ μ’…λ£Œλ  λ•Œ μ†Œλ©Έλœλ‹€.
        int number = 1;
        number += 1;  // number = number + 1;
        return number;
    }
}

final ν•„λ“œμ™€ μƒμˆ˜

  • final ν•„λ“œλŠ” μ΄ˆκΈ°κ°’μ΄ μ €μž₯되면 해당값을 ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰ν•˜λŠ” λ„μ€‘μ—λŠ” μ ˆλŒ€λ‘œ μˆ˜μ •ν•  수 μ—†λ‹€.
  • final ν•„λ“œλŠ” λ°˜λ“œμ‹œ μ΄ˆκΈ°κ°’μ„ 지정해야 ν•œλ‹€.
βœ”οΈ μ°Έκ³ 

final + static → ν”„λ‘œκ·Έλž¨ μžμ²΄μ—μ„œ μ‚¬μš©ν•˜λŠ” μƒμˆ˜μ΄κΈ°λ„ ν•˜λ©΄μ„œ 곡용으둜 μ“°μ΄λŠ” 값도 λœλ‹€.

→ 곡용의 μƒμˆ˜
final String company = "GENESIS";

...

Car car = new Car();
System.out.println(car.company);

μƒμˆ˜

  • μƒμˆ˜μ˜ νŠΉμ§•μ€ 값이 λ°˜λ“œμ‹œ ν•œ 개이며 λΆˆλ³€μ˜ 값을 μ˜λ―Έν•œλ‹€.
  • μΈμŠ€ν„΄μŠ€λ§ˆλ‹€ μƒμˆ˜λ₯Ό μ €μž₯ν•  ν•„μš”κ°€ μ—†λ‹€.
  • final μ•žμ— static ν‚€μ›Œλ“œλ₯Ό μΆ”κ°€ν•˜μ—¬ λͺ¨λ“  μΈμŠ€ν„΄μŠ€κ°€ κ³΅μœ ν•  수 μžˆλŠ” 값이 ν•œ 개이며 λΆˆλ³€μΈ μƒμˆ˜λ₯Ό μ„ μ–Έν•  수 μžˆλ‹€.
  • 일반적으둜 μƒμˆ˜λŠ” λŒ€λ¬Έμžλ‘œ μž‘μ„±ν•˜λŠ” 것이 관둀이닀.

κ³΅λΆ€ν•˜λ©΄μ„œ λŠλ‚€ 점

3μ£Όμ°¨ κ°•μ˜λ₯Ό λ“£κ²Œ λ˜λ©΄μ„œ μƒˆλ‘œ μ ‘ν•˜λŠ” κ°œλ…λ“€μ΄ μŸμ•„μ‘Œλ‹€.... λΆ„λͺ… κ°•μ˜λ₯Ό λ“€μœΌλ©΄μ„œ 따라 ν•  λ•ŒλŠ” 이해가 되고 머리에 잘 λ“€μ–΄μ™”λŠ”λ° λΈ”λ‘œκ·Έμ— λ‹€μ‹œ μ •λ¦¬ν•˜λ©΄μ„œ λ³΄λ‹ˆκΉŒ μƒˆλ‘­κ²Œ λŠκ»΄μ Έμ„œ μ ˆλ§μ μ΄μ—ˆλ‹€. 이번 μ£Ό λ‚΄λ‚΄ λ°˜λ³΅ν•΄μ„œ κ³΅λΆ€ν•˜κ³  개인 과제 ν•˜λ©΄μ„œ 또 λ³΅μŠ΅ν•˜κ³ .. κ·ΈλŸ¬λ‹€ 보면 κ°œλ…μ΄ ν™•μ‹€ν•˜κ²Œ μž‘ν˜€μžˆμ§€ μ•Šμ„κΉŒ μƒκ°ν•œλ‹€..

그리고 κ°•μ˜ λ‚΄μš©μ„ μ΄ν•΄ν•˜λ©΄μ„œ λ“€μœΌλ €κ³  ν•˜λ‹€ λ³΄λ‹ˆκΉŒ μ‹œκ°„μ΄ 점점 였래 κ±Έλ¦¬λŠ” κ±° κ°™μ•„μ„œ μš°μ„ μ€ κ°•μ˜λ₯Ό 따라 ν•˜κ³  개인 과제λ₯Ό ν•˜λ©΄μ„œ λ‚΄μš©μ„ λ‹€μ‹œ ν•œλ²ˆ μ •λ¦¬ν•˜κ³  주말에 ν•œλ²ˆ 더 λ³΅μŠ΅ν•˜λ©΄μ„œ 감을 μž‘μ•„κ°€λŠ” 것이 더 쒋은 곡뢀방ν–₯인 것 κ°™μ•„μ„œ 내일뢀터 κ·Έλ ‡κ²Œ μ§„ν–‰ν•˜λ €κ³  ν•œλ‹€. 일단 κ°•μ˜λ₯Ό 듀을 λ•ŒλŠ” κ°•μ‚¬λ‹˜μ˜ 말씀이 이해가 λ˜λ©΄μ„œ λ„˜μ–΄κ°€λŠ” λŠλ‚Œμ΄λΌ 닀행인 것 κ°™λ‹€.

컀리어 μ½”μΉ­ μƒλ‹΄μ΄λž‘ Java μ„Έμ…˜μ˜ μ‹œκ°„μ΄ κ²ΉμΉ˜λ©΄μ„œ Java μ„Έμ…˜μ„ 쀑간뢀터 λͺ»λ“€μ—ˆλŠ”데 녹화본을 λ³΄λ©΄μ„œ 따라 해보고 였늘 κ°•μ˜λ₯Ό λ“€μœΌλ©΄μ„œ λ°°μ› λ˜ λ‚΄μš©λ“€μ„ 정리할 수 μžˆλŠ” μ‹œκ°„μ„ κ°€μ§ˆ 수 있으면 쒋을 것 κ°™λ‹€.

μ•„μ§κΉŒμ§„ μ§€μΉ˜μ§€ μ•Šκ³  진도λ₯Ό λ‚˜κ°ˆ 수 μžˆμ–΄μ„œ 닀행인 것 κ°™λ‹€. 이번 주에 고생을 쑰금 ν•΄λ†“λŠ”λ‹€λ©΄ λ‹€μŒμ£Όμ™€ λ‹€λ‹€μŒμ£Όκ°€ 쑰금 νŽΈν•΄μ§€μ§€ μ•Šμ„κΉŒ 생각이 λ“ λ‹€... μš°μ„  λ‚˜λ§Œμ˜ 곡뢀 속도λ₯Ό μ§€ν‚€λ©΄μ„œ κΎΈμ€€νžˆ 곡뢀해 λ‚˜κ°ˆ 생각이닀!

내일도 νŒŒμ΄νŒ…!!!!!!!