λ‚˜λ§Œμ˜ μ˜€λž˜λ‹¬λ¦¬κΈ°λ₯Ό ν•˜λŠ” μ‚¬λžŒ

Become a ghost

Programming - Language/JAVA

[250224] JAVA κΈ°λ³Έ 문법 - 객체지ν–₯, 클래슀, 객체, λ©”μ„œλ“œ (feat. 점프 투 μžλ°”) / λ§€κ°œλ³€μˆ˜μ™€ 인수의 차이, μž…λ ₯κ°’κ³Ό λ¦¬ν„΄κ°’μ˜ 차이

jennnnna 2025. 2. 24. 23:13

 

μžλ°”λŠ” 객체 지ν–₯ (object oriented) ν”„λ‘œκ·Έλž˜λ° 언어이닀. 

객체 지ν–₯κ³Ό κ΄€λ ¨ν•΄μ„œλŠ” 클래슀, 객체, μΈμŠ€ν„΄μŠ€, 상속, μΈν„°νŽ˜μ΄μŠ€, λ‹€ν˜•μ„±, 좔상화 λ“±μ˜ κ°œλ…μ΄ μ‘΄μž¬ν•œλ‹€. 

ν•œ κ°œμ”© 이해해보도둝 ν•˜μž. 

이 κ²Œμ‹œκΈ€μ—μ„œλŠ” 클래슀, 객체, μΈμŠ€ν„΄μŠ€λ§Œ μ–ΈκΈ‰ν•  μ˜ˆμ •

 

객체 지ν–₯μ΄λž€? 

κ΅­μ–΄ 사전 λœ»μ— μ˜ν•˜λ©΄ 

"독립적인 각각의 객체둜 ν”„λ‘œκ·Έλž¨μ΄λ‚˜ μ‹œμŠ€ν…œμ„ κ΅¬μ„±ν•˜λŠ” 일" 이라고 μ •μ˜ν•˜κ³  있으며 

객체: λ¬Έμž₯ λ‚΄μ—μ„œ λ™μ‚¬μ˜ ν–‰μœ„κ°€ λ―ΈμΉ˜λŠ” λŒ€μƒ, μž‘μš©μ˜ λŒ€μƒμ΄ λ˜λŠ” μͺ½, μ˜μ‚¬λ‚˜ ν–‰μœ„κ°€ λ―ΈμΉ˜λŠ” λŒ€μƒ ex. μ„ μƒλ‹˜μ΄ μˆ λž˜μ—κ²Œ μž‘νžˆμ…¨λ‹€. μ„ μƒλ‹˜=객체 

지ν–₯: μ–΄λ–€ λͺ©ν‘œλ‘œ 뜻이 쓸리어 ν–₯함. λ˜λŠ” κ·Έ λ°©ν–₯μ΄λ‚˜ κ·Έμͺ½μœΌλ‘œ μ λ¦¬λŠ” μ˜μ§€. ex. 평화톡일 지ν–₯. 

 

즉, μžλ°”λŠ” ν”„λ‘œκ·Έλž¨μ„ κ΅¬μ„±ν•˜λŠ” μš”μ†Œλ“€μ„ νŠΉμ • λŒ€μƒ λ‹¨μœ„λ‘œ κ΅¬λΆ„ν•˜μ—¬μ„œ λ™μž‘ν•  것을 지ν–₯ν•˜λŠ” μ–Έμ–΄. 

객체둜 λ‚˜λˆ μ Έ μžˆμ–΄μ•Όλ§Œ λ™μž‘ν•˜λŠ” 것도 μ•„λ‹ˆκ³  지ν–₯을 ν•œλ‹€κ³  λ§ν•˜κ³  있음. 

클래슀(객체)λ₯Ό 잘 λ‚˜λˆŒμˆ˜λ‘ μžλ°”λ₯Ό μ œλŒ€λ‘œ μ“°κ³  μžˆλ‹€λŠ” 것..

 

 

ν΄λž˜μŠ€μ™€ 객체 

μžλ°” 곡식 λ¬Έμ„œμ— μ˜ν•˜λ©΄, ν΄λž˜μŠ€λž€ μ‹€μ œ 세계에 μ‘΄μž¬ν•˜λŠ” 객체(things)듀이 μƒμ„±λ˜λŠ” 섀계도 라고 ν‘œν˜„ν•˜κ³  μžˆλ‹€. 

