Java

[Java] 17. 함수와 메서드

Song hyun 2024. 4. 15. 16:30
728x90
반응형

[Java] 17. 함수와 메서드

 

1. 함수(fuction)란?
-프로그래밍에서 특정 작업을 수행하는 코드의 집합입니다.
어떠한 값을 주면, 특정 연산을 처리한 뒤 결과를 도출한다. (Input을 넣으면 Output을 리턴하는 것.)
-함수는 코드의 재사용성을 높이고, 프로그램의 구조를 체계적으로 관리할 수 있게 해준다.

-함수=하나의 기능을 수행하는 일련의 코드 묶음.
-구현된 함수는 호출해서 사용하고, 호출된 함수는 기능이 끝나면 실행의 제어가 반환된다.
-함수로 구현된 기능은 여러 곳에서 동일한 방식으로 호출되어 사용할 수 있다. (재사용)

 

 


2. How, Why?
-함수는 이름, 파라메터(매개 변수), 반환 값, 함수 몸체(body)로 구성된다.
-함수의 형태: 자료형(리턴값) 함수 이름(매개 변수=파라메터){함수 몸체=바디}


3. 함수 사용하기
-함수의 사용은 모양 맞추기 이다. 똑같은 모양(자료형, 매개 변수의 갯수 등...)을 맞춘다. 
-리턴 타입이 있다면, 결과 값을 받아서 사용할 수 있다.
-함수는 함수의 이름을 호출해서 사용할 수 있다. 
-함수는 여러번 호출해, 재사용이 가능하다.

 

 

 

 

 

 

 

4. 함수 호출과 JVM 스택 메모리
(1) 스택: 함수가 호출될 때, 지역 변수들이 사용하는 메모리이다.
스택은 함수의 수행이 끝나면, 자동으로 반환된다. (stack 내부에 저장되어있던 데이터가 사라진다.)
(2) 멤버 변수: 클래스 내부에 존재하는 변수 (함수 내부x).
(3) 지역 변수: 함수 내부에 위치하는 변수.

함수가 아닌 클래스 내의 변수는 멤버 변수라고 한다. 멤버 변수는 클래스와 관련이 높다.

 

값 자체를 전달하는 방식(Pass by value)

값의 주소를 전달하는 방식(Pass by reference)

 

 

 

 

 

 

5. 함수와 메서드, 무엇이 다를까?

-> 메소드와 함수의 차이점: 객체와의 관련성
-static-public

-함수는 일련의 코드의 묶음을 말한다.
-메서드는 객체의 기능을 구현하기 위해 클래스 내부에 구현되는 함수를 말한다.
멤버 변수(member function)이라고도 한다.  메서드는 멤버 변수를 활용해, 그 객체에 맞는 기능을 구현한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

연습 문제 1.

인사말 출력하기

  • 함수 이름: greet
  • 입력: 이름(String)
  • 출력: 없음 (콘솔에 직접 출력)
  • 설명: 사용자의 이름을 입력받아 "안녕하세요, [이름]님!"이라고 콘솔에 출력하는 함수입니다.

제곱 계산하기

  • 함수 이름: square
  • 입력: 정수(int)
  • 출력: 입력된 수의 제곱(int)
  • 설명: 하나의 정수를 입력받아 그 수의 제곱을 반환하는 함수입니다.

나이 확인

  • 함수 이름: checkAdult
  • 입력: 나이(int)
  • 출력: 성인 여부(Boolean)
  • 설명: 입력받은 나이가 18세 이상인지 확인하여 성인이면 true, 아니면 **false**를 반환합니다.

수의 부호 판별

  • 함수 이름: signOfNumber
  • 입력: 정수(int)
  • 출력: 문자열(String) - "positive", "negative", "zero"
  • 설명: 입력받은 정수의 부호에 따라 "positive", "negative", "zero" 중 하나를 반환합니다.

최대값 찾기 함수

  • 함수 이름: findMax
  • 입력: 정수 배열
  • 출력: 입력 받은 값 중 가장 큰 수
  • 설명: 입력받은 두 수중에서 가장 큰 값을 반환하는 함수를 작성하세요.

 

풀이 과정:

1. 인삿말 출력하기

-String(문자열) 변수 name을 입력받는 함수 Square를 만든다.

-name을 스크립트 속에 넣어 바로 출력한다.

-반환하지 않아도 되는 함수이므로 void를 반환한다. (값 반환x)

*Scanner 클래스를 사용해 풀어보자.

 

2. 제곱 계산하기

-int(정수형) 변수 a를 입력받는 함수 square를 만든다.

-변수 a*a를 정수형 변수 times에 할당한다.

-변수 times를 반환한다.

 

3. 나이 확인하기

-int(정수)형 변수 age를 입력받는 논리형 함수 checkAdult를 만든다.

-논리형 변수 checkAge를 선언한다.

-if문을 통해, 변수 age에 따라 ageCheck에 true/false로 초기화한다.

-return ageCheck를 통해 값을 반환한다.

 

4. 수의 부호 판별

-int(정수)형 변수 aNum, bNum을 입력받는 정수형 함수 findMax를 만든다.

-정수형 변수 maxNum을 선언한다.

-if-else문을 통해 (aNum>bNum)의 결과에 따라 aNum,bNum 중 하나를 maxNum에 대입한다.

(둘 중 큰 수가 maxNum에 할당된다.)

-return maxNum을 통해 큰 수를 반환한다.

*Max.max 클래스를 통해 둘 중 큰 수를 간편하게 반환할 수 있다.

package basic.ch06;

public class Function2 {
	public static void main(String[] args) {

		// 1. 인삿말 출력하기 - 테스트
		greet("홍길동");

		// 2. 제곱 계산하기 - 테스트
		int squareTest = square(11);
		System.out.println(squareTest);

		// 3. 나이 확인하기 - 테스트
		System.out.println(checkAdult(16));

		// 4. 수의 부호 판별 - 테스트
		System.out.println(signOfNumber(-11));

		// 5. 최대값 찾기 함수 - 테스트
		int testFindMax = findMax(21, 17);
		System.out.println(testFindMax);

	}// end of main

	// 1. 인삿말 출력하기
	static String greet(String name) {
		System.out.println("안녕하세요," + name + "님!");
		return name;
	}

	// 2. 제곱 계산하기
	static int square(int a) {
		int times = (a * a);
		return times;
	}

	// 3. 나이 확인하기
	static boolean checkAdult(int age) {
		boolean checkAge;
		if (age >= 18) {
			 checkAge = true;
		} else {
			 checkAge = false;
		}
		
		return checkAge;
	}

	// 4. 수의 부호 판별
	static String signOfNumber(int number) {
		String answer;
		if (number > 0) {
			answer = "Positive";
		} else if (number == 0) {
			answer = "Zero";
		} else {
			answer = "Negative";
		}
		return answer;
	}

	// 5. 최대값 찾기 함수
	static int findMax(int aNum, int bNum) {
		int maxNum;
		if (aNum > bNum) {
			maxNum = aNum;
		} else {
			maxNum = bNum;
		}
		maxNum=Math.max(aNum, bNum);
		return maxNum;
	}

}// end of class
728x90
반응형