[Java] 메소드(2)

Date:     Updated:

카테고리:

태그:

java.png

메소드 리턴

return 이란?

  • 모든 메소드 내부에는 리턴이 존재한다
  • void 메소드의 경우는 리턴을 명시하지 않아도 마지막줄에 컴파일러가 자동으로 추가를 해준다
  • return은 현재 메소드를 강제 종료하고 호출한 구문으로 다시 돌아가는 명령어이다
package com.ohgiraffers.section01.method;

public class Application5 {
    public static void main(String[] args) {

        System.out.println("main()메소드 시작함");

        /*1. 메소드 리턴 테스트*/
        Application5 app5 = new Application5();
        app5.testMethod();


        System.out.println("main()메소드 종료함");

    }

    public void testMethod(){

        System.out.println("테스트 메소드 동작 확인...");

        /* 컴파일러에 의해 자동으로 추가되는 구문이다.
        * 가장 마지막 작성하고, 마지막에 작성되지 ㅇ낳을 경우는 컴파일 에러발생시킵니다.
        * */

        return;

       // System.out.println(); //에러 발생. return은 메소드 가장 마지막에 작성해야한다.
    }
}
  • 출력값
main()메소드 시작함
테스트 메소드 동작 확인...
main()메소드 종료함

메소드 리턴값 테스트

  • 메소드는 항상 마지막에 return 명령어가 존재한다
  • return은 자신을 호출한 구문으로 복귀하는 것을 의미한다
  • 복귀를 할 때 그냥 복귀할 수도 있지만 값을 가지고 복귀할 수도 있다
  • 이 때 가지고 가는 값을 리턴값이라고 한다
  • 리턴값을 반환받기 위해서는 메소드 선언부에 리턴타입을 명시 해주어야 한다
  • void는 아무 반환값도 가지지 않겠다는 리턴타입에 사용할 수 있는 키워드이다
  • 반환값이 없는 경우 return 구문은 생략해도 컴파일러가 자동으로 추가해주지만, 반환값이 있는 경우는 return 구문을 반드시 명시적으로 작성해야한다
  • 또한 메소드 선언부에 선언한 리턴타입 반환값의 자료형은 반드시 일치하여야 한다
package com.ohgiraffers.section01.method;

public class Application6 {
    public static void main(String[] args) {
        
        System.out.println("main 메소드 시작함");
        Application6 app6 = new Application6();
        app6.testMethod();

        String returnText = app6.testMethod();
        System.out.println(returnText);  //hello world 출력됨
        System.out.println(app6.testMethod());


        System.out.println("main 메소드 종료함");
    }

    public String testMethod(){


        return"hello world";

    }

}
  • 출력값
main 메소드 시작함
hello world
hello world
main 메소드 종료함

매개변수와 리턴값 복합활용

  • 매개변수도 존재하고 리턴값도 존재하는 메소드를 이용하며 간단한 계산기를 만들어보자
package com.ohgiraffers.section01.method;

public class Application7 {
    public static void main(String[] args) {
        
        int first = 20;
        int second = 10;
        Application7 app7 = new Application7();
        System.out.println("두 수를 더한 결과 : " + app7.plusTwoNum(first,second));
        System.out.println("두 수를 뺀 결과 : " + app7.minusTwonum(first,second));
        System.out.println("두 수를 곱한 결과 : " + app7.multipleTwoNum(first,second));
        System.out.println("두 수를 나눈 결과 : " + app7.divideTwoNum(first,second));

    }

    public int plusTwoNum(int first, int second){

        return first + second;
    }
  • 출력값
두 수를 더한 결과 : 30
두 수를 뺀 결과 : 10
두 수를 곱한 결과 : 200
두 수를 나눈 결과 : 2

static 메소드란?

  • static 메소드는 특정 클래스의 인스턴스에 속하지 않고 클래스 자체에 속하는 메소드를 의미합니다. 이 메소드는 클래스의 인스턴스를 생성하지 않고도 호출할 수 있으며, 주로 유틸리티 함수나 헬퍼 함수 등을 구현할 때 사용됩니다. 클래스의 인스턴스 변수에 접근할 수 없고, 오직 클래스 변수만을 사용할 수 있다

static 메소드 호출하는 방법

  • 클래스명.메소드명(); <– 이런 방식으로 호출한다
package com.ohgiraffers.section01.method;

public class Application8 {
    public static void main(String[] args) {
      
        System.out.println("10과 20의 합 : " +Application8.sumTwoNum(10,20));

        /* 동일한 클래스 내에 작성된 static메소드는 클래스명 생략이 가능하다.*/

        System.out.println("10과 20의 합 : " + sumTwoNum(10,20));

    }

    public static int sumTwoNum(int first, int second){

        return first +  second;
    }
}
  • 출력값
10과 20의 합 : 30
10과 20의 합 : 30

다른 클래스에서 작성한 메소드 호출

package com.ohgiraffers.section01.method;

public class Application9 {
    public static void main(String[] args) {
       
        /* 최대값 최솟값을 비교할 두 정수를 변수로 선언 */
        int first = 100;
        int second = 50;

        /* non-static메소드의 경우 */
        /*
        * 클래스가 다르더라도 사용하는 방법은 동일하다.
        * 클래스명 사용할이름 = new 클래스명();
        * 사용할이름.메소드명();
        * */

        Calculator cal = new Calculator();
        int min = cal.minNumberOf(first,second);
        System.out.println("두 수 중 최소값은? " + min);

        /* static 메소드인 경우 */
        /* 다른 클래스에 작성한 static 메소드의 경우 호출할 때 클래스명을 반드시 기술해야한다.
        * 클래스명.메소드명(); */
       // int max = maxNumberOf(first,second); //클래스명을 생략하면 에러가 발생합니다.
        int max = Calculator.maxNumberOf(first,second);

        System.out.println("두 수 중 최대값은? " + max);
     
        int max2 = cal.maxNumberOf(first,second);

        System.out.println("두 수 중 최대값은? " + max2);


    }
}

static 메소드는 non-staic메소드처럼 호출은 가능하지만 권장하지 않는다

  • 이미 메모리에 로딩되어있는 static메소드는 여러 객체가 공유하게 된다.
  • 그때 객체로 접근하게 되면 인스턴스가 가진 값으로 공유된 값에 예상치 못하는 동작을 유발할 수 있기 때문에
  • 사용을 제한해 달라는 경고다. 시스템이 복잡할 수록 유지보수에 악영향을 준다.
  • 출력값
두 수 중 최소값은? 50
두 수 중 최대값은? 100
두 수 중 최대값은? 100
  • Calculator 클래스를 미리 작성해 두었다
package com.ohgiraffers.section01.method;

public class Calculator {

    public int minNumberOf(int first, int second){

        return (first>second)? second : first;
    }

    public static int maxNumberOf(int first, int second){

        return (first>second)? first : second;
    }
}

요약. 메소드는 특정 작업을 수행하는 코드 블록이며, 함수와 비슷하나 객체 지향 프로그래밍에서는 클래스에 속하는 함수를 의미한다!

요즘 하루하루가 정신없이 지나간다.. 복습도 하고 먼거리를 왕복하다보니 하루 평균수면은 3~4시간이다. 그런데 몸은 힘들지만 새로운 지식을 습득한다는 마음에 항상 즐겁다!! 초심 잃지않기

Java 카테고리 내 다른 글 보러가기

댓글 남기기