λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ“— Book/μžλ°”μ˜ 정석

6-2μž₯ ν΄λž˜μŠ€μ™€ 객체

by hyeon-z 2023. 3. 29.

 

6-1μž₯ 객체지ν–₯μ–Έμ–΄λŠ” κ°€λ³κ²Œ 읽어보면 쒋을 λ‚΄μš©μ΄λΌ μ •λ¦¬λŠ” μƒλž΅ν–ˆλ‹€.

 

1. ν΄λž˜μŠ€μ™€ 객체의 μ •μ˜μ™€ μš©λ„

클래슀

 

μ •μ˜: 객체λ₯Ό μ •μ˜ν•΄ 놓은 것, 객체의 섀계도 λ˜λŠ” ν‹€

μš©λ„: 객체λ₯Ό μƒμ„±ν•˜λŠ” 데 μ‚¬μš©

 

ν΄λž˜μŠ€λŠ” κ°μ²΄λ₯Ό μƒμ„±ν•˜λŠ” 데 μ‚¬μš©λ˜λ©°, κ°μ²΄λŠ” ν΄λž˜μŠ€μ— μ •μ˜λœλŒ€λ‘œ μƒμ„±λœλ‹€.

 

객체

 

μ •μ˜: μ‹€μ œλ‘œ μ‘΄μž¬ν•˜λŠ” 것. 사물 λ˜λŠ” κ°œλ…

μš©λ„: 객체가 κ°€μ§€κ³  μžˆλŠ” κΈ°λŠ₯κ³Ό 속성에 따라 닀름

 

μ˜ˆμ‹œλ₯Ό 톡해 μ‚΄νŽ΄λ³΄κΈ°

TV섀계도(클래슀)λŠ” TVλΌλŠ” μ œν’ˆ(객체)을 μ •μ˜ν•œ 것 이며. TV(객체)λ₯Ό λ§Œλ“œλŠ”λ° μ‚¬μš©λœλ‹€.

 

ν΄λž˜μŠ€λŠ” 단지 객체λ₯Ό μƒμ„±ν•˜λŠ” 데 μ‚¬μš©λ  뿐, 객체 κ·Έ μžμ²΄λŠ” μ•„λ‹ˆλ‹€.

μš°λ¦¬κ°€ μ›ν•˜λŠ” κΈ°λŠ₯의 객체λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ¨Όμ € ν΄λž˜μŠ€λ‘œλΆ€ν„° 객체λ₯Ό μƒμ„±ν•˜λŠ” 과정이 μ„ ν–‰λ˜μ–΄μ•Ό ν•œλ‹€.

 

2. 객체와 μΈμŠ€ν„΄μŠ€

πŸ’‘ν΄λž˜μŠ€λ‘œλΆ€ν„° 객체λ₯Ό λ§Œλ“œλŠ” 과정을 클래슀의 μΈμŠ€ν„΄μŠ€ν™”(instantiate)라고 ν•˜λ©°, μ–΄λ–€ ν΄λž˜μŠ€λ‘œλΆ€ν„° λ§Œλ“€μ–΄μ§„ 객체λ₯Ό κ·Έ 클래슀의 μΈμŠ€ν„΄μŠ€(instance)라고 ν•œλ‹€.

 

μΈμŠ€ν„΄μŠ€μ™€ κ°μ²΄λŠ” 같은 μ˜λ―Έμ΄μ§€λ§Œ, κ°μ²΄λŠ” λͺ¨λ“  μΈμŠ€ν„΄μŠ€λ₯Ό λŒ€ν‘œν•˜λŠ” 포괄적인 의미λ₯Ό κ°€μ§€κ³  μžˆλ‹€.

μΈμŠ€ν„΄μŠ€λŠ” μ–΄λ–€ ν΄λž˜μŠ€λ‘œλΆ€ν„° λ§Œλ“€μ–΄μ§„ 것인지λ₯Ό κ°•μ‘°ν•˜λŠ” 보닀 ꡬ체적인 의미λ₯Ό κ°€μ§€κ³  μžˆλ‹€.

 

