[Java] Method 메서드

Jeini·2022년 10월 11일
1

☕️  Java

목록 보기
6/59
post-thumbnail

💡 Method


코드가 길어지거나, 같은 코드를 반복해야 할 때, 코드를 부품화하여 분리해 보기 좋은 코드로 만들 수 있다.

코드의 부품화(코드의 모듈화) 하는 방법 중 한가지가 메서드이다.

소괄호가 있고 어떤 데이터타입을 받을 수 있다는 정의를 할 수 있다.

💡Argument / parameter


✔️ Argument (아규먼트)

  • console의 입력 값.
  • 해당 parameter에 적합한 실제 데이터를 나타낸다.

✔️ parameter (파라미터)

  • 그 입력값을 받는 매개 변수.
  • 어떤 함수(또는 클래스)가 받아들이는 어떤 타입을 가지는 데이터를 대표하는 이름을 나타낸 것.

✏️ 예시

Human이라는 클래스에 이름과 나이가 필요하다면 Human(String name, int age)에서
nameage는 각각 parameter이다.

Human 클래스를 사용해서 아바타 하나를 만든다고 한다면 Human("ZZeong",25)이라고 작성해서 만들텐데, 이때, "ZZeong"과 25arguments이다.

💡 심플한 메서드 정의


클래스 안에서 여러가지의 메서드를 만들 수 있다.

public class Main {
	public static void main(String[] args) { // main 메서드
	
    }
    
    public static void hello() { // hello 메서드
    	System.out.println("Hello"); // 안에다 코드 작성 가능
    
	}
}

✏️ 메서드의 호출

public class Main {
	public static void main(String[] args) {
		System.out.println("안녕하세요");
		hello(); //  = System.out.println("Hello"); 메서드를 호출할 수 있음.
    }
    
    public static void hello() { 
    	System.out.println("Hello"); // 여기서 가져옴.
    
	}
}

✏️ main메서드 외로부터 메서드 호출

메서드끼리는 서로서로 호출이 가능하다. 하지만, 시작점은 main메서드!
위치는 상관없다.

public class Main {

	public static void methodA() {
		System.out.println("methodA");
    	methodB(); // = System.out.println("methodB");
	}

	private static void methodB() {
		System.out.println("methodB");
	}

	public static void main(String[] args) {
		methodA; // methodA와 methodB가 쫘르륵 나온다.
	} // System.out.println("methodA"); System.out.println("methodB");
}

✏️ 인수의 예(넘겨 주는 값이 1개일 때)

public class Main {
	public static void main(String[] args) { // main 메서드
		System.out.println("메소드를 호출합니다");
		hello("Jeong"); //  값들을 넘겨줌.
		hello("제임스 고슬링");
		hello("Jenny");
		System.out.println("메소드 호출을 종료합니다");
		
    
	}
	public static void hello(String name) { // hello 메서드
		System.out.println(name + "씨 안녕하세요");
	}
}
[결과값]

메소드를 호출합니다
Jeong씨 안녕하세요
제임스 고슬링씨 안녕하세요
Jenny씨 안녕하세요
메소드 호출을 종료합니다

public static void hello(String name)

  • 어떤 데이터 타입을 얻을 수 있다는 정의를 할 수 있다.
  • main안의 값들이 hello의 name이라는 파라미터로 값이 들어온다.

✏️ 인수의 예 (넘기는 값이 복수일 때)

public class Main {
	public static void main(String[] args) { // main 메서드
		add(100, 20); // 두개씩 넘길 수 있음.
		add(200, 50);
	}
	
	
	public static void add(int x, int y) { //파라미터가 2개, 메인메소드에서 여기로 대입
		int ans = x + y;
		System.out.println(x + "+" + y + "=" + ans );
	}
}
[결과값]

100+20=120
200+50=250

❓ 인수를 사용하지 않고 할 수 있을까?

할 수 없다.
둘 사이의 연결고리가 없어서 값을 받아오지 못하기 때문에 컴파일이 되지 않는다.

public class Main {
	public static void main(String[] args) {
		int x = 100;
		int y = 10;
		add(x, y);
	}

	private static void add(int a, int b) { //add(x, y);이 여기로 대입. 두가지 통로를 뚫어주는 것.
		int ans = a + b;
	}
}

x와 y의 인자를 불러오기 위해서 둘의 연결고리가 필요하다.
그것이 파라미터의 역할이다.

private static void add(int a, int b)

  • main 메서드 내의 add(x, y);가 고대로 대입되어 값이 나온다.

💡 반환 값 (return)⭐️⭐️


메소드 호출 시 결과 값을 돌려주는 것을 값을 돌려준다.
이 값을 반환 값 (return) 이라고 한다.

public class Main {
	public static void main(String[] args) { 
		// add메서드는 ans로 결과를 반환한다. 변수에 값을 대입할 수 있다.
        int ans = add(100, 10);
		System.out.println("100 + 10 = " + ans);
		
	}
	// int = 반환타입
	private static int add(int x, int y) {  
		int ans = x + y;
		return ans; // ans로 결과를 반환한다. 계산 결과 반환
	}
}

