백엔드/Java

Java 메서드 (Method)

짱뚱짱 2024. 9. 26. 18:17

📢 메서드 구조

메서드는 다음과 같은 형식으로 선언

접근제한자 리턴타입 메서드명(매개변수) { 
    // 기능 구현 
}
  • 접근제한자: 메서드의 접근 범위를 정의 (예: public, protected, private)
  • 리턴타입: 메서드가 반환할 값의 타입을 지정. 값이 없으면 void를 사용
  • 메서드명: 소문자로 시작하며, 메서드를 호출할 때 사용하는 이름
  • 매개변수: 메서드가 필요로 하는 입력값

 

📢 메서드 종류

  • 정적 메서드 (static): 클래스의 인스턴스를 생성하지 않고도 호출할 수 있는 메서드
  • 인스턴스 메서드: 클래스의 인스턴스를 생성한 후 호출할 수 있는 메서드

 

📢 접근 제어자

  • public: 모든 클래스에서 접근 가능
  • protected: 동일 패키지 및 자식 클래스에서 접근 가능
  • default: 동일 패키지에서 접근 가능
  • private: 해당 클래스 내에서만 접근 가능

접근 제어자는 private < default < protected < public 순서로 접근 권한이 높아짐.

 

📢 실습(1)

 두 정수의 합을 반환하는 메서드 생성 및 호출

package day02;

public class Method01 {

    public static void main(String[] args) {
        System.out.println(sum(1, 2)); // 정적 메서드 호출

        Method01 m = new Method01(); // 인스턴스 생성
        m.sum2(10, 20); // 인스턴스 메서드 호출
    }

    // 두 정수의 합을 반환하는 정적 메서드
    public static int sum(int num1, int num2) {
        return num1 + num2;
    }

    // 두 정수의 합을 출력하는 인스턴스 메서드
    public void sum2(int num1, int num2) {
        System.out.println(num1 + num2);
    }
}

 

결과

3
30

 

📢 실습(2)

사칙연산 메서드

package day02;

public class Method02 {
	// static없이 사칙연산 ( + - * / % ) 각각 메서드 생성
	public int sum(int a, int b) {
		return a+b;
	}
	public int sub(int a, int b) {
		return a-b;
	}
	public int mul(int a, int b) {
		return a*b;
	}
	public void div(int a, int b) {
	    System.out.println(b==0 ? "0으로 나눌 수 없습니다." : a/(double)b);
	}
	public void mod(int a, int b) {
		System.out.println(b==0 ? "0으로 나눌 수 없습니다." : a%b);
	}
	
	public static void main(String[] args) {
		Method02 m = new Method02();
		
		System.out.println(m.sum(101, 20));
		System.out.println(m.sub(101, 20));
		System.out.println(m.mul(101, 20));
		m.div(101, 2);
		m.mod(101,20);
		//div, mod => 나누는 값(b)이 0이면 Exception 발생
		//return 타입이 double Infinity
		
		
	}

}

 

결과

121
81
2020
50.5
1

 

📢 실습(3)

정수 하나를 주면 해당 정수의 구구단 출력하는 메서드 (리턴 없음.)

package day02;

import java.util.Scanner;

public class Method03 {
	// 정수 하나를 주면
	// 해당 정수의 구구단 출력하는 메서드 (리턴 없음.)
	
	public void gugu(int a) {
		for(int i=1; i<=9; i++) {
			System.out.print(
					a + " ✖ " + i + " = " + a*i + "   "
			);
		}
	}


	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System. in);
		System.out.println("구구단을 출력할 정수를 입력해 주세요. >>");
		int input = scan.nextInt();
		
		Method03 m = new Method03();
		
		m.gugu(input);

		scan.close();
	}

}

 

결과

구구단을 출력할 정수를 입력해 주세요. >>
3
3 ✖ 1 = 3   3 ✖ 2 = 6   3 ✖ 3 = 9   3 ✖ 4 = 12   3 ✖ 5 = 15   3 ✖ 6 = 18   3 ✖ 7 = 21   3 ✖ 8 = 24   3 ✖ 9 = 27

 

📢 메서드 오버로딩 (Method Overloading)

메서드 오버로딩은 동일한 이름의 메서드를 여러 개 정의하는 기술로, 다음 두 가지 조건 중 하나를 충족해야 함.

  1. 매개변수의 개수가 다름: 같은 이름의 메서드는 서로 다른 개수의 매개변수를 가질 수 있음
  2. 매개변수의 타입이 다름: 매개변수의 타입이 서로 다른 경우에도 같은 이름의 메서드를 사용 가능

리턴 타입은 오버로딩의 조건에 영향을 미치지 않으며, 매개변수의 이름도 중요하지 않다.

 

public int sum(int num1, int num2) {
    return num1 + num2;
}

public int sum(int num1, int num2, int num3) {
    return num1 + num2 + num3;
}

public int sum(int ...num) {
    int result = 0;
    for(int temp : num) {
        result += temp;
    }
    return result;
}

위 코드에서 sum 메서드는 두 개, 세 개, 그리고 가변 개수의 정수를 매개변수로 받는다.

 

📢 가변인자 메서드

가변인자 메서드는 매개변수의 개수가 고정되지 않은 경우에 사용.

가변인자는 ... 구문을 사용하여 정의하며, 내부적으로 배열처럼 처리

public int sum(int ...num) {
    int result = 0;
    for(int temp : num) {
        result += temp;
    }
    return result;
}

System.out.println(sum(10, 20));           // 30
System.out.println(sum(10, 20, 30));       // 60
System.out.println(sum(1, 2, 3, 4, 5, 6, 7, 8, 9)); // 45

위 메서드는 인자를 배열 형태로 받아들여, 전달된 모든 숫자의 합을 계산. 호출 시에는 매개변수의 개수를 자유롭게 조정가능.

 

'백엔드 > Java' 카테고리의 다른 글

Java로 로또 번호 생성기 만들기(1)  (0) 2024.09.29
Java로 계산기 만들기  (1) 2024.09.28
Java 배열, 문자열 처리  (2) 2024.09.26
Java Scanner 클래스  (2) 2024.09.26
Java 기초 다지기: 변수, 데이터 타입, 연산자  (2) 2024.09.26