키보드워리어

【Jshell】메소드를 찐하게 배워보자 (구구단표 활용, Quiz 5가지) 본문

JAVA/Jshell

【Jshell】메소드를 찐하게 배워보자 (구구단표 활용, Quiz 5가지)

꽉 쥔 주먹속에 안경닦이 2022. 8. 21. 19:03
728x90

안녕하세요 【키보드 워리어】


⌨🗡🧑


블로그 방문자 여러분, 안경닦이입니다


오늘은 오랜만에 Java컨텐츠, jshell 에 대해 알아보겠습니다~


자바 컨텐츠를 마지막으로 올린 날짜가 7월 11일로


마지막으로 포스팅한지 벌써 1달이 넘어버렸네요



다른 내용들과 함께 배우면서, 조금 늦었습니다


jshell로 구구단을 활용해보고 메소드에 대해 살펴보겠습니다!


바로 가시죠!


 

 

메소드 (𝙢𝙚𝙩𝙝𝙤𝙙𝙨)



메소드란 코드들을 모은 것의 이름입니다


메소드의 기본 구분을 한 번 살펴볼까요?



Return Type Name Of The Metod(){

Body of the method

}


생략된 것도 있지만
일단 여기까지 살펴볼게요!



· Return Type

리턴 타입은 메소드가 끝나고 나서 반환해주어야 하는리턴 값에 따라
메소드에 데이터 형식을 지정해주어야 합니다

※만약 반환할 데이터 값이 없다면 void로 지정해주세요

· NameOfTheMetod

메소드의 이름이 들어가는 부분입니다


이름은 코딩하지 않은 다른 개발자가 보아도
한눈에 알아볼 수 있을 정도로 객관적이어야 합니다


소문자로 시작해야 하고요


제가 포스팅했던 카멜 대문자를 참고해주시기 바랍니다
2022.07.05 - [JAVA 완전정복!!/Jshell] - 【JShell】자바 변수에 대하여


· Body of the method

메소드의 몸통 부분입니다


Java 언어에 맞게 코딩해주어 메소드를 정의합니다
메소드의 할 일을 지정해주는 곳입니다



<깜짝 퀴즈>

퀴즈

[01] 여러분의 첫 번째 자바 메소드를 만들어보세요!
- "Hello World"문구를 출력하는 sayHelloWorldTwice 메소드를 만들어 볼게요



[정답]

헬로월드 두번 출력하는 메소드




※ 메소드를 불러오기 할 때는
메소드 입력 후 괄호를 넣어주세요

괄호를 입력하지 않으면
메소드가 아니라 변수를 찾게 됩니다

 


저희가 지금껏 연습해보던


System.out.println() 구문도 괄호가 들어가죠?


그 구문도 사실은 메소드가 쓰인 거예요

 

 

  꿀팁🍯 Jshell- 작성요령

Jshell로 작성 시
쉽게 메소드를 수정하는 방법을 알려드립니다

  • /list [method_name]
  • /methods [number | method_name]
  • /edit [method_name]
  • /drop [number | name]
  • /save [name of file.txt]
  • /?

 

/를 입력하고 list나 methods는 내가 기록한 변수, 메소드를 볼 수 있는 명령어입니다


/edit은 만들어 놓은 메소드들을 수정할 때 사용해요

자바
/edit 명령어는 새로운 수정 패드가 생기고 메소드들을 볼 수도 있죠



/drop은 메소드들을 삭제할 때 이름이나 넘버를 입력해주면 됩니다


지금까지 코드를 작성하고 명령 프롬프트를 꺼버리면


작성한 코드를 볼 수 없었는데요


/save를 사용하면 입력하면 작동하고 있는 디렉터리에 저장이 됩니다
예) /save backup.txt


터미널에서 jshell를 입력하기 전에


ls / cd 명령어로 작업물 저장하는 디렉터리로 이동해보세요

 

다양한 명령어도 있지만 지금은 간단한 ls / cd 명령어로만 해요

 

 

