새소식

Java/제대로 파는 자바

[제대로 파는 자바 (Java)-by 얄코] 메소드

  • -

해당 게시물은 [제대로 파는 자바 (Java) - by 얄코]를 수강한 내용을 바탕으로 작성하였습니다.

 

 

 

 

  • 타 언어의 함수 function 과 같은 개념
  • 자바는 모든 것이 클래스의 요소이므로 메소드 method 라 부름

 

한 번 이상 실행될 수 있는 일련의 작업들을 묶어두는 것

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

        double xx = 3, yy = 4;
        addSubtMultDiv(xx, yy);

        xx = 10; yy = 2;
        addSubtMultDiv(xx, yy);

        xx = 7; yy = 5;
        addSubtMultDiv(xx, yy);
    }

    //  ⭐️ 메인 메소드 외부에 선언할 것
    static void addSubtMultDiv (double a, double b) {
        System.out.printf("%f + %f = %f%n", a, b, a + b);
        System.out.printf("%f - %f = %f%n", a, b, a - b);
        System.out.printf("%f * %f = %f%n", a, b, a * b);
        System.out.printf("%f / %f = %f%n", a, b, a / b);
    }
}

 

 

 

 

 

메소드의 의미 2. 값을 받고 연산하여 결과값을 반환 - 함수

 

static : 정적 메소드 (클래스 메소드) 에서 호출하려면(main 등) 붙어야 함

(정적이 아닌 메소드 (인스턴스 메소드) 는 객체지향 섹션에서 배울 것)

 

매개변수 parameter : 각각 자료형과 변수명을 적음. 없을 시 빈 괄호

 

인자 argument : 호출할 때 넣는 값 (add(3, 4) 의 3과 4)

 

return : 반환하는 값이 있을 때, 맨 마지막에 붙임

 

 

 

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

        //  ⭐️ 반환한다는 것: 바꿔 쓸 수 있다는 것
        //  메서드 실행문을 메서드의 반환값으로 치환
        int int1 = add(2, 3);
        System.out.println(int1);

        System.out.println(add(4, 5));

        int int2 = add(add(6, 7), add(8, 9));
        System.out.println(int2);

    }
    
    static int add (int num1, int num2) {
        return num1 + num2;
    }
}

 

 

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

		//방법1
        if (
                checkIfContain(
                        "Hello World",
                        "hello"
                )
        ) {
            System.out.println("포함됨");
        } else {
            System.out.println("포함 안 됨");
        }




		//방법2
        System.out.println(
                checkIfContain(
                        "Hello World",
                        "hello"
                ) ? "포함됨" : "포함 안 됨"
        );
    }


    static boolean checkIfContain (String text, String token) {
        return text.toLowerCase().contains(token.toLowerCase());
    }
}

 

 

 

다양한 용례

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

        sayHello();
    }


    //  매개변수도, 반환값도 없는 메소드
    static void sayHello () {
        System.out.println("안녕하세요!");
    }
}

 

 

 

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

        int count1 = getCount();
        int count2 = getCount();
        int count3 = getCount();
        int count4 = getCount();
    }


    static int count = 0;

    //  매개변수 없이 값만 반환하는 메소드
    //  외부 변수 값을 변화시킴 (static이므로 static 변수만 가능)
    static int getCount () {
        System.out.println("카운트 증가");
        return ++count;
    }
}
  • return 을 println 윗줄로 옮겨 볼 것
    • return 은 블록을 종료하므로 이후의 코드 무효화 - 컴파일 에러 발생
  • 반환값의 자료형을 바꿔 볼 것 *(short, long, 기타…)
    • 반환값이나 인자의 자료형에 어긋날 경우 컴파일 에러 발생
  • ⚠️ 외부의 변수 값을 바꾸는 것은 좋은 메서드가 아님

 

 

 

 

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

        double avg = getAverage(new int[] {3, 5, 4, 13, 7});
    }

    static double getAverage (int[] nums) {

        double sum = 0;
        for (int num : nums) {
            sum += num;
        }

        return sum / nums.length;
    }
}

 

 

 

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

		int[] numbers = {3, 5, 9, 2, 8, 1, 4};

        //  변수에 담아 보다 효율적으로 바꿔볼 것
        int maxOfNumbers = getMaxAndMin(numbers)[0];
        int minOfNumbers = getMaxAndMin(numbers)[1];
    }



    //  자바의 메소드는 하나의 값만 반환 가능
    //  여러 값을 반환하려면 배열 또는 이후 배울 객체를 활용
    static int[] getMaxAndMin (int[] nums) {

        int max = nums[0];
        int min = nums[0];
        for (int num : nums) {
            max = max > num ? max : num;
            min = min < num ? min : num;
        }

        return new int[] {max, min};
    }
}

 

 

 

디버그시 스텝인투스텝아웃 사용해보기

Step over / Step into / Step out

Step over 사용 시 → 메소드를 사용하는 코드가 있더라도 메소드 내부 진행 과정은 패스하고 결과만!

Step into 사용 시   코드 상 메소드를 사용하면 메소드 내부 진행 과정까지 다 보여주고

Step out 사용 시   과정을 보는 것을 중단하고 빠져나올 수 있음 

 

 

 

매개변수의 개수가 정해지지 않은 메소드

 

▶ ... 연산자 : 해당 위치 뒤로 오는 연산자들을 배열로 묶음 (int[]와는 다름!)

     ※ 다른 인자들과 사용 시 맨 마지막에 놓을 것 (한번만 사용)

배열이 아닌 여러 숫자들을 보내도 ...연산자를 사용하였기 때문에 배열로 인식하여 진행함

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

        double avg = getAverage(3, 91, 14, 27, 4);

        //  💡 배열을 넣으면 자동으로 펼쳐져 인식됨
        int[] numbers = {3, 91, 14, 27, 4};
        double avgOfArr = getAverage(numbers);
    }

    //  💡 ... 연산자 : 해당 위치 뒤로 오는 연산자들을 배열로 묶음
    //  int[] (배열 자체를 받음)과는 다름!
    static double getAverage(int... nums) {
        double result = 0.0;
        for (int num : nums) {
            result += num;
        }
        return result / nums.length;
    }
}

 

 

 

 

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

        String class3Desc = descClass(3, "목아진", "짱구", "철수", "훈이");

        String[] kids = {"짱구", "철수", "훈이"};
        String class3DescByArr = descClass(3, "목아진", kids);
    }


    //  ⭐️ 다른(정해진) 인자들과 사용시 맨 마지막에 놓을 것(한번만!)
    static String descClass (int classNo, String teacher, String... kids) {
        return "%d반의 담임은 %s 선생님, 원생들은 %s 입니다."
                .formatted(classNo, teacher, String.join(", ", kids));
    }
}
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.