hhnn_soph

[Java] 클래슀 ꡬ성 μš”μ†Œ(λ©”μ„œλ“œ) λ³Έλ¬Έ

Language/Java

[Java] 클래슀 ꡬ성 μš”μ†Œ(λ©”μ„œλ“œ)

hhnn_soph 2021. 9. 13. 06:25

πŸ“™ λ©”μ„œλ“œ(Method)

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

- λ©”μ„œλ“œκ°€ 호좜되면 { } 블둝 μ•ˆμ— μžˆλŠ” λͺ¨λ“  μ½”λ“œλ“€μ΄ μΌκ΄„μ μœΌλ‘œ 싀행됨

- μ™ΈλΆ€λ‘œλΆ€ν„° 맀개 값을 받을 μˆ˜λ„ 있고, μ‹€ν–‰ ν›„ μ–΄λ–€ 값을 리턴할 μˆ˜λ„ 있음

- μ—­ν• : ν•„λ“œλ₯Ό 읽고 μˆ˜μ •, λ‹€λ₯Έ 객체 생성해 λ‹€μ–‘ν•œ κΈ°λŠ₯ μˆ˜ν–‰, 객체 κ°„ 데이터 전달 μˆ˜λ‹¨

- μ„ μ–ΈλΆ€(리턴 νƒ€μž…, λ©”μ„œλ“œλͺ…, λ§€κ°œλ³€μˆ˜ μ„ μ–Έ)와 {  } μ‹€ν–‰ λΈ”λ‘μœΌλ‘œ ꡬ성

public class Calculator {
	void powerOn(){
    	System.out.println("전원을 μΌ­λ‹ˆλ‹€");
    }
    
    int plus(int x, int y) {
    	int result = x + y;
        return result;
    }
    
    double divide(int x, int y) {
    	double result = (double)x / (double)y;
        return result;
    }   

	void powerOff(){
    	System.out.println("전원을 λ•λ‹ˆλ‹€");
    }
}

 

πŸ“™ λ©”μ„œλ“œ μ„ μ–ΈλΆ€

1. 리턴 νƒ€μž…

- λ©”μ„œλ“œ μ‹€ν–‰ ν›„ λ¦¬ν„΄ν•˜λŠ” κ°’μ˜ νƒ€μž…

1) 리턴 κ°’μ—†λŠ” 경우

// 리턴 νƒ€μž… void
void powerOn() { ... }

2) 리턴 κ°’μžˆλŠ” 경우

// 리턴 νƒ€μž… int String double ...
double divide(int x, int y){ ... }

 

2. λ©”μ„œλ“œ 이름

- μžλ°” μ‹λ³„μž κ·œμΉ™μ— 맞게 μž‘μ„±

- κ΄€λ‘€μ μœΌλ‘œ μ†Œλ¬Έμžλ‘œ μž‘μ„±. λ‹€λ₯Έ 단어 ν˜Όν•©ν•œ 경우 ν˜Όν•© 단어 첫 κΈ€μžλŠ” λŒ€λ¬Έμžλ‘œ μž‘μ„±

- λ©”μ„œλ“œκ°€ μ–΄λ–€ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ”μ§€ μ‰½κ²Œ μ•Œ 수 μžˆλ„λ‘ μž‘λͺ…

    void run() { ... }
    void startEngine() { ... }    
    String getName() { ... }
    int[] getScores() { ... }

 

3. 맀개 λ³€μˆ˜ μ„ μ–Έ

- 맀개 값은 λ°˜λ“œμ‹œ 맀개 λ³€μˆ˜ κ°œμˆ˜μ™€ νƒ€μž…μ— λΆ€ν•©λ˜λŠ” κ°’ μž‘μ„±

double divide(int x, int y){ ... }

double result = divide(10, 20);
// 맀개 λ³€μˆ˜ νƒ€μž…μ΄ intμ΄λ―€λ‘œ 10, 20 μž‘μ„±. 
// 10.0 ν˜Ήμ€ 20.0 μž‘μ„±ν•˜λ©΄ 컴파일 였λ₯˜ λ°œμƒ

- 맀개 λ³€μˆ˜ 개수λ₯Ό λͺ¨λ₯Ό λ•Œ

1) λ°°μ—΄ νƒ€μž…μœΌλ‘œ μ„ μ–Έ: λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ λ°°μ—΄ ν•­λͺ© 수 κ²°μ •

// sum1 λ©”μ„œλ“œ
int sum1(int[] valuses) { }

// λ°°μ—΄ 전달 방법
int[] values = {1, 2, 3};
int result = sum1(values);
inr result = sum1(new int[] {1, 2, 3, 4, 5});

2) " . . . " μ‚¬μš©ν•΄ μ„ μ–Έ: λ„˜κ²¨μ€€ κ°’ μˆ˜μ— 따라 μžλ™μœΌλ‘œ λ°°μ—΄ 생성

// sum2 λ©”μ„œλ“œ
int sum2(int ... valuses) { }

// λ°°μ—΄ 전달 방법
int result = sum2(1, 2, 3);
inr result = sum2(1, 2, 3, 4, 5);

 

πŸ“™ 리턴(return) λ¬Έ

1. 리턴 값이 μžˆλŠ” λ©”μ„œλ“œ

- λ°˜λ“œμ‹œ returnλ¬Έ μž‘μ„±. μ—†μœΌλ©΄ 컴파일 였λ₯˜

- returnλ¬Έ μ‹€ν–‰ μ‹œ λ©”μ„œλ“œ μ¦‰μ‹œ μ’…λ£Œ