인자 (𝑨𝒓𝒈𝒖𝒎𝒆𝒏𝒕) | 매개변수 (𝑷𝒂𝒓𝒂𝒎𝒆𝒕𝒆𝒓)



단순 메소드작성 뿐 아니라


숫자만 입력하면


결과 값을 줄 수 있는 방법은 없을까요?

 

매개변수와 인자는 이런 역할을 해주어요



Return Type Name Of The Metod (Type Parameter) {

Body of the method;

}

· Type Parameter

매개변수(Parameter)에는


타입 유형(Type)과 입력값(Input)이 들어가요


실제로 들어가는 값을 인자(argument)라고 하고요


인자의 유형과 매개 변수 타입과 맞아야 오류가 나지 않겠죠?


sayHelloWorld 메소드에


보내고 싶은 게 1,2,3 같은 숫자라면


인자 타입은 [int]로 해주어야겠죠


실습해보겠습니다

void sayHelloWorld(int number){
}



sayHelloWorld메소드를 만들었으니 호출해볼게요


결과값

매개변수 타입을 정해주지 않으면 오류가 일어남



어랏..? 이러면 안 되는데..?
왜 오류가 났을까요?


매개변수를 적지 않아 주었기 때문입니다


매개변수 (괄호) 안에 '1'를 적어 봅시다 무슨 일이 일어납니까?


아무 일도 일어나지 않아요(씨익)


몸통에 코드를 안 넣었으니까요!


퀴즈를 좀 풀어볼까요?

퀴즈2

[02] 내가 적은 숫자만큼, hello world문이 출력 되고 싶다면 무엇을 써야하나요?


[정답]: 반복문이에요 저는 반복문에 대한 포스팅을 메소드를 살피기 이전에 작성했습니다
반복문을 토대로 메소드의 인자 값만큼 출력하게 할 수 있어요

 

void sayHelloWorld(int number){
    for(int i = 1; i <= number; i++){ //i를 매개변수까지 맞춰주기
    System.out.println("Hello World!");
    }
}


결과값

hello world 세번 출력



연습문제를 같이 풀어보세요

퀴즈 3

[03]
01) 1부터 시작하여 내가 적은 입력값만큼 숫자를 1씩 추가하면서 출력하는 메소드를 만들어보세요

02) 1부터 시작해서 내가 적은 입력값 만큼 1씩 추가하면서 제곱 수를 출력하는 메소드를 만들어보세요

 

[정답]

 

[퀴즈 3번]의 1번과 2번 답
[퀴즈 3번]의 1번과 2번 답

 

  꿀팁🍯 메소드 - 인자

매개변수에 아무것도 전달하지 않고 빈 괄호만 보낸다면 무슨 일이 벌어질까요?

매개변수를 입력하지 않았을때 오류


'no arguments'라는 오류는 인자를 입력하지 않았단 뜻이에요


인자에 문자열을 넣으면 이런 문구가 떠요

양립할수 없습니다 문구


'양립할 수 없는 유형입니다'

타입을 다르게 적어주었을 때 오류화면


소수를 적어도 마찬가지네요

※ 매개변수에는 타입을 적어주죠 이것에 맞게 인자 값을 넣어주어야 한다는 사실 잊지 마세요

인자값은 타입에 맞게 넣어야 작동

 

메소드로 구구단 만들어보자


for문으로 구구단 설정했던 방법을 기억해보세요
2022.07.11 - [JAVA 완전정복!!/Jshell] - 【JShell】구구단표 출력을 위한 반복문 for

for (i=1; i<=10; i++){
System.out.printf("%d * %d = %d", 5, i, 5 * i).println();
}

 

위 코드를 이용해서 구구단 메소드를 만들어봐요

퀴즈 4

[04] [printMultiplicationTable] 이름의 메소드를 만들어서
내가 적은 인자 값의 구구단을 출력해보세요


