ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 메서드 (feat. 인수 != 매개변수)
    언어/Java 2024. 10. 29. 10:06

    https://www.inflearn.com/course/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%9E%90%EB%B0%94-%EC%9E%85%EB%AC%B8/dashboard

     

    [지금 무료]김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음 강의 | 김영한 - 인프런

    김영한 | 프로그래밍에 처음 입문하는 분들을 위한 자바 강의입니다. 코드를 따라하면서 손쉽게 자바를 배울 수 있습니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 자바 입문[사

    www.inflearn.com

    아래 내용은 위 링크에서 더 자세히 보실 수 있습니다.

    단축키 Tip

    ctrl + x → 라인 삭제

    ctrl + b → 헤당 메서드 본문으로 이동한다.

     

    섹션 9 문제와 풀이2 ArrayEx7

    package array.ex;
    
    import java.util.Scanner;
    
    public class ArrayEx7 {
    
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int[][] students = new int[4][3];
    
            for (int i = 0; i < 4; i++) {
                System.out.println((i + 1)+ "번 학생의 성적을 입력하세요: ");
                System.out.print("국어 점수:");
                students[i][0] = scanner.nextInt();
                System.out.print("영어 점수:");
                students[i][1] = scanner.nextInt();
                System.out.print("수학 점수: ");
                students[i][2] = scanner.nextInt();
                }
    
            for (int i = 0; i < 4; i++) {
                int sum = 0;
                for (int j = 0; j < 3; j++) {
                    sum += students[i][j];
                }
                System.out.println(i + "번 학생의 총점: " + sum + ", 평균: " + (double)sum / 3);
            }
        }
    }
    • 첫 번째 for문의 경우에 리팩토링이 가능하다.
    • String[] subject = {"국어", "영어", "수학"};
    for (int i = 0; i < 4; i++) {
    	sout((i + 1) + "번 학생의 성적을 입력하세요. ");
        for (int j = 0; j < subject.length; j++) {
        	sout({j}" 점수: ");
            students[i][j] = scanner.nextInt();
        }
    }

    문제와 풀이3 : 상품 등록

    package array.ex;
    
    import java.util.Scanner;
    
    public class ProductAdminEx {
    
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            String[] productNames;
            int[] productPrices;
            int productCount = 0;
    
            while (true) {
                int num = 0;
    
                System.out.println("1. 상품 등록 | 2. 상품 목록 | 3. 종료");
                System.out.print("메뉴를 선택하세요: ");
                num = scanner.nextInt();
                if (productCount == 10 && num == 3) {
                    System.out.println("프로그램을 종료합니다.");
                    break;
                } else if (num == 1) {
                    productCount++;
                    System.out.print("상품 이름을 입력하세요: ");
                    productNames[] = scanner.next();
                    System.out.print("상품 가격을 입력하세요: ");
                    productPrices[] =scanner.nextInt();
                } else if (num == 2) {
                    for (int i = 0; i < productNames.length; i++) {
                        for (int j = 0; j < productPrices.length; j++) {
                            
                        }
                    }
                }
            }
        }
    }
    • 배열에서 값을 어떻게 넣지? 동적으로 계속 그 크기를 늘려주나?
    package array.ex;
    
    import java.util.Scanner;
    
    public class ProductAdminEx {
    
        public static void main(String[] args) {
           int maxProducts = 10;
           String[] productNames = new String[maxProducts];
           int[] productPrices = new int[maxProducts];
           int productCount = 0;
            Scanner scanner = new Scanner(System.in);
            while (true) {
                System.out.print("1. 상품 등록 | 2. 상품 목록 | 3. 종료 \n메뉴를 선택하세요 :");
                int menu = scanner.nextInt();
                scanner.nextLine();
    
                if (menu == 1) {
                    if (productCount > maxProducts) {
                        System.out.println("더 이상 상품을 등록할 수 없습니다.");
                        continue;
                    }
                    System.out.print("상품 이름을 입력하세요: ");
                    productNames[productCount] = scanner.nextLine();
    
                    System.out.print("상품 가격을 입력하세요: ");
                    productPrices[productCount] = scanner.nextInt();
    
                    productCount++;
                } else if (menu == 2) {
                    if (productCount == 0) {
                        System.out.println("등록된 상품이 없습니다.");
                        continue;
                    }
    
                    for (int i = 0; i < productCount; i++) {
                        System.out.println(productNames[i] + ": " + productPrices[i] + "원");
                    }
                } else if (menu == 3) {
                    System.out.println("프로그램을 종료합니다.");
                    break;
                } else {
                    System.out.println("잘못된 입력입니다.");
                    continue;
                }
    
            }
        }
    }
    • 초기 세팅값인 상품이 10개 초과되서는 안된다라는 점을 이용해 배열의 크기를 정한다.
    • 나머지 예외가 있을 수 있는 부분을 처리해준다.

    메서드(Method)

    • 자바는 함수를 메서드라고 한다.
    • 수학에 너무 집중하지는 말자. 단순히 무언가 정의해두고 필요할 때 불러서 사용한다는 개념으로 이해하면 충분하다.
    // add(a, b) method
    public static int add(int a, int b){
    	sout(a + " + " + b + " 연산수행");
    	int sum = a + b;
    	return sum;
    }

    public static int add(int a, int b){
    	// 메서드 본문, 실행코드
    }
    제어자 반환타입 메서드이름(매개변수 목록) {
    	// 메서드 본문
    }
    • 제어자(Modifier) : public, static 같은 부분이다. 제어자는 뒤에서 설명한다. 지금은 항상 public static 키워드를 입력하자.
    • 반환 타입(Return Type) : 메서드가 실행된 후 반환하는 데이터 타입을 지정한다. 메서드 값을 반환하지 않는 경우 없다는 뜻으로 void 를 사용한다. ex. void print(String str)
    • 메서드 이름(Method Name) : 메서드의 이름이다. 이 이름은 메서드를 호출하는 데 사용된다.
    • 매개변수(Parameter) : 입력 값으로, 메서드 내부에서 사용할 수 있는 변수이다. 매개변수는 옵션이다. 입력값이 필요없는 메서드는 매개변수를 지정하지 않아도 된다. ex. add()
    • 메서드 본문 : 실제 메서드의 코드가 위치한다.

    [용어 정리]

    호출 : call("Hello", 23)
    메서드 정의 : int call(String str, int age)
    • 인수(Argument)
      • 전달하는 수 call 안에 들어 있는 값들을 인수라고 한다. 
      • 즉, 메서드 내부로 들어가는 값
      • 실무에서 인수, 아규먼트, 인자라는 용어를 모두 사용한다.
    • 매개변수(Parameter)
      • 메서드를 정의할 때 선언한 변수를 매개변수라고 한다.
      • 매세드를 호출할 때 인수를 넘기면, 그 인수가 매개변수에 대입된다.
      • 실무에서는 매개변수, 파리미터 용어를 모두 사용한다.

    [매개변수가 없거나 반환 타입이 없는 경우]

    package method;
    
    public class Method2 {
    
        public static void main(String[] args) {
            printHeader();
            System.out.println("프로그램이 동작합니다.");
            printFooter();
        }
    
        public static void printHeader() {
            System.out.println("= 프로그램을 시작합니다 =");
            return;
        }
    
        public static void printFooter() {
            System.out.println("= 프로그램을 종료합니다 =");
        }
    }
    • 매개변수가 없는 경우
      • 선언 : public, static void printHeader() 와 같이 매개변수를 비워 두고 정의
      • 호출 : printHeader() 와 같이 인수를 비워두고 호출하면 된다.
    • 반환 타입이 없는 경우
      • 선언 : public static void printHeader() 와 같이 반환 타입을 void 로 정의
      • 호출 : printHeader()와 같이 반환 타입이 없으므로 메서드만 호출하고 반환 값을 받지 않으면 된다.
        • String str = printHeader() 반환 타입이 void 이기 때문에 이렇게 반환값을 받으면 컴파일 오류가 발생한다.
    • void와 return 생략
      • 모든 메서드는 항상 return을 호출해야한다. 즉, 반환값이 있어야 한다. 그런데 반환 타입이 void의 경우에는 예외로 return을 생략해도 된다. 자바 컴파일러가 반환 타입이 없는 경우에는 return을 마지막 줄에 넣어준다. 
Designed by Tistory.