πŸ’»/JAVA

[Java] 8일차 : 클래슀(class)와 객체(Object) λ©”μ†Œλ“œ(1)

λ”°κΆˆ 2024. 2. 23. 20:22

레퍼런슀 λ³€μˆ˜(Reference Variables)

κΈ°λ³Έν˜•μ„ μ œμ™Έν•œ λ‚˜λ¨Έμ§€ νƒ€μž…, μ£Ό κΈ°μ–΅ μž₯μΉ˜μ— μ €μž₯λ˜μ–΄ μžˆλŠ” 객체의 μ£Όμ†Œ 값을 κ°€λ₯΄ν‚΄

  μžλ°”μ—μ„œ μ œκ³΅ν•˜λŠ” μ°Έμ‘° ν˜•(레퍼런슀 λ³€μˆ˜)
λ°°μ—΄ μ°Έμ‘°ν˜• λ°°μ—΄ 객체λ₯Ό μ°Έμ‘°ν•˜κΈ° μœ„ν•œ μžλ£Œν˜•
클래슀 μ°Έμ‘°ν˜• 클래슀 객체λ₯Ό μ°Έμ‘°ν•˜κΈ° μœ„ν•œ μžλ£Œν˜•
μΈν„°νŽ˜μ΄μŠ€ μ°Έμ‘°ν˜• μΈν„°νŽ˜μ΄μŠ€ 객체λ₯Ό μ°Έμ‘°ν•˜κΈ° μœ„ν•œ μžλ£Œν˜•
enum μ°Έμ‘°ν˜• μ—΄κ±°ν˜• νƒ€μž…

 

레퍼런슀 λ³€μˆ˜ μ„ μ–ΈμΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λœ μƒνƒœκ°€ μ•„λ‹Œ 객체의 μœ„μΉ˜λ₯Ό μ €μž₯ν•  λ³€μˆ˜λ§Œ μ„ μ–Έ ν•œ μƒνƒœλ‘œ λ°”λ‘œ
μ‚¬μš©ν•  수 μ—†κ³  new μ—°μ‚°μžλ₯Ό μ΄μš©ν•˜μ—¬ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ή ν•œ 후에 μ‚¬μš© κ°€λŠ₯


μΈμŠ€ν„΄μŠ€ (객체) 생성
객체의 생성은 new μ—°μ‚°μžλ₯Ό μ΄μš©ν•˜μ—¬ 생성
new λ‹€μŒμ˜ 클래슀λͺ…([인수,...]);λŠ” 클래슀의 μƒμ„±μžλ₯Ό 의미
μƒμ„±μžλŠ” 클래슀의 μΈμŠ€ν„΄μŠ€μΈ 객체 생성 및 μƒμ„±λœ 객체의 멀버λ₯Ό μ΄ˆκΈ°ν™”μ‹œν‚€λŠ” μž‘μ—…μ„ λ‹΄λ‹Ή

ν˜•μ‹

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

μƒμ„±λœ 객체가 μˆ˜ν–‰ν•  수 μžˆλŠ” μ—°μ‚° λ˜λŠ” ν–‰μœ„λ₯Ό κΈ°μˆ ν•œ 것
λ©”μ†Œλ“œ = ν•¨μˆ˜μ΄κΈ° λ•Œλ¬Έμ— ν•¨μˆ˜κ°€ κ°€μ§€κ³  μžˆλŠ” νŠΉμ„±, 즉
ν•¨μˆ˜λŠ” 리턴 κ°’μ˜ ν˜•(type)을 λ¨Όμ € μ§€μ •ν•˜κ³  ν•¨μˆ˜ 이름을 μ“΄ ν›„ λ§€κ°œλ³€μˆ˜λ“€μ„ λ‚˜μ—΄ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ •μ˜

ν˜•μ‹
λ©”μ†Œλ“œ ꡬ성 ν˜•μ‹

  λ©”μ†Œλ“œ ꡬ성 ν˜•μ‹