'μžμ „κ±°'둜 예λ₯Ό λ“€λ©΄ λ™μΌν•œ μ œμ‘°μ‚¬μ™€ λͺ¨λΈμ˜ μžμ „κ±°κ°€ 수천 λŒ€ μ‘΄μž¬ν•  수 μžˆμ§€λ§Œ 이 μžμ „κ±°λ“€μ€ λ™μΌν•œ 섀계도λ₯Ό 기반으둜 λ§Œλ“€μ–΄μ Έ 같은 ꡬ성 μš”μ†Œλ“€μ„ ν¬ν•¨ν•˜κ³  있고 이에 λŒ€ν•œ 'μžμ „κ±° 섀계도'κ°€ λ°”λ‘œ 클래슀 (class) κ°œλ…μΈ 것이닀. 

좜처링크: The Java Tutorial https://docs.oracle.com/javase/tutorial/java/concepts/class.html

 

 

 

 

 

클래슀λ₯Ό λ§Œλ“€λ©΄ 클래슀의 객체(object)λ₯Ό 생성할 수 μžˆλ‹€. 

class Animal {
}

public class Sample {
    public static void main(String[] args) {
        Animal cat = new Animal();
    }
}

// Animal 클래슀의 μΈμŠ€ν„΄μŠ€, 즉 Animal 의 객체가 λ§Œλ“€μ–΄μ§.


// μ˜ˆμ‹œ
Animal cat = new Animal();
Animal dog = new Animal();
Animal horse = new Animal();
...

 

new ν‚€μ›Œλ“œλŠ” 객체λ₯Ό 생성할 λ•Œ μ‚¬μš©ν•˜λŠ” ν‚€μ›Œλ“œμ΄λ‹€. 

 

객체와 μΈμŠ€ν„΄μŠ€μ˜ μ°¨μ΄λŠ”? 

ν΄λž˜μŠ€μ— μ˜ν•΄ λ§Œλ“€μ–΄μ§„ κ°μ²΄λŠ” μΈμŠ€ν„΄μŠ€μ΄λ‹€. 

Animal cat = new Animal(); 

μ΄λ ‡κ²Œ λ§Œλ“€μ–΄μ§„ cat 은 객체이닀. 그리고 cat μ΄λΌλŠ” κ°μ²΄λŠ” Animal의 μΈμŠ€ν„΄μŠ€μ΄λ‹€. 

μΈμŠ€ν„΄μŠ€λΌλŠ” 말은 μœ„μ™€ 같이 "OO 클래슀의 μΈμŠ€ν„΄μŠ€μ΄λ‹€."관계λ₯Ό μ„€λͺ…ν• λ•Œ μ‚¬μš©ν•œλ‹€.

(μ™œ ꡳ이 ꡬ뢄이 λ˜λŠ”μ§€λŠ” λͺ¨λ₯΄κ² λ„€) 

즉,  cat 은 μΈμŠ€ν„΄μŠ€μ΄λ‹€ λ³΄λ‹€λŠ” cat 은 객체이닀. 그리고 Animal의 μΈμŠ€ν„΄μŠ€μ΄λ‹€. 

 

객체 λ³€μˆ˜ (instance variable)λž€?  

String name 은 ν΄λž˜μŠ€μ— μ„ μ–Έλœ 객체 λ³€μˆ˜μ΄λ‹€. 

객체의 μƒνƒœ(state) λ₯Ό λ‚˜νƒ€λ‚Έλ‹€. 

 

객체 λ³€μˆ˜λŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜, 멀버 λ³€μˆ˜, 속성 이라고도 ν•œλ‹€ 

class Animal {
    String name;
}

public class Sample {
    public static void main(String[] args) {
        Animal cat = new Animal();
    }
}


// 객체 λ³€μˆ˜ μ ‘κ·Ό 방법?
// λ„νŠΈ μ—°μ‚°μž (.) λ₯Ό μ΄μš©ν•΄ μ ‘κ·Όν•œλ‹€. 
cat.name

 

 

** ν˜„μž¬ name μ—λŠ” 값이 ν• λ‹Ήλ˜μ–΄ μžˆμ§€ μ•ŠμœΌλ―€λ‘œ name 을 좜λ ₯ν•˜λ©΄ null 이 λ‚˜μ˜¨λ‹€. 

 

