JAVA기초

함수(function)

LRWoo 2023. 5. 24. 21:50
728x90
반응형

2023.05.24 - [JAVA기초] - 자바의 배열(Array)과 인덱스,forEach문

 

자바의 배열(Array)과 인덱스,forEach문

2023.05.23 - [JAVA기초] - for문 for문 2023.05.19 - [JAVA기초] - 제어문과 분기문(control statement) 제어문과 분기문(control statement) 2023.05.18 - [JAVA기초] - 이스케이프 시퀀스, 자바의 입력객체, scanner, buffer 이스

ji7290.tistory.com

 

이전 글에서는 배열에 대해 학습하고 몇가지 퀴즈를 풀면서 다뤄보았다.

 

이번 글에서는 함수에 대해서 배워보자 .

 

 

자주 사용되는 코드를 묶어서 필요할때 마다 실행할 수 있는 형태로 지정한 형식
일정한 입력 값에 따라서 코드를 실행하고, 그 결과를 외부로 반환할 수 있는 코드의 묶음
ex) 일정 업무를 위해서 OJT(신입사원교육)를 미리 해두는 것.  신입이 필요할때 부르기 위해서  
= 함수의 호출 -> 신입이 일을 다하면 출력물을 상사의 자리에 제출 ( 함수의 반환 )
매개변수: 외부에서 넘어오는 값을 매개체로 받아들인다. (usb로 제출하세요)

 

 

add함수의 괄호안의 (int n1, n2를 매개변수라고한다.)

코드를 진행하고 결과값을 반환한다.  반환값은 함수의 호출자리로 되돌아가게 된다. 

 

물론 이렇게 함수자체를 쓸 수 도있다.

y=f(x)
x가 입력값. y가 반환 값 
예를들어서.
"걷는다" 를 "양팔과 양발을 동시에 번갈아  움직여서 앞으로 나아간다" 라고 하지않는다. 
"먹는다" 를 "입을 벌려서 씹어서 소화시키고싶은 음식을 입에집어넣어서 치아로 끊어서 뇌에 신호를 주고 
침샘을 분비해서 잘게부순뒤 식도로 넘긴다."   라고 하지않는다.  
즉, 함수는 복잡한 단계로 일어나는 동작을 하나의 개념으로 묶어서 표현할 수있게한다.

 

간단한 예제 (함수의 중요성 )
절대값이 최대인 값을 찾아내서 절대값으로 구성된 새로운 배열을 생성하고 
그 index를 저장한 후 그  index를 이용하여출력해보자.

main함수 내부에서의 코드작성
결과값

 

 

함수를 이용하여 계산한 값

main바깥에서 함수생성 후 매개변수로 배열을 할당한뒤 코드를 작성

 

main바깥에서 getMaxAbsIndex함수를 만들고 매개변수로 배열을 할당시켜준다. 

코드는 main에서 작성한 코드를 그대로 가져오고 return 으로 반환시켜줬다. 

 

main에서 반환된 함수를 호출하기만 하면  매번코드를 새로 작성할 필요없이 

필요할때 바로 꺼내서 쓸 수있게되고, 코드를 수정할때에도 함수 내부에 작성된 코드만 수정시켜주면 되기에 

유지보수가 간편해지며 메모리가 절약되고 , 소모되는 시간을 줄일 수있다. 

main함수 내부에서의 함수의 호출
함수의 반환값을 받아서 main내부에서 출력한 결과값

 

 

함수의 재사용

 


main함수가 static 속성이므로, main에서 바로 호출하려면 main바깥의 함수도 static이여야 한다. 

 

간단한 예제
절대값을 반환하는 함수를 생성후 반환해서 출력

절대값을 반환하는 함수 생성 후 main에서의 호출

 

Quiz1
정수로 반지름을 전달받아서, 원의 넓이를 계산하여 반환하는 함수를 작성하세요

main함수 내에서 자료형을 double로 선언 해줬으니 함수도 실수형인 double로 생성해준다. 

Quiz2
두 정수를 전달하여, 큰 값을 반환하는 함수를 작성하세요 