예λ₯Ό λ“€μ–΄ '책상은 μΈμŠ€ν„΄μŠ€λ‹€.'라고 ν•˜κΈ°λ³΄λ‹€λŠ” '책상은 객체닀'κ°€ 더 μžμ—°μŠ€λŸ½κ³ ,

'책상은 책상 클래슀의 객체이닀.'라고 ν•˜κΈ°λ³΄λ‹€λŠ” '책상은 책상 클래슀의 μΈμŠ€ν„΄μŠ€λ‹€.'라고 ν•˜λŠ” 것이 더 μžμ—°μŠ€λŸ½λ‹€.

 

3. 객체의 κ΅¬μ„±μš”μ†Œ - 속성과 κΈ°λŠ₯

πŸ’‘κ°μ²΄λŠ” 속성과 κΈ°λŠ₯, 두 μ’…λ₯˜μ˜ κ΅¬μ„±μš”μ†Œλ‘œ 이루어져 μžˆλ‹€. 객체가 κ°€μ§€κ³  μžˆλŠ” 속성과 κΈ°λŠ₯을 κ·Έ 객체의 멀버(member)라 ν•œλ‹€.

 

속성, κΈ°λŠ₯κ³Ό 같은 뜻의 μ—¬λŸ¬κ°€μ§€ μš©μ–΄

 

속성(property): 멀버 λ³€μˆ˜(member variable), νŠΉμ„±(attribute), ν•„λ“œ(field), μƒνƒœ(state)

κΈ°λŠ₯(function): λ©”μ„œλ“œ(method), ν•¨μˆ˜(function), ν–‰μœ„(behavior)

 

μ˜ˆμ‹œλ₯Ό 톡해 μ‚΄νŽ΄λ³΄κΈ°

 

객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” 속성과 κΈ°λŠ₯을 각각 λ³€μˆ˜μ™€ λ©”μ„œλ“œλ‘œ ν‘œν˜„ν•œλ‹€.

 

μœ„μ—μ„œ λΆ„μ„ν•œ ν† λŒ€λ‘œ Tv클래슀λ₯Ό λ§Œλ“€μ–΄λ³΄μž.

μ†μ„±μ΄μ—ˆλ˜ 색상, 전원 μƒνƒœ, 채널은 멀버 λ³€μˆ˜λ‘œ, κΈ°λŠ₯μ΄μ—ˆλ˜ 켜기, 채널 λ³€κ²½ν•˜κΈ°λŠ” λ©”μ„œλ“œλ‘œ ν‘œν˜„λ˜μ—ˆλ‹€.

class Tv {
    String color;  // 색상
    boolean power; // 전원 μƒνƒœ
    int channel;  // 채널

    void power() {
        power = !power;
    }

    void channelUp() {
        channel++;
    }

    void channelDown() {
        channel--;
    }
}

 

4. μΈμŠ€ν„΄μŠ€μ˜ 생성과 μ‚¬μš©

μœ„μ—μ„œ Tv클래슀λ₯Ό μ„ μ–Έν•œ 것은 단지 Tv 섀계도λ₯Ό μž‘μ„±ν•œ 것에 λΆˆκ³Όν•˜λ‹€.

Tvλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” Tv μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•΄μ•Όν•œλ‹€.

 

μΈμŠ€ν„΄μŠ€μ˜ 생성

 

1. 클래슀의 객체λ₯Ό μ°Έμ‘°ν•˜κΈ° μœ„ν•œ μ°Έμ‘°λ³€μˆ˜ μ„ μ–Έ

2. 클래슀의 객체λ₯Ό 생성 ν›„, 객체의 μ£Όμ†Œλ₯Ό μ°Έμ‘°λ³€μˆ˜μ— μ €μž₯

 

Tv t;  // 클래슀λͺ… λ³€μˆ˜λͺ…
t = new Tv();  // λ³€μˆ˜λͺ… = new 클래슀λͺ…()

 

예제 1둜 μ‚΄νŽ΄λ³΄κΈ°

 