λ©”μ„œλ“œ(method)λž€ ?

클래슀 내에 κ΅¬ν˜„λœ ν•¨μˆ˜ 

λ‹€λ₯Έ μ–Έμ–΄μ—μ„œλŠ” ν•¨μˆ˜κ°€ λ³„λ„λ‘œ μ‘΄μž¬ν•˜μ§€λ§Œ, μžλ°”μ—μ„œλŠ” 클래슀λ₯Ό λ– λ‚˜ μ‘΄μž¬ν•  수 μ—†λ‹€. 

 

λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” μ΄μœ κ°€ λ¬΄μ—‡μΌκΉŒ?

λ‚΄κ°€ μƒκ°ν•˜λŠ” 이유: 속성과 행동을 λΆ„λ¦¬ν•˜κΈ° μœ„ν•΄μ„œ? 

이유: μ—¬λŸ¬ 번 λ°˜λ³΅λ˜λŠ” λ™μž‘μ„ ν•œλ­‰μΉ˜λ‘œ λ¬ΆλŠ” 역할도 ν•œλ‹€.

 

 

μžλ°”μ˜ λ©”μ„œλ“œ ꡬ쑰

λ¦¬ν„΄μžλ£Œν˜• λ©”μ„œλ“œλͺ…(μž…λ ₯μžλ£Œν˜•1 λ§€κ°œλ³€μˆ˜1, μž…λ ₯μžλ£Œν˜•2 λ§€κ°œλ³€μˆ˜2, ...) {
    ...    
    return 리턴값;  // λ¦¬ν„΄μžλ£Œν˜•μ΄ void 인 κ²½μš°μ—λŠ” return 문이 ν•„μš”μ—†λ‹€.
}

λ©”μ„œλ“œλŠ” 결괏값을 λ°˜ν™˜ν•˜κΈ° μœ„ν•΄ return μ΄λΌλŠ” ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€. 

 

μ˜λ―ΈλŠ” κ°™μ§€λ§Œ ν‘œν˜„μ΄ λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— μ£Όμ˜ν•΄μ•Ό ν•˜λŠ” μš©μ–΄

1) λ§€κ°œλ³€μˆ˜(Parameter)와 인수(arguments) 

λ§€κ°œλ³€μˆ˜λŠ” λ©”μ„œλ“œμ— μ „λ‹¬λœ μž…λ ₯값을 μ €μž₯ν•˜λŠ” λ³€μˆ˜λ₯Ό μ˜λ―Έν•˜κ³ , μΈμˆ˜λŠ” λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ μ „λ‹¬ν•˜λŠ” μž…λ ₯값을 μ˜λ―Έν•œλ‹€. 

 

public class Sample {
    int sum(int a, int b) {  // a, b λŠ” λ§€κ°œλ³€μˆ˜
        return a+b;
    }

    public static void main(String[] args) {
        Sample sample = new Sample();
        int c = sample.sum(3, 4);  // 3, 4λŠ” 인수

        System.out.println(c);
    }
}

 

λ§€κ°œλ³€μˆ˜λŠ” λ©”μ„œλ“œλ₯Ό μ •μ˜ν• λ•Œ μ„ μ–Έν•˜λŠ” "λ³€μˆ˜"이닀. λ©”μ„œλ“œ λ‚΄μ—μ„œ μ‚¬μš©λ  μž…λ ₯κ°’μ˜ 자리 ν‘œμ‹œμž 역할을 함. (a,b)

μΈμˆ˜λŠ” λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν• λ•Œ μ „λ‹¬ν•˜λŠ” μ‹€μ œ 'κ°’' (3,4) 

=> λ§€κ°œλ³€μˆ˜ a와 bλŠ” 인수 3,4λ₯Ό λ°›μ•„μ„œ κ³„μ‚°ν•˜λŠ” λ³€μˆ˜μ΄λ‹€.  

잘 κ΅¬λΆ„ν•΄μ„œ λ§ν•΄μ•Όν•œλ‹€. 

 

2) λ©”μ„œλ“œμ˜ μž…λ ₯κ°’κ³Ό 리턴값 

