티스토리 뷰

한화시스템/백엔드

[BE] JAVA_메소드

jjam-mo 2024. 7. 13. 14:59

1. 메소드 개요

하나의 타입으로 결과가 나온다.

1-1. 메소드(method)란?

💡어떤 특정 작업을 수행하기 위한 명령문의 집합
자세한 메소드 사용법은 객체 부분에서 다룬다! 지금은 호출 흐름에 대해 이해!!

1-2. 메소드의 사용 목적

  1. 중복되는 코드를 메소드로 만들어 코드의 반복 사용을 피할 수 있다.
  2. 코드의 가독성이 좋아진다.
  3. 기능의 변경이 필요한 경우 메소드 부분만 수정하면 되기 때문에, 손쉬운 유지보수가 가능하다.

1-3. 메소드 선언

접근제어자 반환타입 메소드이름 (매개변수 목록) {

		// 실행할 코드

		// 반환타입이 있을경우 반환타입에 맞게 return 작성
		// 반환타입이 void인 경우 생략
		return ...;
}
  1. 접근 제어자 : 메소드에 접근할 수 있는 범위
    1. public : 어디서나 접근 가능
    2. protected : 상속관계이거나 같은 패키지에서 접근 가능
    3. default(생략가능) : 같은 패키지에서 접근 가능
    4. private : 같은 클래스 내부에서만 접근 가능
  2. 반환 타입(return type) : 메소드가 모든 작업을 마치고 반환하는 데이터의 타입
    1. void : 리턴값 없음
    2. 기본 변수 자료형 : int, float, 등등
    3. 오브젝트형 : String, 이외 사용자 정의타입
  3. 메소드 이름 : 메소드를 호출하기 위한 이름
  4. 매개변수 목록(parameters) : 메소드 호출 시에 전달되는 인수의 값을 저장할 변수들
  5. 실행할 코드 : 메소드의 기능을 수행하는 코드

1-4. 메소드 호출

  • 미리 정의한 메소드는 참조연산자(.)를 통해 호출할 수 있다.
public class Application {

   public static void main(String[] args) {

      Application app = new Application();

			//레퍼런스변수이름.메소드이름();			
      app.methodA();
			//레퍼런스변수이름.메소드이름(매개변수1, 매개변수2, ...)
      app.methodB(10);
   }

   public void methodA(){
      System.out.println("method A 호출됨....");
   }

   public void methodB(int x) {
      System.out.println("method B 로 " + x + " 값 넘어옴...");
   }
}

// 실행 결과
method A 호출됨....
method B 로 10 값 넘어옴...

1-5. 메소드 호출 흐름

package com.ohgiraffers.section01.method;

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

        /* 수업목표. 메소드의 호출 흐름에 대해 이해할 수 있다. */ // 스택 구조!
        System.out.println("main() 시작함...");
        methodA();
        System.out.println("main() 종료됨...");
    }

    public static void methodA() {
        System.out.println("methodA() 호출됨...");
        methodB();
        System.out.println("methodA() 종료됨...");
    }

    public static void methodB() {
        System.out.println("methodB() 호출됨...");
        methodC();
        System.out.println("methodB() 종료됨...");
    }

    public static void methodC() {
        System.out.println("methodC() 호출됨...");

        System.out.println("methodC() 종료됨...");
    }
}

// 실행 결과
main() 시작함...
methodA() 호출됨...
methodB() 호출됨...
methodC() 호출됨...
methodC() 종료됨...
methodB() 종료됨...
methodA() 종료됨...
main() 종료됨...
package com.ohgiraffers.section01.method;

public class Application2 {
    public static void main(String[] args) {
        System.out.println("main() 시작됨...");

        /* 설명. static이 없는 메소드(non-static method)는 해당 클래스를 인지시킨 후 접근해 호출한다. */
        Application2 app = new Application2();  // Application2 클래스 전체를 인지해줘~
        app.methodA();                          // 인지된 것 호출
        app.methodB();
        app.methodC();
        System.out.println("main() 종료됨...");
    }

    public void methodA() {
        System.out.println("methodA() 호출됨...");
        System.out.println("methodA() 종료됨...");
    }

    public void methodB() {
        System.out.println("methodB() 호출됨...");
        System.out.println("methodB() 종료됨...");
    }

    public void methodC() {
        System.out.println("methodC() 호출됨...");
        System.out.println("methodC() 종료됨...");
    }
}

// 실행 결과
main() 시작됨...
methodA() 호출됨...
methodA() 종료됨...
methodB() 호출됨...
methodB() 종료됨...
methodC() 호출됨...
methodC() 종료됨...
main() 종료됨...

1-6. 전달인자(argument)와 매개변수(parameter)를 이용한 메소드 호출

  • 변수의 종류
    1. 지역변수
    2. 매개변수
    3. 전역변수(필드)
    4. 클래스(static)변수
package com.ohgiraffers.section01.method;

import java.awt.desktop.AppForegroundListener;

public class Application3 {

    static int global = 10;         // 전역변수이자 클래스 변수(static 존재)

    // public 없으면??? -> 클래스 내에서만 사용! import 불가.
    // global 여러 개 쓰고 싶으면??? -> main 클래스 밖에 쓰면 전역변수!