private static int add(int x, int y)

  • 단순히 실행만 한다면 void를 쓴다.
  • 반환 즉 계산 결과를 돌려줘야한다고 하면 그 앞에 반환 타입을 쓰면 된다.

➕ 추가 예제

public class Main {
	public static void main(String[] args) { 
		int x = 100;
		int y = 10;
		//int result = add(x, y);
		//System.out.println(result);
        System.out.println(Main.add(x, y)); // Math.max(a, b) 비슷.
	}
	
	private static int add(int a, int b) { 
		return a + b; 
	}
}

✏️ 최대값 구하기 예제

public class Main {
	public static void main(String[] args) { 
		int x = 100;
		int y = 10;
		//int result = add(x, y);
		System.out.println(max(100, 10));
	}
	// 인수 덧셈
	private static int add(int a, int b) {  
		return a + b;
	}
	// 최대값 구하기
	public static int max (int a, int b) { 
		if (a > b) {
			return a;
		} else if (a < b) {
			return b;
		} else {
			return -1;
		}
	}	
}

최대값 구하는 것을 Math 함수로 간단하게 나타낼 수 있다.
하지만, int max 것이 아니라 함수 Math를 쓰는 것.

public static int max (int a, int b) { 
		return Math.max(a, b);
	}	
}

✏️ return값을 그대로 사용

public class Main {
	
	private static int add(int x, int y) {
		int ans = x + y;
		return ans;
	}
	
	public static void main(String[] args) {
		System.out.println(add(add(10, 20), add(30, 40)));
	} // 30 + 70 = 100, 결과값: 100
	
}

❌ 잘못 된 return문

public static int sample() {

	return 1; //에러
    int x = 10;
}

return은 항상 블럭의 마지막에 있어야 한다.

💡 오버로드 (overload)


✔️ 같은 이름의 메서드를 여러개 정의 하는 것 (기능 확장)

✏️ 인수의 타입이 다른 경우

public class Main {
	// 첫 번째 add 메서드
	public static int add(int x, int y) {
		return x + y;
	}
	
	// 두 번째 add 메서드
	public static double add(double x, double y) {
		return x + y;
	}
	
	// 세 번째 add 메서드
	public static String add(String x, String y) {
		return x + y;
	}
	
	public static void main(String[] args) {
		System.out.println(add(10, 20));
		System.out.println(add(3.5, 2.7));
		System.out.println(add("Hello", "Java"));
		
        // 결과값 : 30 6.2 HelloJava
	}
}

✏️ 인수의 수가 다른 경우

public class Main {
	// 첫 번째 add 메서드
	public static int add(int x, int y) {
		return x + y;
	}
	
	// 두 번째 add 메서드
	public static int add(int x, int y, int z) {
		return x + y + z;
	}
	

	public static void main(String[] args) {
		System.out.println(add(10, 20));
		System.out.println(add(10, 20, 30));
		
        //결과값: 30 60
		
	}
}

💡 call by reference_배열이 인수일 때


public class Main {
	
    //int 형 배열을 받아 모든 요소를 출력 = printArray
	public static void printArray(int[] array) {
		for (int element: array) {
			System.out.println(element);
		}
	}
	
	public static void main(String[] args) {
		int[] array = {1, 2, 3};
		printArray(array);
	}
} // 결과값: 1 2 3

💡 같은 배열을 참조하고 있다는 것을 확인


import java.lang.reflect.Array;

public class Main {
	// int형 배열을 받아 배열내의 요소 전부에 1을 더하는 메서드
	public static void incArray(int[] array) { // 2.
		for (int i = 0; i < array.length; i++) {
			array[i]++; // 3. / 1부터 ++를 했기 때문에 첫 시작이 2로 바뀜
		}
	} // 계산 결과를 리턴하지 않음
	
	public static void main(String[] args) {
		int[] array = {1, 2, 3};
		incArray(array); // 1.
		
		for (int i : array) { // 4.
			System.out.println(i); // 5.
		}
	} // 결과값: 2, 3, 4
}

💡 return값이 배열일 경우


public class Main {
	public  static int[] makeArray(int size) { 
		int[] newArray = new int[size]; 
		for (int i = 0; i < newArray.length; i++) {
			newArray[i] = i;
		}
		
		return newArray;
	}
	
	public static void main(String[] args) {
		int[] array = makeArray(3);
		for (int i : array) {
			System.out.println(i);
		}
	}
}

✔️ 메서드를 사용할 때 배열같은 경우는 신경을 써야한다.

💡 커멘드 라인 인수


public static void main(String[] args) {}

main을 실행할 때, args에다가 String으로 배열, 배열타입의 파라미터를 받는다.

커맨드 라인 인수를 이런식으로 전달하는구나 정도만 알아두자.

profile
Fill in my own colorful colors🎨

0개의 댓글