λ©”μ†Œλ“œ 리턴 νƒ€μž… λ©”μ†Œλ“œμ—μ„œ 처리된 κ²°κ³Όλ₯Ό ν˜ΈμΆœν•œ 곳으둜 되돌렀 μ€„λ•Œμ˜ λ°μ΄ν„°ν˜•μ„ 의미 처리된 κ²°κ³Όλ₯Ό ν˜ΈμΆœν•œ 곳으둜 되돌렀 쀄 데이터가 μ—†μ„λ•ŒλŠ” voidν˜•μ„ μ‚¬μš©
λ©”μ†Œλ“œ 이름 μ‹λ³„μžλ‘œ μ‚¬μš©μžμ— μ˜ν•΄ λ§Œλ“€μ–΄μ§€λ©°, 일반적으둜 μ†Œλ¬Έμžλ‘œ μ‹œμž‘
λ©”μ†Œλ“œ νŒŒλΌλ―Έν„°(parameter,ν˜•μ‹ λ§€κ°œλ³€μˆ˜,κ°€μΈμˆ˜) λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•œ κ³³μ—μ„œ λ©”μ†Œλ“œμ— 값을 전달할 λ•Œ μ‚¬μš©ν•œλ‹€ νŒŒλΌλ―Έν„°λŠ” μ§€μ—­λ³€μˆ˜(local variable)둜 λ©”μ†Œλ“œ λ‚΄μ—μ„œλ§Œ μœ νš¨ν•œ λ²”μœ„λ₯Ό κ°–λŠ”λ‹€
λ©”μ†Œλ“œ μ½”λ“œ λ©”μ†Œλ“œμ˜ μ‹€μ œ κ΅¬ν˜„ λ‚΄μš©
μ§€μ—­λ³€μˆ˜(local variable) μ„ μ–Έν•œ λ©”μ†Œλ“œ λ‚΄μ—μ„œλ§Œ μ‚¬μš©κ°€λŠ₯ λ©”μ†Œλ“œλ₯Ό 호좜 ν•  λ•Œ stack λ©”λͺ¨λ¦¬ μ˜μ—­μ— λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ή λ°›μœΌλ©°, λ©”μ†Œλ“œλ₯Ό λΉ μ Έ λ‚˜κ°€λ©΄ λ©”λͺ¨λ¦¬κ°€ ν•΄μ œ λœλ‹€.
λ©”μ†Œλ“œ 리턴 κ°’ ν˜ΈμΆœν•œ 곳으둜 리턴 값을 λ„˜κΈ°λ©΄μ„œ, ν˜ΈμΆœν•œ μͺ½μœΌλ‘œ μ œμ–΄κ°€ λ„˜μ–΄κ° return λ˜λŠ” 값은 λ©”μ†Œλ“œ 리턴 νƒ€μž…κ³Ό λ™μΌν•œ μžλ£Œν˜• μ΄κ±°λ‚˜ μž‘μ•„μ•Ό ν•œλ‹€. λ©”μ†Œλ“œ 리턴 νƒ€μž…μ΄ voidν˜•μΈ 경우 'return;'κ³Ό 같이 κΈ°μˆ ν•˜κ±°λ‚˜ μƒλž΅ ν•  수 μžˆλ‹€.
  λ©”μ†Œλ“œ μ ‘κ·Ό μ œμ–΄μž
private 클래슀 λ‚΄λΆ€μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ©° μ™ΈλΆ€μ—μ„œλŠ” μ ‘κ·Όν•  수 μ—†λ‹€
μƒλž΅ν•œ 경우(λ””ν΄νŠΈ) λ™μΌν•œ νŒ¨ν‚€μ§€(폴더)에 μžˆλŠ” ν΄λž˜μŠ€μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯
protected λ™μΌν•œ νŒ¨ν‚€μ§€(폴더)에 μžˆλŠ” 클래슀 및 μ„œλΈŒν΄λž˜μŠ€μ—μ„œ μ ‘κ·Ό κ°€λŠ₯
public μ œμ•½ 없이 μ–΄λ””μ—μ„œλ‚˜ μ ‘κ·Ό κ°€λŠ₯

Ex01.

package ch06.unit03;

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

        t.sub(10);
        // int n = t.sub(10);
    }
}

class Test1 {
    /*
        μ ‘κ·Όμ œμ–΄ λ¦¬ν„΄νƒ€μž… λ©”μ†Œλ“œλͺ…([λ§€κ°œλ³€μˆ˜νƒ€μž… λ§€κ°œλ³€μˆ˜]) {
            // μ½”λ“œ
        }
        - λ§€κ°œλ³€μˆ˜λŠ” μ§€μ—­ λ³€μˆ˜λ‘œ λ©”μ†Œλ“œμ•ˆμ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯
        - μ§€μ—­λ³€μˆ˜(λ§€κ°œλ³€μˆ˜)λŠ” λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ή λ°›κ³ 
          λ©”μ†Œλ“œλ₯Ό λΉ μ Έ λ‚˜κ°ˆλ•Œ λ©”λͺ¨λ¦¬κ°€ ν•΄μ œ
    */
    public int sub(int n) { // n:λ§€κ°œλ³€μˆ˜(μ§€μ—­λ³€μˆ˜)
        int s = 0; // μ§€μ—­λ³€μˆ˜(μŠ€ν… λ©”λͺ¨λ¦¬ 곡간에 λ©”λͺ¨λ¦¬ 확보)

        s = n + 5;
        for(int i=0; i<s; i++) {
            System.out.print("-");
        }
        System.out.println();

        return s; // λ°˜ν™˜ 값을 κ°€μ§€κ³  ν˜ΈμΆœν•œ 곳으둜 λŒμ•„κ°„λ‹€.
    }
}

