-
[Java] 메서드 (feat. 인수 != 매개변수)언어/Java 2024. 10. 29. 10:06
[지금 무료]김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음 강의 | 김영한 - 인프런
김영한 | 프로그래밍에 처음 입문하는 분들을 위한 자바 강의입니다. 코드를 따라하면서 손쉽게 자바를 배울 수 있습니다., 국내 개발 분야 누적 수강생 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을 마지막 줄에 넣어준다.
'언어 > Java' 카테고리의 다른 글
[Java] 클래스, 객체(인스턴스) (5) 2024.11.04 [Java] 반환타입, 메서드 오버로딩 (0) 2024.10.30 [Java] 배열, 향상된 for문 (0) 2024.10.28 [Java] 형 변환, 계산과 형 변환, 스캐너 (0) 2024.10.26 [Java] operator and conditional statement (3) 2024.10.24