public class TvTest {
    public static void main(String[] args) {
        Tv t;
        t = new Tv();

        t.channel = 7;
        t.channelDown();
        System.out.println("ν˜„μž¬ 채널은 " + t.channel + "μž…λ‹ˆλ‹€");
    }
}

 

1. Tv t;

Tv클래슀 νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜ tλ₯Ό μ„ μ–Έν•œλ‹€. λ©”λͺ¨λ¦¬μ— μ°Έμ‘°λ³€μˆ˜ tλ₯Ό μœ„ν•œ 곡간이 λ§ˆλ ¨λœλ‹€.

아직 μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λ˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ μ°Έμ‘°λ³€μˆ˜λ‘œ 아무것도 ν•  수 μ—†λ‹€.

 

2. t = new Tv();

μ—°μ‚°μž new에 μ˜ν•΄ Tv클래슀의 μΈμŠ€ν„΄μŠ€κ°€ λ©”λͺ¨λ¦¬μ˜ 빈 곡간에 μƒμ„±λœλ‹€.

μ£Όμ†Œκ°€ 0x100인 곳에 μƒμ„±λ˜μ—ˆλ‹€κ³  κ°€μ •ν•˜μž. μ΄λ•Œ, λ©€λ²„λ³€μˆ˜λŠ” 각 μžλ£Œν˜•μ— ν•΄λ‹Ήν•˜λŠ” κΈ°λ³Έκ°’μœΌλ‘œ μ΄ˆκΈ°ν™”λœλ‹€.

colorλŠ” μ°Έμ‘°ν˜•μ΄λ―€λ‘œ null둜, powerλŠ” booleanμ΄λ―€λ‘œ false둜, 그리고 channel은 intμ΄λ―€λ‘œ 0으둜 μ΄ˆκΈ°ν™”λœλ‹€.

 

κ·Έλ‹€μŒμ—λŠ” λŒ€μž…μ—°μ‚°μž(=)에 μ˜ν•΄μ„œ μƒμ„±λœ 객체의 μ£Όμ†Œκ°’μ΄ μ°Έμ‘°λ³€μˆ˜μ— μ €μž₯λœλ‹€.

μ΄μ œλŠ” μ°Έμ‘°λ³€μˆ˜ tλ₯Ό 톡해 TVμΈμŠ€ν„΄μŠ€μ— μ ‘κ·Όν•  수 μžˆλ‹€.

μΈμŠ€ν„΄μŠ€λ₯Ό 닀루기 μœ„ν•΄μ„œλŠ” μ°Έμ‘°λ³€μˆ˜κ°€ λ°˜λ“œμ‹œ ν•„μš”ν•˜λ‹€.

 

3. t.channel = 7;

μ°Έμ‘°λ³€μˆ˜ t에 μ €μž₯된 μ£Όμ†Œμ— μžˆλŠ” μΈμŠ€ν„΄μŠ€μ˜ λ©€λ²„λ³€μˆ˜ channel에 7을 μ €μž₯ν•œλ‹€.

μ—¬κΈ°μ„œ μ•Œ 수 μžˆλŠ” κ²ƒμ²˜λŸΌ, μΈμŠ€ν„΄μŠ€μ˜ λ©€λ²„λ³€μˆ˜(속성)λ₯Ό μ‚¬μš©ν•˜λ €λ©΄ ‘μ°Έμ‘°λ³€μˆ˜.λ©€λ²„λ³€μˆ˜’와 같이 ν•˜λ©΄ λœλ‹€.

 

4. t.channelDown();

μ°Έμ‘°λ³€μˆ˜ tκ°€ μ°Έμ‘°ν•˜κ³  μžˆλŠ” TvμΈμŠ€ν„΄μŠ€μ˜ channelDownλ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œλ‹€.

channel Downλ©”μ„œλ“œλŠ” λ©€λ²„λ³€μˆ˜ channel에 μ €μž₯λ˜μ–΄ μžˆλŠ” 값을 1 κ°μ†Œμ‹œν‚¨λ‹€.

 