[정답]

 

 void printMultiplicationTable(int number){
 
     for(int i = 1; i<10; i++){
     
     System.out.printf("%d * %d = %d",number, i, number * i ).println();
     
 }

결과값
아래 내용을 참고해서 지금까지 배운 내용으로 앞으로 다른 누군가에게 구구단 테이블을 설명해보세요!

구구단 메소드 만들기 성공

 

오버로딩을 통해 구구단 메소드를 더 편하게 써보자

 

오버로딩

 

 

  • 오버로딩이란? 이름은 같은 메소드지만, 매개변수가 다른 메소드를 의미합니다
  • 변수명이 달라도 매개변수의 타입과 개수가 동일한 메소드는 또 정의하지 못합니다


메소드 단원을 끝내기 전에 배워야 할 중요한 개념 중 하나는 다중 매개 변수와 반환 값입니다


아주 비슷한 일이지만 두 메소드에게 똑같은 이름을 주는 거죠


둘의 다른 점은 매개 변수밖에는 없어요


지금까지는 매개 변수를 전달할 때 한 개만 쓰거나 안 썼습니다


이번에는 2개 이상의 다중 매개 변수를 전달하는 메소드를 오버로딩하는 연습을 해보겠습니다


간단히 두 숫자를 넘겨서 합을 구하는 메소드를 만들어볼게요

void sum(int firstNumber, int secondNumber){

    System.out.println(firstNumber + int secondNumber);

}



이 상황에서 sum메소드를 (2,3)이나 (6,7) 같이 인자 값을 주면 메소드가 돌아가는 것을 확인해볼 수 있어요


이제 괄호 안에 매개변수를 세 가지를 주려면 어떻게 해야 할까요?


다중 매개변수를 주기 위해서, 오버로딩해야겠죠?

void sum(int firstNumber, int secondNumber, int thirdNumber){

    System.out.println(firstNumber + secondNumber + thirdNumber);

}

이렇게 만들어주면 앞으로 sum메소드에서는 2가지 매개변수와, 3가지 매개변수를 넣어줄 수 있습니다


메소드를 만드는 건 정말 재밌습니다


메소드가 프로그래밍에서 정말 중요하기에, 메소드 구문에 익숙해지고 메소드 방식으로 생각하는 연습을 해야 합니다


/list sum을 해보면 매개 변수를 두 개 쓰고 하나는 3개 쓰는 메소드를 찾아볼 수 있습니다

sum메소드 오버로딩

 

반환 값 주기 - 𝑹𝒆𝒕𝒖𝒓𝒏


Return Type Name Of The Metod (Type Parameter) {

Body of the method;

Return Value;
}

· Return Value;
· Return Type

메소드의 기본 구성에 반환 값을 줄 수 있어요


지금까지 Return Type 부분에 void를 준 것은 반환 값이 없었기 때문인데요


반환 값에 메소드안에 변수명을 작성하면 메소드가 끝나고 해당 값을 반환해주어요 이 해당 값의 유형을 타입에 적어주어야 하죠


Math.max (4,5)를 실행하면 5의 값은 반환되어 변수가 되고


$31은 변수가 되어 5라는 값을 변수에 저장할 수 있습니다

Math.max(4,5)

$31 ==> 5

$31
$31 ==> 5


제가 변수 int max를 만들어 Math.max(4,5) 메소드에 대입하면 변수 max에는 5라는 값이 저장돼요

sum메소드가 오류난 이유


그런데 sum메소드에 똑같이 int sum = sum (4,5)를 적으면 에러가 나는 걸 확인해 볼 수 있어요 왜 그럴까요?

그 이유는 첫 번째,



이 sum메소드에는 return값이 없기 때문입니다


그러면 반환하는 값은 어떻게 줄 수 있을까요?


sum메소드는 처음 작성 시 void로 지정하였는데요 이것은 리턴 값이 없다는 걸 의미한다고 했죠?

sum메소드 수정

이렇게 바꾸어주었을 때 이 뜻은 sum 메소드가 int의 값을 반환하겠다는 겁니다


그런데 또 오류가 났어요

여기서 두 번째,



지금까지의 sum메소드의 역할은 2가지나 3가지의 변수의 합을 출력하는 역할만 했기 때문이에요


‘숫자의 합을 반환’ 하기 위해서는 아래와 같이 코드를 수정해주어야 해요

수정한 sum메소드


하지만 아직도 여전히 오류가 났어요

그 이유는 세 번째,



이미 sum이라는 메소드가 있는데 변수 int sum를 만들어서 sum(4,5)이라는 메소드에 값을 주려고 했기 때문이에요

sumOfTwoNumber 메소드
sumOfTwoNumber 메소드

임의로 새로운 sumOfTwoNumber 메소드를 만들었어요


여기에는 매개변수 두 값을 넣어 변수 sum에 값을 합쳐주고 리턴 값을 주었습니다


이제 변수 sum에는 sumOfTwoNumber메소드에 인자 값을 넣어서 값을 변환 시켜줄 수 있게 되었습니다

  꿀팁🍯 메소드 - 리턴
  • 메소드 리턴 값 뒤에 있는 값이 반환 값(실행 값)이 된다
  • 리턴은 메소드를 끝낼 때에도 사용된다
  • 리턴 값에 따라 메소드에 데이터 형식을 정해주어야 한다



메소드의 반환 값에 대한 문제들을 풀어보겠습니다

퀴즈5

[05]
1번) 세 가지의 매개변수의 합을
반환하는 메소드를 만들어 보세요


