본문 바로가기

Java/문법

[Java] 핵심 기본편 - 메소드(전달값, 반환값, 메소드 오버로딩, 변수의 범위)

1. 메소드

메소드

  • 메소드: 특정 기능을 수행하기 위한 코드 묶음
  • 메소드명();
    • 메소드 호출
    • 메소드는 한 번 정의해 두면 필요한 만큼 얼마든지 사용할 수 있음
// 메소드 형태
접근제어나 반환형 메소드명(전달값) {
    명령문1
    명령문2
    ...
}

// 예제1 (안녕? 문자열을 출력하는 print 메소드)
public static void print() {
	System.out.println("안녕?");
}

public static void main(String[] args) {
    print(); // 메소드를 사용하기 위해선 메소드명(print)을 호출해야 함
    print();
    print();
}

 

전달값

  • 전달값: Parameter, 메소드 호출 시 전달하는 값
  • 메소드 호출 시
    • 메소드명(): 괄호를 비워두면 전달값이 없는 것
    • 메소드명(전달값): 값을 정의해 두면 메소드 호출 시 전달하려는 값을 보내줄 수 있는 것
  • 전달값의 개수
    • 전달값이 한 개 있는 메소드
      • print(int a): 정수 a를 전달값으로 하는 메소드 print
      • print(3); print(10);처럼 메소드에 전달값 정수 3, 10을 입력함
    • 전달값이 여러 개 있는 메소드
      • add(int a, int b): 정수 a, b를 전달값으로 하는 메소드 add
      • add(1, 2); add(3, 5);처럼 메소드에 전달값 정수 1, 2와 3, 5를 각각 입력함
// 예제1 (전달값이 없는 메소드)
public static void print() { // 전달값이 없음
	System.out.println("안녕?");
}

public static void main(String[] args) {
    print(); // 메소드를 사용하기 위해선 메소드명(print)을 호출해야 함
    print();
    print();
}

// 예제2 (전달값이 한 개 있는 메소드)
public static void print(int a) { // 전달값이 정수 a인 메소드
	System.out.println(a);
}

public static void main(String[] args) {
    print(3); // 메소드에 전달값 입력: 3
    print(10); // 메소드에 전달값 입력: 10
}

// 예제3 (전달값이 여러 개 있는 메소드)
public static void add(int a, int b) { // 전달값이 정수 a, b인 메소드
	System.out.println(a + b);
}

public static void main(String[] args) {
    add(1, 2); // 3
    add(3, 5); // 8
}

 

반환값

  • 반환값: Return, 메소드 실행 결과를 반환해 주는 값
  • 반환값 유무
    • 無: void, 반환값 없음
    • : 메소드는 반드시 return 반환값;이 나와야 함
  • 접근제어자 반환형 메소드명() {
        명령문1
        명령문2
        ...
        return 반환값;
    }
// 반환값 형태
접근제어자 반환형 메소드명() {
    명령문1
    명령문2
    ...
    return 반환값;
}

// 예제1
public static int getMaxLottoNumber() { // 반환형 int
	return 45; // 반환값 return 45;
}

public static void main(String[] args) {
    int num = getMaxLottoNumber(); // 위에서 적은 반환형 int와 동일하게 int num
    System.out.println(num); // num에는 메소드의 반환값이 들어가 있기에 45가 출력됨
}

 

전달값과 반환값

  • 전달값과 반환값: 전달값과 반환값이 모두 있는 경우
  • 접근제어나 반환형 메소드명(전달값) {
        명령문1
        명령문2
        ...
        return 반환값;
    }
// 전달값과 반환값이 모두 있는 형태
접근제어나 반환형 메소드명(전달값) {
    명령문1
    명령문2
    ...
    return 반환값;
}

// 예제1
public static int add(int a, int b) { // 반환형: int, 전달값: int a, int b
	return a + b; // 반환값: a + b
}

public static void main(String[] args) {
    int result = add(1, 2); // 위의 반환형 int와 동일한 int result
    System.out.println("1 + 2 =" + result);
}

 

메소드 오버로딩

  • 메소드 오버로딩: 같은 메소드 이름을 가지면서 매개변수 또는 매개변수의 자료형을 다르게 정의하여 여러 버전의 메소드를 만드는 것 (= 같은 메소드명, 다른 매개변수)
    • 접근제어자 반환형 메소드명(정수 전달값) {}
    • 접근제어자 반환형 메소드명(정수 전달값1, 정수 전달값2) {}
    • 접근제어자 반환형 메소드명(실수 전달값) {}
// 메소드 오버로딩
public static int add(int a, int b) {
	return a + b;
}

public static int add(int a, int b, int c) {
	return a + b + c;
}

public static int add(double a, double b) {
	return a + b;
}

// add 메소드 호출하기 (매개변수: 정수 두 개, 세 개, 실수 두 개)
public static void main(String[] args) {
    System.out.println(add(1 ,2));
    System.out.println(add(1, 2, 3));
    System.out.println(add(5.3, 3.8));
}

 

변수의 범위

  • 변수의 범위: 변수가 유효한 영역(사용할 수 있는 영역)
  • a 변수의 범위
    public static void scope() {
    System.out.println(a); // 사용 불가
    }

    public static void main(String[] args) {
        int a = 10; // int a는 변수가 선언되어 있는 {} 중괄호 내에서만 사용할 수 있음
        System.out.println(a);
    }
  • b 변수의 범위
    public static void scope() {
        int b = 20; // scope 메소드 내에서 변수 b를 선언함, int b는 변수가 선언되어 있는 {} 중괄호 내에서만 사용할 수 있음
        System.out.println(b);
    }

    public static void main(String[] args) {
    System.out.println(b); // 사용 불가
    }
  • d 변수의 범위
    public static void main(String[] args) {
        int c = 30;
        if (c > 10) {
            int d = 40; // int d 변수는 if문 내에서만 사용할 수 있음
            System.out.println(d);
        }
        System.out.println(d); // 사용 불가
    }
// a 변수의 범위
public static void scope() {
	System.out.println(a); // 메인 메소드 외 영역에서는 a 변수를 사용할 수 없음
}

public static void main(String[] args) {
    int a = 10; // int a는 변수가 선언되어 있는 {} 중괄호 내에서만 사용할 수 있음
    System.out.println(a);
}

// b 변수의 범위
public static void scope() {
    int b = 20; // scope 메소드 내에서 변수 b를 선언함
    System.out.println(b);
}

public static void main(String[] args) {
	System.out.println(b); // 사용 불가
}

// d 변수의 범위
public static void main(String[] args) {
    int c = 30;
    if (c > 10) {
        int d = 40; // int d 변수는 if문 내에서만 사용할 수 있음
        System.out.println(d);
    }
    System.out.println(d); // 사용 불가
}

참고 영상: 나도코딩 - 자바 무료 강의 2시간 완성(1분 자바)

https://youtu.be/DNCBaeCoMug?si=VM02QD9igeT561pp

 

반응형