5. System.out.println("ν˜„μž¬ 채널은 " + t.channel + "μž…λ‹ˆλ‹€.");

μ°Έμ‘°λ³€μˆ˜ tκ°€ μ°Έμ‘°ν•˜κ³  μžˆλŠ” TvμΈμŠ€ν„΄μŠ€μ˜ λ©€λ²„λ³€μˆ˜ channel에 μ €μž₯λ˜μ–΄ μžˆλŠ” 값을 좜λ ₯ν•œλ‹€.

ν˜„μž¬ channel의 값은 6μ΄λ―€λ‘œ ‘ν˜„μž¬ 채널은 6μž…λ‹ˆλ‹€.’κ°€ 화면에 좜λ ₯λœλ‹€.

 

=> μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°λ³€μˆ˜λ₯Ό ν†΅ν•΄μ„œλ§Œ λ‹€λ£° 수 있으며, μ°Έμ‘°λ³€μˆ˜μ˜ νƒ€μž…μ€ μΈμŠ€ν„΄μŠ€μ˜ νƒ€μž…κ³Ό μΌμΉ˜ν•΄μ•Ό ν•œλ‹€.

 

예제 2둜 μ‚΄νŽ΄λ³΄κΈ°

 

public class TvTest {
    public static void main(String[] args) {
        Tv t1 = new Tv();
        Tv t2 = new Tv();

        t2 = t1;
        t1.channel = 7;

        System.out.println(t1.channel);  // 7
        System.out.println(t2.channel);  // 7
    }
}

 

1. Tv t1 = new Tv(); Tv t2 = new Tv();

2개의 Tv클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό 생성 ν›„ μ°Έμ‘°λ³€μˆ˜μ— 객체의 μ£Όμ†Ÿκ°’μ„ μ €μž₯ν•œλ‹€.

 

 

2. t2 = t1;

t1은 μ°Έμ‘°λ³€μˆ˜μ΄λ―€λ‘œ, μΈμŠ€ν„΄μŠ€μ˜ μ£Όμ†Œλ₯Ό μ €μž₯ν•˜κ³  μžˆλ‹€.

이 λ¬Έμž₯이 μˆ˜ν–‰λ˜λ©΄, t2κ°€ κ°€μ§€κ³  있던 κ°’ 은 μžƒμ–΄λ²„λ¦¬κ²Œ 되고 t1에 μ €μž₯λ˜μ–΄ 있던 값이 t2에 μ €μž₯되게 λœλ‹€.

κ·Έλ ‡κ²Œ 되면 t2 μ—­μ‹œ t1이 μ°Έμ‘°ν•˜κ³  있던 μΈμŠ€ν„΄μŠ€λ₯Ό 같이 μ°Έμ‘°ν•˜κ²Œ 되고, t2κ°€ μ›λž˜ μ°Έμ‘°ν•˜κ³  있던 μΈμŠ€ν„΄μŠ€λŠ” 더 이상 μ‚¬μš©ν•  수 μ—†κ²Œ λœλ‹€.

 

* μžμ‹ μ„ μ°Έμ‘°ν•˜κ³  μžˆλŠ” μ°Έμ‘°λ³€μˆ˜κ°€ ν•˜λ‚˜λ„ μ—†λŠ” μΈμŠ€ν„΄μŠ€λŠ” 더 이상 μ‚¬μš©λ  수 μ—†μœΌλ―€λ‘œ ‘κ°€λΉ„μ§€ 컬렉터 (Garbage Collector)’에 μ˜ν•΄μ„œ μžλ™μ μœΌλ‘œ λ©”λͺ¨λ¦¬μ—μ„œ μ œκ±°λœλ‹€.

 

3. t1.channel = 7;

channel의 값을 7둜 ν•œλ‹€.

 

4. System.out.println(t1.channel); System.out.println(t2.channel); 

이제 t1κ³Ό t2κ°€ λͺ¨λ‘ 같은 Tv클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό κ°€μ§€κ³  있기 λ•Œλ¬Έμ— t1.channelκ³Ό t2.channel의 값은 7이닀.

 

