포슀트

Java 클래슀

Java 클래슀

πŸ”Ž 클래슀

κ°μ²΄λž€?

물리적으둜 μ‘΄μž¬ν•˜κ±°λ‚˜ μΆ”μƒμ μœΌλ‘œ 생각할 수 μžˆλŠ” 것 μ€‘μ—μ„œ

μžμ‹ μ˜ 속성을 κ°€μ§€κ³  μžˆμœΌλ©΄μ„œ 식별 κ°€λŠ₯ν•œ 것.

β†’ iv(Instance Variable)의 μ§‘ν•©

β†’ ivλŠ” μΈμŠ€ν„΄μŠ€κ°€ 생성될 λ•Œ λ§Œλ“€μ–΄μ§„λ‹€.

  • 속성 : ν•„λ“œ (field)

  • λ™μž‘ : λ©”μ†Œλ“œ (method)


ν΄λž˜μŠ€λž€? : 객체의 섀계도.

ν΄λž˜μŠ€μ—λŠ” 객체λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•œ ν•„λ“œμ™€ λ©”μ†Œλ“œκ°€ μ •μ˜λ˜μ–΄ μžˆλ‹€.

클래슀둜 λΆ€ν„° λ§Œλ“€μ–΄μ§„ 객체λ₯Ό ν•΄λ‹Ή 클래슀의 μΈμŠ€ν„΄μŠ€λΌκ³  ν•œλ‹€.


클래슀의 ꡬ성 멀버

ν΄λž˜μŠ€μ—λŠ” 객체가 κ°€μ Έμ•Ό ν•  ꡬ성 멀버가 μ„ μ–Έλœλ‹€. ꡬ성 λ§΄λ²„μ—λŠ” ν•„λ“œ, μƒμ„±μž, λ©”μ†Œλ“œκ°€ μžˆλ‹€.


πŸ”Ž ν•„λ“œ (Field)

  • 객체의 데이터가 μ €μž₯λ˜λŠ” κ³³

  • μ„ μ–Έ ν˜•νƒœλŠ” λ³€μˆ˜μ™€ λΉ„μŠ·ν•˜μ§€λ§Œ ν•„λ“œλ₯Ό λ³€μˆ˜λΌκ³  λΆ€λ₯΄μ§€λŠ” μ•ŠλŠ”λ‹€.



πŸ”Ž μƒμ„±μž (Constructor)

πŸ”₯ λͺ¨λ“  μƒμ„±μžλŠ” 첫쀄에 λ‹€λ₯Έ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€ πŸ”₯

μƒμ„±μžλž€?

객체 생성 μ‹œ μ΄ˆκΈ°ν™” μ—­ν•  λ‹΄λ‹Ή (iv μ΄ˆκΈ°ν™” λ©”μ„œλ“œ)


μƒμ„±μžμ˜ 쑰건

  • μƒμ„±μžμ˜ 이름은 클래슀의 이름과 κ°™μ•„μ•Όν•œλ‹€.

  • μƒμ„±μžλŠ” 리턴값이 μ—†λ‹€. ν•˜μ§€λ§Œ void λŠ” μ“°μ§€ μ•ŠλŠ”λ‹€.

  • λͺ¨λ“  ν΄λž˜μŠ€λŠ” λ°˜λ“œμ‹œ ν•˜λ‚˜ μ΄μƒμ˜ μƒμ„±μžλ₯Ό κ°€μ Έμ•Όν•œλ‹€.


μƒμ„±μžμ˜ μ’…λ₯˜

β’ˆ κΈ°λ³Έ μƒμ„±μž.

  • λ§€κ°œλ³€μˆ˜κ°€ μ—†λŠ” μƒμ„±μž

  • λ§Œλ“€μ§€ μ•Šμ„ 경우 μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ μƒμ„±μžλ₯Ό μƒμ„±ν•œλ‹€.

1
2
3
4
5
6
7
8
9
10
class Car {

    String color;
    String model;
    String company;
    
    // constructor
    Car() {}

}


β’‰ λ§€κ°œλ³€μˆ˜ μžˆλŠ” μƒμ„±μž

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 클래슀 μž‘μ„±
class Car {
    String color;
    String model;
    String company;

    // κΈ°λ³Έ μƒμ„±μž ν•„μˆ˜ μž‘μ„±
    Car() {}

    // λ§€κ°œλ³€μˆ˜ μžˆλŠ” μƒμ„±μž
    Car(String c, String m, String com) {

        color = c;
        model = m;
        company = com;
    }
}

// 객체 생성할 λ–„
Car myCar = new Car("black", "new", "hyundai" )