main바깥에서 함수의 생성
main에서의 호출
결과값

Quiz3.
세 정수를 전달받아서 최소값을 반환하는 함수 

main바깥에서의 함수생성
main내부에서 호출

 

Quiz4
길이가 3인 배열을 전달받아서 최소값을 반환하는 함수 

main바깥
함수의 호출

 

메서드 오버로딩
하나의 함수이름으로, 여러개의 함수정의를 별도로 만들 수 있다.

getMinValue는 함수이름은 같지만 매개변수의 갯수, 자료형, 순서에 따라서 여러개의 함수를 생성할 수 있다.

 

 

Quiz
3대의 엘리베이터가 있다. 사용자에게 층수를 입력받아서
가장 가까운 엘리베이터를  움직이도록 하세요 
ex) 'A' 엘리베이터가 움직입니다 라고 출력해야 합니다.

main에서 미리 random으로 3개의 정수를 뽑아서 배열로 지정해놓고 

반복문으로 0부터 15까지 arr배열에 요소를 추가시킨다. 

 

main바깥에서 함수를 생성하고 코드 작성

'A'문자를 리턴 해줘야 하기에 함수의 자료형을 char로 선언해준다. 

랜덤으로 출력된 층수 3개의 배열과  층수 입력을 매개변수로 받아준다.

return할 변수 ele, a,b,c에 맞는 인덱스, 최소값을 14 (랜덤으로 뽑아준 정수가 15까지이기때문) 로 선언한다. 

 

for루프로 배열을 선회하면서  diff= 배열 -입력한 층수 

만약 diff가 0보다 작으면 -diff 

min(14)이  diff보다 크면  diff를 할당시키고 index 변수에 i를 집어넣는다. 

 

ele는 'A'이다 아스키코드로 변환하면 'A'가 정수 몇인지는 모르겠으나 

1씩더하면 그에따라 문자도 알파벳순으로  'B'  -> 'C' 올라갈 것이다. 

 

ele변수에 index를 더해서 대입해주고 ele를 리턴시킨다. 

 

main에서의 함수 호출

층수를 입력하면 각각의 배열의 index 에 할당된 문자가 출력된다.  

5-4 =1 이니까 가장가까운 엘리베이터는 0, 1, 2 중 1번 =  'B'가 출력된다. 

 


프로젝트를 우클릭해서  탐색기를 열어준다. 

 

경로에 cmd를 입력해서 cmd창을 열어준다.

 

java function.Ex06을 클릭하면 출력결과가 뜬다.

java function.Ex06 Hello java를 입력하면 

args의 인덱스에 차례대로 Hello, java가 들어간다.

 

 

main함수의 매개변수에  왜 String 배열 args가 항상들어가야 될까?

 

 Java 프로그램이 다양한 환경에서 유연하게 동작할 수 있도록 도와준다.  예를 들어, 프로그램을 실행할 때 전달되는 인수에 따라 프로그램의 동작을 다르게 설정하거나, 입력 파일의 경로, 디버깅 모드 등의 설정을 전달할 수 있다. 

즉, 키보드로 입력받는 다양한 인수들을 받을 수 있게 지정해놓은 자바의 main함수다. 

 

 

 

가변인자: 인자를 전달하는데 인자의 갯수가 일정하지 않거나, 변할 수 있다.

자바에서 가변인자를처리하기 위해서는 맨마지막에 적어줘야 하고. 자체에서 내부적으로 배열을 쓴다. 

 

보통은 일정한 값을 전달하지만 때로는 일정하지 않은 값을 넣을때도 있다.

그리고 거기에 배열이 아주 깊게 관여하고있다.

자바가 내부적으로 배열을 가지고 있고 배열마다 길이를 전부가지고있는 증거 

=>print문으로  args.의 배열을 출력시 자체길이가 출력된다는 것.

 

지금까지 함수의 정의, 상황에 따른 함수의 필요성 , 함수의 편의성 , 몇가지 퀴즈로 코드를 작성해보고. 

자바의 자체 main함수에 대해서도 간략히 알아보았다. 

 

728x90
반응형