μ°Έμ‘°λ³€μˆ˜μ™€ μΈμŠ€ν„΄μŠ€μ˜ 관계

 

μ°Έμ‘°λ³€μˆ˜μ—λŠ” ν•˜λ‚˜μ˜ κ°’(μ£Όμ†Œ)만이 μ €μž₯될 수 μžˆμœΌλ―€λ‘œ λ‘˜ μ΄μƒμ˜ μ°Έμ‘°λ³€μˆ˜κ°€ ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό κ°€λ¦¬ν‚€λŠ”(μ°Έμ‘°ν•˜λŠ”) 것은 κ°€λŠ₯ν•˜μ§€λ§Œ ν•˜λ‚˜μ˜ μ°Έμ‘°λ³€μˆ˜λ‘œ μ—¬λŸ¬ 개의 μΈμŠ€ν„΄μŠ€λ₯Ό κ°€λ¦¬ν‚€λŠ” 것은 λΆˆκ°€λŠ₯ν•˜λ‹€.

 

5. 객체 λ°°μ—΄

객체 λ°°μ—΄ μ•ˆμ— 객체가 μ €μž₯λ˜λŠ” 것은 μ•„λ‹ˆκ³ , 객체의 μ£Όμ†Œκ°€ μ €μž₯λœλ‹€.

즉, 객체 배열은 μ°Έμ‘°λ³€μˆ˜λ“€μ„ ν•˜λ‚˜λ‘œ 묢은 μ°Έμ‘°λ³€μˆ˜ 배열이닀.

 

1. 객체 λ°°μ—΄ 생성

Tv[] tvArr = new Tv[3];

각 μš”μ†ŒλŠ” μ°Έμ‘°λ³€μˆ˜μ˜ κΈ°λ³Έ 값인 null둜 μ΄ˆκΈ°ν™”λœλ‹€.

이 객체 배열은 3개의 객체의 μ£Όμ†Œλ₯Ό μ €μž₯ν•  수 μžˆλ‹€.

 

2. 객체λ₯Ό μƒμ„±ν•΄μ„œ 객체 λ°°μ—΄μ˜ 각 μš”μ†Œμ— μ €μž₯

Tv[] tvArr = new Tv[3];

tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();

 

- λ°°μ—΄μ˜ μ΄ˆκΈ°ν™” 블둝 μ‚¬μš©

Tv[] tvArr = {new Tv(), new Tv(), new Tv()};

 

- forλ¬Έ μ‚¬μš©

Tv[] tvArr = new Tv[100];

for (int i = 0; i < tvArr.length; i++) {
    tvArr[i] = new Tv();
}

 

6. 클래슀의 또 λ‹€λ₯Έ μ •μ˜

1. 클래슀 - 데이터와 ν•¨μˆ˜μ˜ κ²°ν•©

 

데이터 μ €μž₯κ°œλ…μ˜ λ°œμ „κ³Όμ •

1. λ³€μˆ˜: ν•˜λ‚˜μ˜ 데이터λ₯Ό μ €μž₯ν•  수 μžˆλŠ” 곡간

2. λ°°μ—΄: 같은 μ’…λ₯˜μ˜ μ—¬λŸ¬ 데이터λ₯Ό ν•˜λ‚˜μ˜ μ§‘ν•©μœΌλ‘œ μ €μž₯ν•  수 μžˆλŠ” 곡간

3. ꡬ쑰체: μ„œλ‘œ κ΄€λ ¨λœ μ—¬λŸ¬ 데이터λ₯Ό μ’…λ₯˜μ— 관계없이 ν•˜λ‚˜μ˜ μ§‘ν•©μœΌλ‘œ μ €μž₯ν•  수 μžˆλŠ” 곡간

4. 클래슀: 데이터와 ν•¨μˆ˜μ˜ κ²°ν•©(ꡬ쑰체 + ν•¨μˆ˜)

 