2번) 삼각형의 두 각의 값이 주어 졌을 때
나머지 하나의 각을 리턴해주는 메소드를 만들어보세요

※2번의 힌트 Input - angle1, angle2
Output - (angle1 + angle2) - 180


[정답]:
1번 답

5-1답

 


2번 답

5-2답



좀 더 생각해보면 좋아요

[whatIsTirdNumber] 변수를 객관적인 표현으로 [calculateThirdAngle]로 바꿔주는 건 어떨까요?

좋은 메소드를 쓰기 위해서는 좋은 이름, 좋은 입력, 좋은 출력이 필요합니다


이건 나중에 배울 클래스에도 마찬가지이죠


굉장히 중요한 부분이에요 우리가 만들었던 메소드 중에서 좋은 이름만 가지더라도


뭘 하려는지를 정확히 알 수 있게 하는 노력이 필요합니다


굳이 메소드의 논리는 확인하지 않아도 되게 끔요


좋은 이름은 1년이 지났을 때나 혹은 다른 사람이 만든 코드들을 가독성 있게 만들어 주어요


코드 재사용할 수 있게 만들죠


이런 경우에 메소드의 본문 내용만 바꾸면 사용하는 모든 곳에서 바뀌기 때문에 유지보수에 도움을 줘요

int대신 short 타입으로 지정된 범위에 맞게 설정해주어도 좋았을 거 같습니다


자바 환경에서 실행되기 위해서 지정된 범위에 맞게 설정해준다면 목적에 맞게 더 좋은 활용이 될 수 있습니다


메소드에 대해 배운건 어떠신가요?


메소드는 굉장히 중요하므로 자세히 이해해 두셔야 합니다


앞으로의 모든 자바 내용은 메소드를 가지고 기술되기 때문입니다


메소드의 구성


반환 형태 메소드 이름 (인자){

매개변수를 받아하고 싶은 일들

리턴 반환 값;
}

메소드 정의는 실행과 다릅니다


메소드를 만들었다고 실행되는게 아닙니다


메소드를 정의하면 ‘정의’만 확립되는 거지 뭘 하는지 어떻게 부르는지, 다른 매개변수 값은 무엇인지, 반환값은 무엇인지 등등


실제로 메소드를 실행하고 싶다면 불러야 합니다


이걸 콜(call)이라고 하죠


주의해야 할 건 메소드에는 여러 가지의 매개변수가 들어갈 수 있고,


없을 수도 있지만 출력은 단 하나의 값만 반환할 수 있는 점입니다

728x90