μžλ°”μ—μ„œ λ©”μ†Œλ“œλŠ” μž…λ ₯값을 가지고 μ–΄λ–€ 처리λ₯Ό ν•˜μ—¬ μ μ ˆν•œ 리턴값을 λŒλ €μ€€λ‹€. 

 

 

 

 

λ©”μ„œλ“œ λ‚΄μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜μ˜ 효λ ₯ λ²”μœ„ !!!! 

μƒˆλ‘­κ²Œ μ•ˆ 사싀: λ§€κ°œλ³€μˆ˜λ‘œ ν•΄λ‹Ή 클래슀λ₯Ό 톡해 μƒμ„±λœ 객체 자체λ₯Ό λ„˜κΈ°λ©΄ κ·Έ 객체의 속성에 직접 영ν–₯을 쀄 수 μžˆλ‹€. 

 

메인 λ©”μ„œλ“œ λ‚΄μš©

  1. main λ©”μ„œλ“œμ—μ„œ aλΌλŠ” int μžλ£Œν˜•μ˜ λ³€μˆ˜λ₯Ό μƒμ„±ν•˜κ³  a에 1을 λŒ€μž…ν–ˆλ‹€.
  2. varTest λ©”μ„œλ“œλ₯Ό μž…λ ₯κ°’μœΌλ‘œ aλ₯Ό μ£Όμ–΄ ν˜ΈμΆœν–ˆλ‹€.
  3. a의 값을 좜λ ₯ν•˜κ²Œ ν–ˆλ‹€.
public class Sample {
    void varTest(int a) {
        a++;
    }

    public static void main(String[] args) {
        int a = 1;
        Sample sample = new Sample();
        sample.varTest(a);
        System.out.println(a);
    }
}

 

λ©”μ„œλ“œμ—μ„œ μ‚¬μš©ν•œ λ§€κ°œλ³€μˆ˜λŠ” λ©”μ„œλ“œ μ•ˆμ—μ„œλ§Œ μ“°μ΄λŠ” λ³€μˆ˜μ΄κΈ° λ•Œλ¬Έμ— 이름이 같더라도 μ„œλ‘œ 영ν–₯을 주지 μ•ŠλŠ”λ‹€ !! 

즉, main λ©”μ„œλ“œ μ•ˆμ— μžˆλŠ” int a λž‘ varTest λ©”μ„œλ“œμ— μ‚¬μš©λœ λ§€κ°œλ³€μˆ˜ int a λŠ” λ‹€λ₯Έ λ³€μˆ˜μž„. 

 

 

κ·Έλ ‡λ‹€λ©΄ varTest λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄ a 값을 λ³€κ²½μ‹œν‚€λŠ” 방법은? return 값을 μ‚¬μš©ν•΄ a ++ 값을 리턴해주고 main μ•ˆμ— μžˆλŠ” a 에닀가 λ‹€μ‹œ λ„£μ–΄μ£Όλ©΄ 됨. 

 

 

varTest 의 μž…λ ₯값이 μžλ£Œν˜•μ΄ μ•„λ‹Œ 객체인 경우 !! - μƒˆλ‘­κ²Œ μ•ˆ λΆ€λΆ„ 

public class Sample {

    int a;  // κ°μ²΄λ³€μˆ˜ a

    void varTest(Sample sample) {
        sample.a++;
    }

    public static void main(String[] args) {
        Sample sample = new Sample();
        sample.a = 1;
        sample.varTest(sample);
        System.out.println(sample.a);
    }
}

 

 varTest λ©”μ„œλ“œμ˜ μž…λ ₯ νŒŒλΌλ―Έν„°κ°€ 값이 μ•„λ‹Œ Sample 클래슀의 객체이닀.

μ΄λ ‡κ²Œ λ©”μ„œλ“œκ°€ 객체λ₯Ό μ „λ‹¬λ°›μœΌλ©΄ λ©”μ„œλ“œ λ‚΄μ˜ κ°μ²΄λŠ” 전달받은 객체 κ·Έ 자체둜 μˆ˜ν–‰λœλ‹€.

λ”°λΌμ„œ μž…λ ₯으둜 전달받은 sample 객체의 객체 λ³€μˆ˜ a의 값이 μ¦κ°€ν•˜κ²Œ λœλ‹€.