메모장

함수 (메서드) 본문

JAVA/개념정리

함수 (메서드)

Itchild 2024. 4. 6. 14:15
728x90
반응형

 

[함수]

 

<메서드 시그니처 >

함수 3요소 (모두 가져야 함수로 인정)

1) input,인자, 입력값, 파라미터, args, 매개변수,인수

2) output, 반환,return, 결과값

3) 기능

 

함수 A) input x output x 입력, 반환값 둘다 없을때

 

// 함수 A유형

public static void hello() {// 함수명은 "기능"을 유추할수 있게 만들어야 한다!

System.out.println("안녕하세요 ! ");

}

// "함수를 정의(선언) 했다."

 

 

 

함수 B) input o output x 입력값만 있을때

 

// 함수 B유형

public static void printStar(int num) {// 정수 넘버를 받으면 별을 찍어준다.

for (int i = 0; i < num; i++) {

System.out.println("★");

}

}

 

함수 C) input x output o 반환값만 있을때

 

// 함수 유형 C

 

System.out.println("funcC() 동작!");

 

return "apple"; // 함수 즉시 종료됨!!!!!

///// System.out.println("funcC()의 마지막 코드");

}

 

 

함수 D) input o output o 입력값, 반환값 둘다 있을때

<절대값 반환>

public static int abs(int num) {

if(num < 0) {

num *= (-1);

}

return num;

}

 

반복문 vs 함수

반복문 -> 공백없이(외부의 다른 수행없이) 여러번

-> 외부 다른 수행중에 또 특정 기능을 수행하고 싶을때

둘의 공통점 : 어쨌든 "코드를 재사용 할 수 있게 해줌"

:오류의 파급효과 절감

:개발시간 , 비용 단축

: 이익 증가

: 유지보수 용이

 

★ run 버튼을 누르면, main()함수가 실행 !

class

 

1. 함수끼리는 메모리 공간을 공유하지 x

2. 전위 증감연산자 >> 함수호출 >> 후위증감연산자

3. 함수를 호출할때에는 "값(value)" 을 전달함

"변수,주소" 를 전달 xxxx

" call by value" (값에 의한 호출)

 

예시문제로 설명 !

 

public static void func(int a) {

a=100;

System.out.println("func()입니다. a= "+a);

}

 

public static void main(String[] args) {

 

int a=10;

System.out.println("a= "+a);

func(a);

System.out.println("a= "+a);

func(++a);

System.out.println("a= "+a);

}

출력해봤을때 콘솔 창에는 어떻게 나올까요 ??

 
사진 삭제

사진 설명을 입력하세요.

 

func() 함수는 제 기능이 다 끝나면 사라진다.

println() 을 출력해주고 기능이 끝나면 사라진다.

마지막은 전위형 증감식이 들어가서 main에 있는 a가 1 올라간다.

따라서 마지막 a = 11 이 나온다.

[연습문제]

학생들의 점수에 따라 등급을 나누어 주기 !

출처 입력

1. 점수를 알려주면 input

public static void printGrade(int score){

 

}

 

 

2. " ㅁㅁ점은 ㅁ 등급입니다" 라고 출력

3. 80~100 A

60~79 B (기능)

0~59 C

 

 

public static void printGrade(int score){

if(){

syso(ㅁㅁ"점은"ㅁㅁ "등급입니다"

 

}

 

4. printGrade() 라는 함수를 선언(정의) 해주세요

함수

 

5. 반환해줘야 하는 자료형에 따라 반환 하기


<정답>

public static void printGrade(int score) {

if(score<0 || 100<score) { // 유효성 검사도 진행 !

System.out.println("점수가 유효하지않습니다! 확인이 필요합니다!");

return; // 함수를 즉시종료하겠습니다. // 여기서 멈춤

}

 

char grade='C'; // 나머지 점수의 등급을 기본값을 C로 맞춤

 

if(80<=score) { // 점수가 80이상이면

grade='A'; // 등급이 A이다

}

else if(60<=score) {// 점수가 60이상이면

grade='B'; // 등급이 B이다

}

 

System.out.println(score+"점은 "+grade+"등급입니다.");}

// ㅁㅁ 점은 ㅁㅁ 등급이다 !

 

연습문제2) a유형

1. test1()라는 함수가 있음

2. 랜덤정수를 생성해내고(범위 10~20)

3. 1부터 랜덤수까지의 총합을 출력하는 기능을 가졌습니다.


// 함수명 :test1()

// input : 정수

// 기능 : 랜덤정수 생성 , 1부터 랜덤수까지의 총합을 출력


public static void test1() { // "메서드 시그니처"

Random rand = new Random();

int num = (rand.nextInt(10)+1) + 10;

 

int result = 0;

for (int i = 0; i < num; i++) {

result += i;

}

 

System.out.println("총합은: " + result);}

 

연습문제3) d유형

1. test2()라는 함수가 있음

2. 정수를 입력받으면

3. 1부터 정수까지중에서 짝수가 몇개인지를 반환해주는 기능을 가졌습니다.

 


// 함수명 :test2()

// input : 정수

// 기능 : 1부터 정수까지중에서 짝수가 몇개인지를 반환

// output : 정수 라서 int

// 반환 ! 이라는 표현이 들어갔으므로 return 도 써줘야 한다.


public static int test2(int num) {

int count = 0;

for (int i = 0; i < num; i++) {

if(num % 2 == 0) {

count++; }

}

return count;

}

 

 

연습문제4) d유형

1. test3()이라는 함수가 있음

2. 정수를 입력받으면

3. 입력받은 정수가 10보다 크면 "apple",

10이하면 "banana"를 반환하는 기능을 가졌습니다.


// 함수명 :test3()

// input : 정수

// 기능 : 입력받은 정수가 10보다 크면 "apple",

10이하면 "banana"를 반환

// output : 반환되는 값이 문자열 이므로 문자열 !

// 반환! 이라고 써있었으므로 return 값도 있어야함


public static String test3(int num) {

String msg = "banana";

if(num >10) {

msg = "apple";}

return msg;

}

 

input 은 여러개 가능하다 !

그러나 output은 없거나 하나 이다 !


// [ 오버로딩 ]

// : 기능이 같은 함수

// : 메서드 시그니처가 다른경우에는

// -> 인자의 개수, 자료형이 다른경우에는

// : 함수명 중복정의를 허용

 

public static int plus(int a,int b) {

return a+b;

}

public static int plus(int a,int b,int c) {

return a+b+c;

}

public static double plus(double a,double b) {

return a+b;

}

public static double plus(double a,double b,double c) {

return a+b+c;

}

public static void main(String[] args) {

 

int res=plus(1,2);

double res2=plus(3.1,2.3);

 

 

// 오버로딩의 대표예시

System.out.println(100); // 정수의 값을 출력 할수도 있고

System.out.println("apple"); // 문자열 값을 출력할수도 있다.

 

// System.out.print();

// 오버로딩이 되어있지않다!

// 함수정의가 안되어있다!

System.out.println();

 

 

 

728x90
반응형

'JAVA > 개념정리' 카테고리의 다른 글

Scanner  (0) 2024.04.06
반복문 (for문)  (0) 2024.04.06
반복문 (while문)  (0) 2024.04.06
배열  (0) 2024.04.06
변수 , 연산자  (0) 2024.04.06