Java

[Java] 메서드

dalooong 2023. 7. 7. 11:29
  • 메소드

: 어떤 기능을 하는 코드들의 묶음이라고 한다.

public class _01_Method {
    //메소드 정의(주로 동사를 사용한다(동작))
    public static void sayHello(){
        System.out.println("안녕하세요? 메소드입니다.");
    }

    public static void main(String[] args) {
     //메소드 호출
        System.out.println("메소드 호출 전 ");
        sayHello();
        sayHello();
        sayHello();
        System.out.println("메소드 호출 후 ");
    }
}

단계)

1.메소드 정의 (main 불러오기 전 public static void 메소드명 ( ){}

{ 괄호 안에 메소드 명령 sout 통해서 적기}

2.메소드 호출 (public static void main 불러 온 후 명령 적고, 메소드 명령 불러오기)

** 메소드는 원하는 만큼 호출 할 수 있음.

  1. 전달값 Parameter
public class _02_Parameter {
    //전달값이 있는 메소드
    public static void power(int number){ //parameter = 매개변수
        int result = number * number;
        System.out.println(number + " 의 2 승은 " + result);
    }
    //메소드 2번째 
    public static void powerByExp(int number, int exponent){
        int result = 1;
        for (int i = 0; i < exponent; i++) {
            result *= number;
        }
        System.out.println(number + " 의 " + exponent + " 승은 " + result);
        }

    public static void main(String[] args) {
        //전달값, parameter
        // 2 -> 2*2 =4 출력
        // 3-> 3*3 = 9출력

        //argument = 인수
        power(2 ); // 2*2=4출력
        power(3);

        powerByExp(2,3);
        powerByExp(3,3);
        powerByExp(10,0);
    }
}

2. Return

public class _03_Return {
    // 호텔 전화번호
    public static String getPhoneNumber(){
        String phoneNumver = "02-1234-5678";
        return phoneNumver;
    }
    // 호텔 주소
    public static String getAddress(){
        return "서울시 어딘가";
    }

    // 호텔 액티비티
    public static String getAcitivites(){
        return "볼링장, 탁구장, 노래방";
    }

    public static void main(String[] args) {
        // 반환값, return
        String contactNumber = getPhoneNumber();
        System.out.println("호텔 전화번호 : " + contactNumber);

        String address = getAddress();
        System.out.println("호텔 주소 : " + address);

        System.out.println("호텔 액티비티 : " + getAcitivites());//string 안하고 바로 sout통해서 호출해도됨
    }
}

3. 전달값과 반환값 Parameater And Return

public class _04_ParameaterAndReturn {

    public static int getpower(int number) { //전달값
        int result = number * number;
        return result;
    }

    public static int getPowerByExp(int number, int exponent) {
        int result = 1;
        for (int i = 0; i < exponent; i++) {
            result *= number;
        }
        return result;
    }

    public static void main(String[] args) { //반환값
        //전달값과 반환값이 함께있는 메소드 만들기
       int retVal =  getpower(2); //2*2=4 호출
        System.out.println(retVal);

        retVal = getpower(3);
        System.out.println(retVal);

        retVal = getPowerByExp(3, 3);
        System.out.println(retVal); //3*3*3 = 27s

        System.out.println(getPowerByExp(2,4));
    }
}

4. 메소드 오버로딩

: 똑같은 이름의 메소드를 여러번 사용하는 걸 메소드 오버로딩이라고 한다.

메소드오버로딩을 할 때에는 전달값의 타입이 다르거거나 ,갯수가 다를떄 사용가능

  1. 전달값의 타입이 다르거나
  2. 전달값의 갯수가 다른 경우 같은 이름의 메소드를 여러번 선언 가능하다.
public class _05_Overloading { //여러개의 메소드를 만드는것

    public static int **getpower**(int number) { //전달값
        int result = number * number;
        return result;
    }
    public static int **getPower**(String strNumber){
        int number = Integer.parseInt(strNumber); //int 형을 문자형으로 변환 Integer.parseInt 사용
        return  number * number;
    }

    public static int **getPower**(int number, int exponent) {
        int result = 1;
        for (int i = 0; i < exponent; i++) {
            result *= number;
        }
        return result;
    }

    public static void main(String[] args) {
        System.out.println(**getpower**(3)); //3*3 = 9출력
        System.out.println(**getPower**("4")); //4 * 4 =16
        System.out.println(**getPower**(3, 3)); //3*3*3=27
        //똑같은 이름의 메소드를 여러번 사용하는 걸 메소드 오버로딩이라고 한다.
        // 메소드오버로딩을 할 때에는 전달값의 타입이 다르거거나 ,갯수가 다를떄 사용가능
    }
}

5. 메소드가 필요한 이유

코드 예시 2개 (같은 값 출력)

1번

2번

public class _06_WhenToUse {

    public static int getPower(int number, int exponent){
        int result = 1;
        for (int i = 0; i < exponent; i++) {
            result *= number;
        }
        return result;
    }
    public static void main(String[] args) {
            int result = 1;
            for (int i = 0; i < 2; i++) {
                result *= 2;
            }
        System.out.println(result); // 2*2=4

        result = 1;
        for (int i = 0; i < 3; i++) {
            result *= 3;
        }
        System.out.println(result); // 3*3=27

        result = 1;
        for (int i = 0; i < 2; i++) {
            result *= 4;
        }
        System.out.println(result); //4*4 = 16
}
} 
4 27 16 출력
public class _06_WhenToUse {
    public static int getpower(int number) { //전달값
        return getPower(number, 2);
    }

    public static int getPower(int number, int exponent){
        int result = 1;
        for (int i = 0; i < exponent; i++) {
            result *= number;
        }
        return result;
    }
    public static void main(String[] args) {
        System.out.println(getPower(2,2));
       
        System.out.println(getPower(3,3));
      
        System.out.println(getPower(4,2));
   
        System.out.println(result); //4*4 = 16
}
} 
4 27 16
  1. 변수의 범위 Scope
public class _07_VariableScope {
    public static void methodA(int number){
        //System.out.println(number);
        //System.out.println(result);
    }
    public static void methodB(){
        int result = 1; //지역변수 ( 변수가 선언된 영역내에서만 사용가능)
    }

    public static void main(String[] args) {
        int number = 3;
        
         System.out.println(result);
        
        for (int i = 0; i <5 ; i++) {
            System.out.println(i);
        }
       System.out.println(i);
        {
            int j = 0;
            System.out.println(j);
            System.out.println(number); //괄호안에서면 사용 가능
        }
        System.out.println(j);
        }
    }

** 지역변수 : 변수가 선언된 영역내에서만 사용가능하고 괄호안에서만 사용가능하다.

만약 선언된 변수를 사용하고 싶을 때에는 public static void methodA(int number) ←이렇게 메소드 명 안에 넣어주고 사용하면 된다.

  1. 메인메서드
public class _08_MainMethod {
    public static void main(String[] args) { //메인 메소드
        for (String s : args) {
            System.out.println(s);
        }
        if (args.length == 1){
            switch (args[0]){
                case "1":
                    System.out.println("도서 조회 메뉴입니다.");
                    break;
                case "2":
                    System.out.println("도서 대출 메뉴입니다.");
                    break;
                case "3":
                    System.out.println("도서 반납 메뉴입니다.");
                    break;
                default:
                    System.out.println("잘못 입력하셨습니다.");
            }
        } else {
            System.out.println("사용법) 1~3 메뉴 중 하나를 선택하세요.");
    }
}
}
  1. Quix
public class _Quiz_06 {
    
    public static String getHiddenData(String data, int index){
        String hiddenData = data.substring(0, index); //나코딩 -> 나**
      for (int i = 0; i < data.length() - index; i++) {
            hiddenData += "*"; //나**
        }
        return hiddenData;
    }

    public static void main(String[] args) {
        //개인정보 중 일부를 비공개로 전환하는 프로그램을 작성하시오.
        String name = "나코딩";
        String id =  "990130-1234567";
        String phone = "010-1234-5678";

        System.out.println("이름 : " + getHiddenData(name, 1)); //개인정보, 비공개 시작 위치
        System.out.println("주민등록번호 : " +  getHiddenData(id, 8));
        System.out.println("전화번호 : " +  getHiddenData(phone, 9));
    }
}
실행 결과
이름 : 나**
주민등록번호 : 990130-1******
전화번호 : 010-1234-****
public static String getHiddenData(String data, int index){
        String hiddenData = data.substring(0, index); //나코딩 -> 나**
      for (int i = 0; i < data.length() - index; i++) {
            hiddenData += "*"; //나**
        }
        return hiddenData;
    }