    /* 수업목표. 메소드 전달인자(argument)와 매개변수(parameter)에 대해 이해하고 메소드 호출 시 활용할 수 있다. */

    public static void main(String[] args) {

        /* 필기.
         *  변수를 선언한 위치에 따라 구분할 수도 있다.
         *  1. 지역변수
         *  2. 전역변수
         *  3. 매개변수
         *  */

        int local = 20;
        System.out.println("global 출력: " + global);
        System.out.println("local 출력: " + local);

        /* 설명. testMethod에 나이를 주고 출력하기  */
        Application3 app3 = new Application3();
        app3.testMethod(13);            // 전달인자 13을 주면서 호출!
        app3.testMethod(19);
        app3.testMethod(15);
        app3.testMethod('a');
        app3.testMethod((int)12.34);
        app3.testMethod(3 * 6);
    }

    /* 설명. 정수형 나이를 주면 문자열을 출력해주는 기능이 있는 메소드 */
    public void testMethod(int age) {
        System.out.println("당신의 나이는 " + age + "세 입니다.");
    }
}

// 실행 결과
global 출력: 10
local 출력: 20

당신의 나이는 13세 입니다.
당신의 나이는 19세 입니다.
당신의 나이는 15세 입니다.
당신의 나이는 97세 입니다.
당신의 나이는 12세 입니다.
당신의 나이는 18세 입니다.
package com.ohgiraffers.section01.method;

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

        /* 수업목표. 여러 개의 전달인자를 이용한 메소드 호출을 할 수 있다. */
        Application4 app4 = new Application4();
        app4.testMethod("홍길동", 20, '남');

        String name1 = "유관순";
        int age = 20;
        char gender = '여';
        app4.testMethod(name1, age, gender);    // 서로 다른 지역이라 name 맞출 필요없지만 맞추는게 관례?

    }

    public void testMethod(String name, int age, final char gender) {
        System.out.println("당신의 이름은 " + name + "이고, 나이는 " + age + "세 이며, 성별은 " + gender + "입니다.");
    }
}

// 실행 결과
당신의 이름은 홍길동이고, 나이는 20세 이며, 성별은 남입니다.
당신의 이름은 유관순이고, 나이는 20세 이며, 성별은 여입니다.

 

1-7. 메소드 리턴

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

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

        /* 수업목표. 메소드 리턴에 대해 이해할 수 있다. */
        Application5 app5 = new Application5();
        app5.testMethod();

    }

    public void testMethod() {
        System.out.println("testMethod() 동작 확인...");

        /* 설명. 메소드를 호출한 곳으로 돌아가기 위해 return;을 작성하며 안적어도 자동 작성된다. */
        return;
    }
}

// 실행 결과
testMethod() 동작 확인...
package com.ohgiraffers.section01.method;

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

        /* 수업목표. 반환값이 있는 메소드를 작성할 수 있다. */
        String result = testMethod();
        System.out.println("result = " + result);

        /* 설명. 따로 굳이 변수에 담을 필요가 없다면 반환값을 바로 활용하는 것도 가능하다. */
        System.out.println("result2 = " + testMethod());
    }

    public static String testMethod() {
        System.out.println("test() 메소드 실행함...");
        return "test";      // 메소드를 호출한 곳에 String 리터럴 값을 반환
    }
}

// 실행 결과
test() 메소드 실행함...
result = test
test() 메소드 실행함...
result2 = test

2. 메소드 활용 

package com.ohgiraffers.section01.method;

public class Calculator {

    // 모듈화(modulation) : 관련있는 것끼리 뭉쳐놓는다.
    public int plusTwoNumbers(int first, int second) {
        return first + second;
    }

    public int subTwoNumbers(int first, int second) {
        return first - second;
    }

    public int multiTwoNumbers(int first, int second) {
        return first * second;
    }

    public int divideTwoNumbers(int first, int second) {
        return first / second;
    }

    public int minNumbersOf(int first, int second) {
        return (first > second) ? second : first;
    }

    public static int maxNumbersOf(int first, int second) {
        return (first > second) ? first : second;
    }
}
package com.ohgiraffers.section01.method;

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

        /* 수업목표. 다른 클래스에 작성한 메소드를 활용할 수 있다. */
        int first = 100;
        int second = 50;

        Calculator cal = new Calculator();

        /* 설명. 덧셈 */
        System.out.println("두 수의 합은? " + cal.plusTwoNumbers(first, second));

        /* 설명. 최소값 */
        System.out.println("두 수 중 작은 값은? " + cal.minNumbersOf(first, second));

        /* 설명. 최대값 */
        System.out.println("두 수 중 큰 값은?(static 메소드) " + Calculator.maxNumbersOf(first, second));
    }
}

// 실행 결과
두 수의 합은? 150
두 수 중 작은 값은? 50
두 수 중 큰 값은?(static 메소드) 100

'한화시스템 > 백엔드' 카테고리의 다른 글

[BE] JAVA_API  (0) 2024.07.13
[BE] JAVA_패키지, 임포트  (0) 2024.07.13
[BE] JAVA_연산자  (0) 2024.07.13
[BE] JAVA_형변환  (0) 2024.07.13
[BE] JAVA_오버플로우  (0) 2024.07.13
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함