μ΄μ „μ—λŠ” λ°μ΄ν„°λŠ” 데이터끼리, ν•¨μˆ˜λŠ” ν•¨μˆ˜λΌλ¦¬ λ”°λ‘œ 닀루어져 μ™”μ§€λ§Œ, 사싀 ν•¨μˆ˜λŠ” 주둜 데이터λ₯Ό κ°€μ§€κ³  μž‘μ—…μ„ ν•˜κΈ° λ•Œλ¬Έμ— λ§Žμ€ κ²½μš°μ— μžˆμ–΄μ„œ 데이터와 ν•¨μˆ˜λŠ” 관계가 κΉŠλ‹€.

λ”°λΌμ„œ μžλ°”μ™€ 같은 객체지ν–₯μ–Έμ–΄μ—μ„œλŠ” λ³€μˆ˜(데이터)와 ν•¨μˆ˜λ₯Ό ν•˜λ‚˜μ˜ ν΄λž˜μŠ€μ— μ •μ˜ν•˜μ—¬ μ„œλ‘œ 관계가 κΉŠμ€ λ³€μˆ˜μ™€ ν•¨μˆ˜λ“€μ„ ν•¨κ»˜ λ‹€λ£° 수 있게 ν–ˆλ‹€.

 

=> μ„œλ‘œ κ΄€λ ¨λœ λ³€μˆ˜λ“€μ„ μ •μ˜ν•˜κ³  이듀에 λŒ€ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” ν•¨μˆ˜λ“€μ„ ν•¨κ»˜ μ •μ˜ν•œ 것이 λ°”λ‘œ ν΄λž˜μŠ€μ΄λ‹€.

 

+) 예λ₯Ό λ“€μ–΄, μžλ°”μ—μ„œλŠ” λ¬Έμžμ—΄μ„ λ‹¨μˆœνžˆ 문자의 배열이라고 μ •μ˜ν•˜μ§€ μ•Šκ³  Stringμ΄λΌλŠ” 클래슀둜 μ •μ˜ν–ˆλ‹€.

κ·Έ μ΄μœ λŠ” λ¬Έμžμ—΄κ³Ό λ¬Έμžμ—΄μ„ λ‹€λ£¨λŠ”λ° ν•„μš”ν•œ ν•¨μˆ˜(ex. replace)듀을 ν•¨κ»˜ λ¬ΆκΈ° μœ„ν•΄μ„œμ΄λ‹€.

 

2. 클래슀 - μ‚¬μš©μžμ •μ˜ νƒ€μž…(user - defined type)

 

πŸ’‘ν”„λ‘œκ·Έλž˜λ°μ–Έμ–΄μ—μ„œ μ œκ³΅ν•˜λŠ” μžλ£Œν˜•(primitive type) 외에 ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μ„œλ‘œ κ΄€λ ¨λœ λ³€μˆ˜λ“€μ„ λ¬Άμ–΄μ„œ ν•˜λ‚˜μ˜ νƒ€μž…μœΌλ‘œ μƒˆλ‘œ μΆ”κ°€ν•˜λŠ” 것을 μ‚¬μš©μžμ •μ˜ νƒ€μž…(user-defined type)이라고 ν•œλ‹€.

 

μžλ°”μ™€ 같은 객체지ν–₯μ–Έμ–΄μ—μ„œλŠ” ν΄λž˜μŠ€κ°€ κ³§ μ‚¬μš©μžμ •μ˜ νƒ€μž…μ΄λ‹€.

 

κΈ°λ³Έν˜•μ˜ κ°œμˆ˜λŠ” 8개둜 μ •ν•΄μ Έ μžˆμ§€λ§Œ μ°Έμ‘°ν˜•μ€ κ°œμˆ˜κ°€ μ •ν•΄μ Έ μžˆμ§€ μ•Šλ‹€.

κ·Έ μ΄μœ λŠ” ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μƒˆλ‘œμš΄ νƒ€μž…μ„ μΆ”κ°€ν•  수 있기 λ•Œλ¬Έμ΄λ‹€.

 

❓3개의 μ‹œκ°„(hour, minute, second)을 닀뀄야 ν•œλ‹€λ©΄ μ–΄λ–»κ²Œ ν‘œν˜„ν•΄μ•Ό ν• κΉŒ?

