제이제이
article thumbnail

 

메소드(함수)


🤔메소드란?

  • 프로그램 내 행동 및 작업을 수행하기 위한 명령문입니다.

 

  • main메소드를 살펴봅시다.

> 자바 프로그램 내 main 메소드 또는 메소드입니다.

 

💻 예시 코드

public static void main(String[] args) {
		int number1 = 10;
		int number2 = 20;
		System.out.println(" 10 + 20 = " + (number1 +number2);
}

 

📸 출력 결과

 10 + 20 = 30

 

🏢 main메소드의 구조

public static void main(String[]) {
	/* main 메소드의 내용
	 1번째 명령문
	 2번째 명령문
	*/
}

 

main메소드의 구조를 살펴보면 다음과 같은 내용을 알 수 있습니다.

  1. 메소드의 이름은 main메소드이다.
  2. 메소드는 중괄호 내에 있는 문장들을 위에서 아래로 순차적으로 실행한다.

 

자바에서의 main 메소드의 약속

  • 자바 프로그램 내 main메소드는 무조건 있어야 하며, main이라는 메소드에서부터 실행됩니다.

 

  • 이번에는 main메소드 말고 다른 메소드를 정의하고 호출하는 방법에 대해 알아봅시다.

 

💻 예시 코드

public class MethodDef {
   public static void main(String[]args){
       System.out.println("프로그램의 시작");
       hiEveryone(12); //12를 전달하며 hiEveryone 호출 - 메소드 호출문
       hiEveryone(13); //13을 전달하며 hiEveryone 호출 - 메소드 호출문
       System.out.println("프로그램의 끝");
   }

   //메소드 정의 - 메소드를 정의하는 부분입니다.
   public static void hiEveryone(int age){
       System.out.println("좋은 아침입니다.");
       System.out.println("제 나이는 " + age + "세 입니다.");
   }
}

 

📸  출력 결과

프로그램의 시작
좋은 아침입니다.
제 나이는 12세 입니다.
좋은 아침입니다.
제 나이는 13세 입니다.
프로그램의 끝

 

  • 메소드 호출문 (hiEveryone(12), hiEveryone(13) )

-> 선언된 메소드에 매개변수(12,13)를 대입하여 메소드를 호출합니다.

 

❓ 매개변수란?

  • 메소드 호출시 전달되는 값을 받기 위해 선언된 변수를 의미합니다.

 

  • 다음의 예를 통해 매개변수를 설정하는 메소드와 설정하지 않은 메소드를 살펴봅시다.

💻 예시 코드

public class Method2Param {
    public static void main(String[]args){
        double myHeight = 175.9;
        hiEveryone(12,12.5); //인자 12와 12.5의 전달
        hiEveryone(13,myHeight); //인자 13과 변수 myHeight에 저장된 값 전달
        byEveryone(); //전달하는 인자 없음
    }

		//매개변수 age,height 전달
    public static void hiEveryone(int age, double height){
        System.out.println("제 나이는 " + age+ "세 입니다.");
        System.out.println("저의 키는 " + height + "cm 입니다.");
    }
		
		//매개변수가 없는 메소드
    public static void byEveryone(){
        System.out.println("다음에 뵙겠습니다.");
    }
}

 

📸  출력 결과

제 나이는 12세 입니다.
저의 키는 12.5cm 입니다.
제 나이는 13세 입니다.
저의 키는 175.9cm 입니다.
다음에 뵙겠습니다.

 

 

 

메소드의 반환값이란?

  • 메소드를 호출한 부분으로 반환한 값입니다.
  • 다음의 예를 통해 메소드의 반환값에 대해 살펴봅시다.

 

💻 예시 코드

public class MethodReturns {
   public static void main(String[]args){
       int result;
       result = adder(4,5); //adder가 반환하는 값을 result에 저장
       System.out.println("4 + 5 = "+result);
       System.out.println("3.5 x 3.5 = "+square(3.5));
   }
		
	//메소드 adder
   public static int adder(int num1,int num2){
       int addResult = num1 + num2;
       return addResult; //addResult의 값을 반환
   }

	 //메소드 square
   public static double square(double num){
       return num * num; //num * num의 결과를 반환
   }
}

 

📸 출력 결과

4 + 5 = 9
3.5 x 3.5 = 12.25

 

  • 메소드의 반환값에 대해 자세히 살펴봅시다.
  • 메소드의 이름 왼쪽에는 메소드가 반환하는 값의 자료형을 넣게 됩니다.

 

👩🏻‍🏫 설명

  • main 메소드의 왼쪽에 있는 void라는 키워드가 있는데 “값을 반환하지 않는다.”라는 의미입니다.
  • adder 메소드의 왼쪽의 int라는 키워드는 “int형을 반환한다”라는 의미입니다.
  • square 메소드의 왼쪽의 double이라는 키워드는 “double형을 반환한다”라는 의미입니다.

 

❓ 키워드 return의 의미

  • 키워드 return은 다음의 두가지 의미를 갖고 있습니다.

   1. 메소드를 호출한 곳으로 값을 반환

   2. 메소드의 종료

 

다음의 예를 통해 살펴봅시다

  • 메소드 내 num2값이 0이므로 키워드 return이 실행되면서 메소드가 종료됨을 알 수 있습니다.

💻 예시 코드

public class OnlyExitReturn {
    public static void main(String[]args){
        divide(4,2);
        divide(6,2);
        divide(9,0);
    }

    public static void divide(int num1, int num2){
        if(num2 ==0){
            System.out.println("0으로 나눌 수 없습니다.");
            return; //메소드 divide의 종료
        }
        System.out.println("나눗셈 결과: " + (num1/num2));
    }
}

 

📸 출력 결과

나눗셈 결과: 2
나눗셈 결과: 3
0으로 나눌 수 없습니다.

 

변수의 스코프(영역)


변수의 스코프란?

  • 변수를 접근할 수 있는 영역 혹은 변수가 소멸되지 않고 존재할 수 있는 영역을 의미합니다.

 

먼저 이전에 배웠던 반복문, 조건문을 살펴봅시다.

  • 변수 number는 if문의 중괄호 내에서만 접근이 가능하며 중괄호를 벗어나는 순간 소멸되어 접근이 불가한 변수가 됩니다.
if (...){
  int number = 10; //변수 number 10은 if안에서만 접근 가능하다.

}

 

다음의 예를 통해 자세히 살펴봅시다.

💻 예시 코드

public class LocalVariable {
    public static void main(String[]args){
        boolean ste = true;
        int num1 = 13;

        if(ste){
            num1++;
            System.out.println(num1);
        }
        
        {
            int num2 = 33;
            num2++;
            System.out.println(num2);
        }
	//System.out.println(num2); //num2는 접근 불가,컴파일 오류가 발생됨
    }
}

 

📸 출력 결과

14
34

 

👩🏻‍🏫 설명

  • 변수 num1와 num2를 살펴봅시다.
  • 변수 num1은 main메소드 안에서 변수 선언이 되어 있어 main 메소드 내에서는 접근이 가능합니다.
  • 반면 변수 num2는 중괄호 안에서 별도로 영역을 분리하여 변수를 선언하였습니다.
    이에 변수 num2는 별도로 분리된 영역 안에서만 사용이 가능합니다.
    만약 num2 변수가 선언된 별도의 영역을 벗어나 사용하게 되면 컴파일 오류가 발생합니다.

 

보다 쉽게 이해하기 위해 다음의 예를 살펴봅시다.

for문

  • 선언된 변수 number는 for문에서만 유효하고 접근 가능합니다.
for(int numer = 0; number <10; number++) {
	//선언된 변수 number가 사용가능한 영역

}

 

매개 변수

  • 매개변수도 마찬가지로 해당 메소드 내에서만 사용가능합니다.
public static void divide(int num1, int num2) {
		//매개 변수 num1과 num2가 사용가능한 영역

}

 

  • 이와 같이 중괄호 내에서 선언된 변수, 접근 가능한 변수를 지역 변수라고 합니다.

 

지역 변수란?

  • 지역 변수란 중괄호 내, 매개변수에서 선언되어 선언된 영역 내에서만 사용할 수 있는 변수입니다.
  • 지역 변수는 선언된 영역을 벗어나면, 메모리 공간에서 소멸됩니다.

 

📒 Reference (참고 자료)


  1. 윤성우의 열혈 자바
  2. TCP 스쿨 코딩교육 티씨피스쿨
 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

profile

제이제이

@아사비치즈스틱

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!