this(), this(λ§€κ°œλ³€μˆ˜)

  • μƒμ„±μžμ—μ„œ λ‹€λ₯Έ μƒμ„±μž ν˜ΈμΆœν•  λ•Œλ§Œ μ‚¬μš©

  • λ‹€λ₯Έ μƒμ„±μž ν˜ΈμΆœμ‹œ 첫 μ€„μ—μ„œλ§Œ κ°€λŠ₯.

  • 클래슀 이름 λŒ€μ‹ μ— thisλ₯Ό μ‚¬μš©ν•˜λŠ” 것.

  • μ½”λ“œμ˜ 쀑볡을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Car {
    String color;
    String model;
    String company;

    Car () {
        this("black", "new", "hyundai");
    }

    Car(String color, String model, String company) {
        
        this.color = color;
        this.model = model;
        this.company = company;
    }
}


μ°Έμ‘° λ³€μˆ˜ this

  • μΈμŠ€ν„΄μŠ€ μžμ‹ μ„ κ°€λ¦¬ν‚€λŠ” μ°Έμ‘°λ³€μˆ˜

  • μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ—μ„œ μ‚¬μš©κ°€λŠ₯ (μƒμ„±μž 포함)

  • μ§€μ—­λ³€μˆ˜(lv)와 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜(iv)λ₯Ό κ΅¬λ³„ν•˜κΈ° μœ„ν•΄ μ‚¬μš©

λ³€μˆ˜μ˜ 이름이 λ‹€λ₯΄λ‹€λ©΄ thisλ₯Ό μƒλž΅ κ°€λŠ₯ν•˜μ§€λ§Œ, λ³€μˆ˜μ˜ 이름이

쀑볡될 κ²½μš°μ—λŠ” λ°˜λ“œμ‹œ thisλ₯Ό λͺ…μ‹œν•΄μ€˜μ•Ό ν•œλ‹€.

1
2
3
4
5
6
7
8
9
10
11
12
13
class Car {
    String color;
    String model;
    String company;

    Car(String color, String model, String company) {
        
        // μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ = μ§€μ—­λ³€μˆ˜;
        this.color = color;
        this.model = model;
        this.company = company;
    }
}


πŸ”Ž λ©”μ†Œλ“œ (Method)

  • 객체의 λ™μž‘μ— ν•΄λ‹Ήν•˜λŠ” μ‹€ν–‰ 블둝

리턴 κ°’

리턴할 값이 μ—†λŠ” 경우 리턴 νƒ€μž…μ— void λ₯Ό 적어쀀닀.

λ°˜λŒ€λ‘œ 리턴 값이 μžˆλŠ” κ²½μš°λŠ” μ•„λž˜μ™€ 같이 μž‘μ„±ν•΄ μ€€λ‹€.

1
2
3
4
5
// λ©”μ„œλ“œ
int add(int x, int y) {
    int result = x+y;
    return result;
}



staticλ©”μ„œλ“œμ™€ instanceλ©”μ„œλ“œ

staticλ©”μ„œλ“œμ™€ instanceλ©”μ„œλ“œμ˜ κ°€μž₯ 큰 차이점은 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ˜ μ‚¬μš©μ—¬λΆ€μ΄λ‹€.


β’ˆ instance λ©”μ„œλ“œ

  • μΈμŠ€ν„΄μŠ€ 생성 ν›„, β€˜μ°Έμ‘°λ³€μˆ˜.λ©”μ„œλ“œμ΄λ¦„()β€™μœΌλ‘œ 호좜

  • μΈμŠ€ν„΄μŠ€λ³€μˆ˜λ‚˜ μΈμŠ€ν„΄μŠ€λ©”μ„œλ“œμ™€ κ΄€λ ¨λœ μž‘μ—…μ„ ν•˜λŠ” λ©”μ„œλ“œ

  • λ©”μ„œλ“œ λ‚΄μ—μ„œ μΈμŠ€ν„΄μŠ€λ³€μˆ˜ μ‚¬μš©κ°€λŠ₯


β’‰ static λ©”μ„œλ“œ

πŸ“Œ μ–Έμ œ static을 μ‚¬μš©ν•˜λ‚˜μš”? πŸ“Œ

β–» 클래슀 λ‚΄μ—μ„œ instance variable을 μ‚¬μš©ν•˜μ§€ μ•Šμ„ λ•Œ μ‚¬μš©ν•œλ‹€.


  • 객체생성없이 β€˜ν΄λž˜μŠ€μ΄λ¦„.λ©”μ„œλ“œμ΄λ¦„()β€™μœΌλ‘œ 호좜

  • μΈμŠ€ν„΄μŠ€λ³€μˆ˜λ‚˜ μΈμŠ€ν„΄μŠ€λ©”μ„œλ“œμ™€ κ΄€λ ¨μ—†λŠ” μž‘μ—…μ„ ν•˜λŠ” λ©”μ„œλ“œ

  • λ©”μ„œλ“œ λ‚΄μ—μ„œ μΈμŠ€ν„΄μŠ€λ³€μˆ˜ μ‚¬μš©λΆˆκ°€

  • λ©”μ„œλ“œ λ‚΄μ—μ„œ μΈμŠ€ν„΄μŠ€λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ static을 λΆ™μ΄λŠ” 것을 κ³ λ €ν•œλ‹€.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
class MyMath2 {
    // iv
	long a, b;