μœ„μ˜ ν‘œλ₯Ό 보면 2κ°€μ§€λ‘œ λ‚˜λˆ„μ–΄μ„œ ν‘œν˜„ν•  수 μžˆλ‹€.

 

μ™Όμͺ½ μ½”λ“œ

- 비객체지ν–₯적인 μ½”λ“œ

- λ°μ΄ν„°μ˜ κ°œμˆ˜κ°€ λŠ˜μ–΄λ‚˜λ©΄, λ³€μˆ˜λ₯Ό 맀번 μƒˆλ‘œ μ„ μ–Έν•΄μ€˜μ•Ό ν•œλ‹€.

- ν•˜λ‚˜μ˜ μ‹œκ°„μ„ κ΅¬μ„±ν•˜λŠ” μ‹œ, λΆ„, μ΄ˆκ°€ λ’€μ„žμ—¬μ„œ μ˜¬λ°”λ₯΄μ§€ μ•Šμ€ 데이터가 될 수 μžˆλ‹€.

 

였λ₯Έμͺ½ μ½”λ“œ

- κ°μ²΄μ§€ν–₯적인 μ½”λ“œ

- λ°μ΄ν„°μ˜ κ°œμˆ˜κ°€ λŠ˜μ–΄λ‚˜λ”λΌλ„ λ°°μ—΄μ˜ 크기만 λ³€κ²½ν•΄ μ£Όλ©΄ λ˜λ―€λ‘œ μ™Όμͺ½ μ½”λ“œμ™€ 같은 λΆˆνŽΈν•¨κ³Ό λ³΅μž‘ν•¨μ€ μ—†μ–΄μ‘Œλ‹€.

- ν•˜λ‚˜μ˜ μ‹œκ°„μ„ κ΅¬μ„±ν•˜λŠ” μ‹œ, λΆ„, 초λ₯Ό ν•˜λ‚˜λ‘œ λ¬Άμ–΄μ„œ 관리할 수 μžˆλ‹€.

 

β“μ•„λž˜μ™€ 같은 쑰건이 μ£Όμ–΄μ§„λ‹€λ©΄ μ–΄λ–»κ²Œ κ΅¬ν˜„ν•΄μ•Ό ν• κΉŒ?

1. μ‹œ, λΆ„, μ΄ˆλŠ” λͺ¨λ‘ 0보닀 ν¬κ±°λ‚˜ κ°™μ•„μ•Ό ν•œλ‹€. 
2. μ‹œμ˜ λ²”μœ„λŠ” 0~23, λΆ„κ³Ό 초의 λ²”μœ„λŠ” 0~59이닀.

 

class Time {
    private int hour;
    private int minute;
    private float second;

    public int getHour() {
        return hour;
    }

    public int getMinute() {
        return minute;
    }

    public float getSecond() {
        return second;
    }

    public void setHour(int h) {
        if (h < 0 || h > 23) return;
        hour = h;
    }

    public void setMinute(int m) {
        if (m < 0 || m > 59) return;
        minute = m;
    }

    public void setSecond(float s) {
        if (s < 0.0f || s > 59.99f) return;
        second = s;
    }
}

값을 λ³€κ²½ν•  λ•Œ μ§€μ •λœ κ°’μ˜ μœ νš¨μ„±μ„ 쑰건문으둜 μ κ²€ν•œ λ‹€μŒμ— μœ νš¨ν•œ 값일 κ²½μš°μ—λ§Œ λ³€κ²½ν•œλ‹€.

이처럼 객체지ν–₯μ–Έμ–΄μ—μ„œλŠ” μ œμ–΄μžμ™€ λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄μ„œ μ΄λŸ¬ν•œ 쑰건듀을 μ½”λ“œμ— μ‰½κ²Œ λ°˜μ˜ν•  수 μžˆλ‹€.

 

 

Reference

μžλ°”μ˜ 정석 - 남ꢁ μ„±

λŒ“κΈ€