GiantStepDEV

객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°

  • 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” λͺ¨λ“  데이터λ₯Ό 객체(object)둜 μ·¨κΈ‰
    μ΄λŸ¬ν•œ 객체가 ν”„λ‘œκ·Έλž˜λ°μ˜ 쀑심이 λœλ‹€.
  • 객체(object)λž€, μ‹€μƒν™œμ—μ„œ μš°λ¦¬κ°€ 인식할 수 μžˆλŠ” μ‚¬λ¬Όλ‘œ μ„€λͺ… κ°€λŠ₯
    μ΄λŸ¬ν•œ 객체의 μƒνƒœ(state)와 행동(behavior)을 κ΅¬μ²΄ν™”ν•˜λŠ” ν˜•νƒœμ˜ ν”„λ‘œκ·Έλž˜λ°μ΄ λ°”λ‘œ 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°
  • 객체λ₯Ό λ§Œλ“€μ–΄ λ‚΄κΈ° μœ„ν•œ 섀계도와 같은 κ°œλ…μ„ 클래슀(class)라고 함.

클래슀(Class)

  • ν΄λž˜μŠ€λž€ 객체λ₯Ό μ •μ˜ν•˜λŠ” ν‹€ λ˜λŠ” 섀계도와 같은 μ˜λ―Έμ΄λ‹€.
    μžλ°”μ—μ„œλŠ” μ΄λŸ¬ν•œ 섀계도인 클래슀λ₯Ό κ°€μ§€κ³ , μ—¬λŸ¬ 객체λ₯Ό μƒμ„±ν•˜μ—¬ μ‚¬μš©ν•¨.
  • ν΄λž˜μŠ€λŠ” 객체의 μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” ν•„λ“œ(field)와 객체의 행동을 λ‚˜νƒ€λ‚΄λŠ” λ©”μ†Œλ“œ(method)둜 ꡬ성
    * ν•„λ“œ(field)λž€ ν΄λž˜μŠ€μ— ν¬ν•¨λœ λ³€μˆ˜(variable)λ₯Ό μ˜λ―Έν•¨.
    * λ©”μ†Œλ“œ(method)λž€ νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ λͺ…λ Ήλ¬Έμ˜ μ§‘ν•©, ν•¨μˆ˜λΌ ν•  수 있음.

μΈμŠ€ν„΄μŠ€(instance)

  • μžλ°”μ—μ„œ 클래슀λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν•΄λ‹Ή 클래슀 νƒ€μž…μ˜ 객체(object)λ₯Ό μ„ μ–Έν•΄μ•Ό 함.
  • ν΄λž˜μŠ€λ‘œλΆ€ν„° 객체λ₯Ό μ„ μ–Έν•˜λŠ” 과정을 클래슀의 μΈμŠ€ν„΄μŠ€ 화라고 함.
  • μ„ μ–Έλœ ν•΄λ‹Ή 클래슀 νƒ€μž…μ˜ 객체λ₯Ό μΈμŠ€ν„΄μŠ€(instance)라고 함.
  • 즉, μΈμŠ€ν„΄μŠ€λž€ heap λ©”λͺ¨λ¦¬μ— ν• λ‹Ήλœ 객체λ₯Ό μ˜λ―Έν•œλ‹€.
  • ν•˜λ‚˜μ˜ ν΄λž˜μŠ€λ‘œλΆ€ν„° μ—¬λŸ¬ 개의 μΈμŠ€ν„΄μŠ€ 생성 κ°€λŠ₯
  • μΈμŠ€ν„΄μŠ€λŠ” λ…λ¦½λœ λ©”λͺ¨λ¦¬ 곡간에 μ €μž₯된 μžμ‹ λ§Œμ˜ ν•„λ“œλ₯Ό κ°€μ§ˆ 수 있음.
  • ν•΄λ‹Ή 클래슀의 λͺ¨λ“  λ©”μ†Œλ“œ(method)λŠ” ν•΄λ‹Ή ν΄λž˜μŠ€μ—μ„œ μƒμ„±λœ λͺ¨λ“  μΈμŠ€ν„΄μŠ€κ°€ κ³΅μœ ν•¨.

λ©”μ†Œλ“œ(method)

  • ν΄λž˜μŠ€λŠ” ν•„λ“œ(field)와 λ©”μ†Œλ“œ(method)λ₯Ό 가짐.
    κ·Έ 쀑 λ©”μ†Œλ“œλŠ” μ–΄λ– ν•œ νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ λͺ…λ Ήλ¬Έμ˜ 집합이닀.

클래슀의 μ„ μ–Έ

μ ‘κ·Όμ œν•œμž class ν΄λž˜μŠ€μ΄λ¦„ {}

* μ ‘κ·Όμ œν•œμž : public, protected, default, private

(μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½μœΌλ‘œ 갈 수둝 μ ‘κ·Ό λ²”μœ„κ°€ 쒁아짐)

  1. public : μ ‘κ·Όμ˜ μ œν•œμ΄ μ—†μŒ
  2. protected : λ™μΌν•œ  νŒ¨ν‚€μ§€ 내에 μ‘΄μž¬ν•˜κ±°λ‚˜ νŒŒμƒν΄λž˜μŠ€μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯
  3. default : μ ‘κ·Όμ œν•œμžλ₯Ό μ•ˆμ“°λ©΄ default. λ™μΌν•œ νŒ¨ν‚€μ§€ λ‚΄μ—μ„œ μ ‘κ·Ό κ°€λŠ₯
  4. private : 자기 μžμ‹ μ˜ 클래슀 λ‚΄μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯

객체 생성과 클래슀 λ³€μˆ˜

클래슀λͺ… λ³€μˆ˜ = new 클래슀λͺ…();
public class Main {
    public static void main(String[] args) {
        Student s1 = new Student();
        s1.Test();
        Student s2 = new Student();
        s2.Test();
    }
}

public class Student {
    void Test() {
        System.out.println("객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°!");
    }
}

클래슀의 ꡬ성 멀버

ν΄λž˜μŠ€μ—λŠ” 객체가 κ°€μ Έμ•Ό ν•  ꡬ성 멀버가 μ„ μ–Έ 됨.
ꡬ성 λ©€λ²„μ—λŠ” ν•„λ“œ, μƒμ„±μž, λ©”μ†Œλ“œ(ꡬ성 λ©€λ²„λŠ” μƒλž΅λ˜κ±°λ‚˜ 쀑볡 κ°€λŠ₯)
public class ClassName {
	int fieldName;           // ν•„λ“œ
	ClassName() {...}        // μƒμ„±μž
	void methodName() {...}  // λ©”μ†Œλ“œ
}

ν•„λ“œ

  • ν΄λž˜μŠ€μ—  ν¬ν•¨λœ λ³€μˆ˜
  • μ„ μ–Έλœ μœ„μΉ˜μ— 따라 μ•„λž˜μ™€ 같이 ꡬ뢄됨.
클래슀 λ³€μˆ˜(static variable)
μΈμŠ€ν„΄μŠ€ λ³€μˆ˜(instance variable)
μ§€μ—­ λ³€μˆ˜(local variable)
class Car {
    static int modelOutput; // 클래슀 λ³€μˆ˜
    String modelName;       // μΈμŠ€ν„΄μŠ€ λ³€μˆ˜

    void method() {
        int something = 10; // μ§€μ—­ λ³€μˆ˜
    }
}
λ³€μˆ˜ μƒμ„±μ‹œκΈ° μ†Œλ©Έμ‹œκΈ° μ €μž₯ μœ„μΉ˜ μ‚¬μš© 방법
클래슀 λ³€μˆ˜ 클래슀 μƒμ„±μ‹œ ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œ λ©”μ†Œλ“œ μ˜μ—­ 클래슀 이름.λ³€μˆ˜μ΄λ¦„
μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ 객체가 생성될 λ•Œ 객체 μ†Œλ©Έ νž™ μ˜μ—­ 객체이름.λ³€μˆ˜μ΄λ¦„
μ§€μ—­ λ³€μˆ˜ λΈ”λ‘λ‚΄μ—μ„œ λ³€μˆ˜ μ„ μ–Έ 블둝을 λ²—μ–΄λ‚  λ•Œ μŠ€νƒ μ˜μ—­ λ³€μˆ˜ 이름
class Field {
    static int classVar = 10; // 클래슀 λ³€μˆ˜ μ„ μ–Έ
    int instanceVar = 20;     // μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ μ„ μ–Έ
}

public class Main {
    public static void main(String[] args) {
        int var = 30;                   // μ§€μ—­ λ³€μˆ˜ μ„ μ–Έ
        System.out.println(var + "\n"); // μ§€μ—­ λ³€μˆ˜ μ°Έμ‘°
        Field myField1 = new Field();   // μΈμŠ€ν„΄μŠ€ 생성
        Field myField2 = new Field();   // μΈμŠ€ν„΄μŠ€ 생성
        System.out.println(Field.classVar); // 클래슀 λ³€μˆ˜ μ°Έμ‘°

        System.out.println(Field.classVar); // 클래슀 λ³€μˆ˜ μ°Έμ‘°

        System.out.println(myField2.instanceVar + "\n");
        myField1.instanceVar = 200;               // μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ˜ 값을 λ³€κ²½

        System.out.println(myField1.instanceVar); // μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ μ°Έμ‘°
        System.out.println(myField2.instanceVar);
    }
}

 

profile

GiantStepDEV

@kongmi

ν¬μŠ€νŒ…μ΄ μ’‹μ•˜λ‹€λ©΄ "μ’‹μ•„μš”β€οΈ" λ˜λŠ” "κ΅¬λ…πŸ‘πŸ»" ν•΄μ£Όμ„Έμš”!