- returnλ¬Έ 이후 μ‹€ν–‰λ¬Έ 였면 'Unreachable code' 컴파일 였λ₯˜ λ°œμƒ

public class Calculator {   
    int plus(int x, int y) {
    	int result = x + y;
        return result; // return 리턴값;
    }
}

2. 리턴 값이 μ—†λŠ” λ©”μ„œλ“œ(void)

- 보톡은 returnλ¬Έ μ‚¬μš©ν•˜μ§€ μ•ŠμŒ

- ν•˜μ§€λ§Œ λ©”μ„œλ“œ κ°•μ œ μ’…λ£Œ μœ„ν•΄ return; μ‚¬μš© κ°€λŠ₯(break 문으둜 λŒ€μ²΄ κ°€λŠ₯)

void run(){
	while(true){
    	if(gas>0) {
        	gas -= 1;
        } else {
        	return; // run() λ©”μ„œλ“œ μ‹€ν–‰ μ’…λ£Œ
        }
    }
}

 

πŸ“™ λ©”μ„œλ“œ 호좜

- ν˜•νƒœ: λ©”μ„œλ“œλͺ…(맀개 κ°’,.. );

- 리턴 κ°’μ—†λŠ” 경우

// μ „μ›λ§Œ ν‚€κ³  끝이기 λ•Œλ¬Έμ— λ³€μˆ˜ μ„ μ–Έ ν•„μš” μ—†μŒ
powerOn();

- 리턴 κ°’μžˆλŠ” 경우

// 1. 리턴값이 있기 λ•Œλ¬Έμ— μ €μž₯ν•  λ¦¬ν„΄νƒ€μž… λ³€μˆ˜ μ„ μ–Έ
double result = divide(10, 20);
// 2. 리턴값보닀 λ©”μ„œλ“œ 싀행이 μ€‘μš”ν•  경우 λ³€μˆ˜ 선언없이 호좜
divide(10, 20);

1. 객체 λ‚΄λΆ€μ—μ„œ 호좜

- λ©”μ„œλ“œ μ΄λ¦„μœΌλ‘œ λ‹¨μˆœν•˜κ²Œ 호좜

public class Calculator {
    int plus(int x, int y) {
    	int result = x + y;
        return result;
    }
    
    double avg(int x, int y) {
    	double sum = plus(x, y); // plus λ©”μ„œλ“œ 호좜, int>double μžλ™ν˜•λ³€ν™˜μœΌλ‘œ λŒ€μž… κ°€λŠ₯
        double result = sum / 2;
        return result;
    }   

	void execute(){
    	double result = avg(7, 10); // avg λ©”μ„œλ“œ 호좜
    	println("μ‹€ν–‰κ²°κ³Ό: " + result); // print λ©”μ„œλ“œ 호좜
    }
    
    void print(String msg) {
    	System.out.println(msg)
    }
}

2. 객체 μ™ΈλΆ€μ—μ„œ 호좜

- 클래슀의 객체λ₯Ό μƒμ„±ν•˜κ³ , μ°Έμ‘° λ³€μˆ˜ + λ„νŠΈ μ—°μ‚°μž + λ©”μ„œλ“œ 이름(맀개 κ°’) ν˜•νƒœλ‘œ 호좜

public class CalculatorExample {
	public static void main(String[] args){ 
    	
        Calculator myCalc = new Calculator();
       
        myCalc.powerOn(); // λ‹¨μˆœν˜ΈμΆœ
        
        int result1 = myCalc.plus(5, 6); // 리턴값 λ°›μ•„ λ³€μˆ˜μ— μ €μž₯
        System.out.println("λ”ν•˜κΈ°: " + result1);
        
        byte x = 10;
        byte y = 4;
        double result2 = myCalc.divide(x, y);
        System.out.println("λ‚˜λˆ„κΈ°: " + result2);
        
        myCalc.powerOff();
	}
}

 

πŸ“™ λ©”μ„œλ“œ μ˜€λ²„ λ‘œλ”©

- 클래슀 λ‚΄ 같은 이름 λ©”μ„œλ“œ μ—¬λŸ¬ 개 μ„ μ–Έν•˜λŠ” 것

- λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…, 개수, μˆœμ„œ 쀑 ν•˜λ‚˜κ°€ 달라야 함

- μ˜€λ²„ λ‘œλ”©μ΄ μ•„λ‹Œ 경우

  : λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…, 개수, μˆœμ„œκ°€ λͺ¨λ‘ κ°™κ³  λ§€κ°œλ³€μˆ˜λͺ…λ§Œ λ°”κΎΈλŠ” 경우

  : 리턴 νƒ€μž…λ§Œ λ‹€λ₯΄κ³  λ§€κ°œλ³€μˆ˜κ°€ 동일할 경우

- JVM이 맀개 κ°’μ˜ νƒ€μž…μ„ 보고 λ©”μ„œλ“œ 선택 > νƒ€μž…μ΄ μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” 경우, μžλ™ νƒ€μž… λ³€ν™˜ κ°€λŠ₯ μ—¬λΆ€ 확인

// μ˜€λ²„λ‘œλ”©
int plus(int x, int y) {...}
double plus(double x, double y) {...}
// plus(10, 20.3)인 경우 plus(double x, double y) λ©”μ„œλ“œ μ‹€ν–‰

// μ˜€λ²„λ‘œλ”© μ•„λ‹Œ 경우
int divide(int x, int y) {...}
double divide(int boonja, int boonmo) {...}