	// μΈμŠ€ν„΄μŠ€λ©”μ„œλ“œ
	long add() {	
		return a + b;
	}

    // ν΄λž˜μŠ€λ©”μ„œλ“œ(staticλ©”μ„œλ“œ)
	static long add(long a, long b) { 
		return a + b;
	}
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class MyMath2Class {

    public static void main(String[] args) {

        // 클래슀 λ©”μ„œλ“œ 호좜
        System.out.println(MyMath2.add(1,2))

        // μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ 호좜
        MyMath2 mm = new MyMath2();

        mm.a = 1;
        mm.b = 2;

        System.out.println(mm.add());

    }

}

πŸ”₯ κ²°λ‘  πŸ”₯

static λ©”μ„œλ“œλŠ” 객체 생성없이 호좜이 κ°€λŠ₯ν•˜λ‹€. λ°˜λ©΄μ— ivλŠ” 객체 생성 후에

호좜 κ°€λŠ₯ν•˜λ‹€. 즉, iv의 집합인 객체가 생성이 λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, static λ©”μ„œλ“œλŠ”

iv, im을 μ‚¬μš©ν•  수 μ—†λŠ” 것이닀.



λ©”μ†Œλ“œ 호좜

λ©”μ†Œλ“œλŠ” 클래슀 λ‚΄λΆ€ 및 μ™ΈλΆ€μ—μ„œ 호좜이 κ°€λŠ₯ν•˜λ‹€.

클래슀 λ‚΄λΆ€μ˜ λ‹€λ₯Έ λ©”μ†Œλ“œμ—μ„œ ν˜ΈμΆœν•  κ²½μš°μ—λŠ” λ‹¨μˆœν•œ λ©”μ†Œλ“œ μ΄λ¦„μœΌλ‘œ ν˜ΈμΆœν•˜λ©΄ λœλ‹€.

ν•˜μ§€λ§Œ 클래슀 μ™ΈλΆ€μ—μ„œ ν˜ΈμΆœν•  κ²½μš°μ—λŠ” μš°μ„  ν΄λž˜μŠ€λ‘œλΆ€ν„° 객체λ₯Ό μƒμ„±ν•œ λ’€ μ°Έμ‘° λ³€μˆ˜λ₯Ό

μ΄μš©ν•΄μ„œ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€.


  • 클래슀 λ‚΄λΆ€μ—μ„œ ν˜ΈμΆœν•˜λŠ” 경우
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class TestClass {

    // static method
    static void staticMethod1 (int x, int y) {
        int result = x + y;
        return result;
    }

    // instance method
    void instanceMethod1 () {
    
        method1(1,2); // staticMethod1 호좜
    }

}


  • 클래슀 μ™ΈλΆ€μ—μ„œ ν˜ΈμΆœν•˜λŠ” 경우

μš°μ„  클래슀둜 λΆ€ν„° 객체λ₯Ό 생성해야 ν•œλ‹€. μ™œλƒλ©΄ λ§€μ†Œλ“œλŠ” 객체에 μ†Œμ†λœ λ©€λ²„μ΄λ―€λ‘œ

객체가 μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄ λ©”μ†Œλ“œλ„ μ‘΄μž¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ΄λ‹€.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package test.test;

public class TestClass {

    public static void main(String[] args) {

        // μƒˆλ‘œμš΄ 객체 생성
        Test mathTest = new Test();

        // μ™ΈλΆ€μ—μ„œ μ ‘κ·Ό
        mathTest.method1();
        mathTest.method2();

    }

}


πŸ”Ž μŠ€νƒ

호좜 μŠ€νƒμ΄λž€?

λ©”μ„œλ“œ μˆ˜ν–‰μ— ν•„μš”ν•œ λ©”λͺ¨λ¦¬κ°€ μ œκ³΅λ˜λŠ” 곡간이닀.

λ©”μ„œλ“œκ°€ 호좜되면 호좜 μŠ€ν…μ— λ©”λͺ¨λ¦¬ν• λ‹Ή, μ’…λ£Œλ˜λ©΄ ν•΄μ œλœλ‹€.

맨 μ•„λž˜μ˜ main λ©”μ„œλ“œκ°€ println λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜κ²Œ 되면,

μŠ€νƒμ΄ μ•„λž˜μ™€ 같이 μŒ“μ΄κ²Œ 되고, 맨 μœ„μ— μžˆλŠ” λ©”μ„œλ“œλ§Œ μ‹€ν–‰λ˜λ©°

λ‚˜λ¨Έμ§€λŠ” λ©”μ„œλ“œλŠ” λŒ€κΈ°μƒνƒœκ°€ λœλ‹€.

STACK μƒνƒœ
println μ‹€ν–‰
main λŒ€κΈ°

이 κΈ°μ‚¬λŠ” μ €μž‘κΆŒμžμ˜ CC BY 4.0 λΌμ΄μ„ΌμŠ€λ₯Ό λ”°λ¦…λ‹ˆλ‹€.