Ex02. λ§€κ°œλ³€μˆ˜λ₯Ό λ°°μ—΄λ‘œ λ„˜κ²¨ λ°›μ„μ‹œ

package ch06.unit03;

public class Ex03 {
    public static void main(String[] args) {
        Test3 t = new Test3();
        int s;

        int [] aa = new int[]{1,3,5,7,9};

        s = t.total(aa);
        System.out.println(s);

        int []ss = t.random();
        for(int i=0; i<ss.length; i++) {
            System.out.print(ss[i] + " ");
        }
        System.out.println();

        int []ss2 = t.random(5);
        for(int i=0; i<ss2.length; i++) {
            System.out.print(ss2[i] + " ");
        }
        System.out.println();        

    }
}

class Test3 {
    // λ§€κ°œλ³€μˆ˜λ₯Ό λ°°μ—΄λ‘œ λ„˜κ²¨ λ°›λŠ” 경우
    public int total(int[] num) {
        int s = 0;

        /*
        for(int n : num) {
            s += n;
        }
        */
        for(int i=0; i<num.length; i++) {
            s += num[i];
        }

        return s;
    }

    // 1~100 μ‚¬μ΄μ˜ λ‚œμˆ˜ 10개 λ°œμƒ
    public int[] random() {
        int[] aa = new int[10];

        for(int i=0; i<aa.length; i++) {
            aa[i] = (int)(Math.random() * 100) + 1;
        }

        return aa;
    }

    public int[] random(int n) {
        int[] aa = new int[n];

        for(int i=0; i<aa.length; i++) {
            aa[i] = (int)(Math.random() * 100) + 1;
        }

        return aa;
    }
}

Ex03. μ‚¬κ°ν˜•μ˜ 넒이와 λ‘˜λ ˆ 계산

package ch06.unit03;

public class Ex04 {

    public static void main(String[] args) {
        Rect obj = new Rect();
        int a, b;

        obj.width = 10;
        obj.height = 5;

        a = obj.area();
        b = obj.len();

        System.out.println("넓이 : " + a);
        System.out.println("λ‘˜λ ˆ : " + b);        
    }
}

// μ‚¬κ°ν˜•μ˜ 넓이와 λ‘˜λ ˆ 계산
/*
    - 데이터 : κ°€λ‘œ, μ„Έλ‘œ
    - κΈ°λŠ₯ : 넓이, λ‘˜λ ˆ
*/

class Rect {
    int width;
    int height;

    public int area() { // 넓이
        return width * height;
    }

    public int len() { // λ‘˜λ ˆ
        return (width + height) * 2;
    }
}

Ex04. 년도λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ λ„˜κ²¨ λ°›μ•„ 띠λ₯Ό κ΅¬ν•˜κΈ° / 1~45의 μ„œλ‘œ λ‹€λ₯Έ 6개 λ‚œμˆ˜λ₯Ό λ°œμƒν•˜λŠ” λ©”μ†Œλ“œ 생성 / μ„œλ‘œ λ‹€λ₯Έ 3자리 μ •μˆ˜ λ§Œλ“€κΈ°

package ch06.unit03;

import java.util.Arrays;

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

        System.out.println(t.tti(2024));

        int[] aa = t.lotto();
        for(int a : aa) {
            System.out.print(a + " ");
        }
        System.out.println();

        System.out.println(t.number3());

    }
}

class Test5 {
    // 년도λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ λ„˜κ²¨ λ°›μ•„ 띠λ₯Ό κ΅¬ν•˜λŠ” λ©”μ†Œλ“œ
    public String tti(int year) {
        String [] t = new String[] {"μ›μˆ­μ΄", "λ‹­", "개", "돼지", 
                "μ₯", "μ†Œ", "λ²”", "토끼", "용", "λ±€", "말", "μ–‘"};
        return t[year%12];
    }

    // 1~45의 μˆ˜μ€‘ μ„œλ‘œ λ‹€λ₯Έ 6개의 λ‚œμˆ˜λ₯Ό λ°œμƒν•˜λŠ” λ©”μ†Œλ“œ
    public int[] lotto() {
        int [] aa = new int[6];

        // 0  <= Math.random() < 1
        for(int i=0; i<aa.length; i++) {
            aa[i] = (int)(Math.random()*45) + 1;
            for(int j=0; j<i; j++) {
                if(aa[i] == aa[j]) {
                    i--;
                    break;
                }
            }
        }

        Arrays.sort(aa);

        return aa;
    }

    // μ„œλ‘œ λ‹€λ₯Έ 3자리 μ •μˆ˜ λ§Œλ“€κΈ° // 102 ~ 987
    public int number3() {
        int m1, m2, m3;

        m1 = (int)(Math.random()*9)+1;

        do {
            m2 = (int)(Math.random()*10);
        } while(m1==m2);

        do {
            m3 = (int)(Math.random()*10);
        } while(m1==m3||m2==m3);

        return m1*100 + m2*10 + m3;
    }
}