h-i-s-t-o-r-y

[Java] 함수(function) / 오버로딩(overloading) 본문

Java

[Java] 함수(function) / 오버로딩(overloading)

H' 2021. 7. 13. 10:44

> 자바에서의 함수(function) ?

반복적인 명령어들을 별도로 묶어서 선언하고, 필요할 때마다 호출해서 사용하는 것

자바 클래스 안에 선언된 함수들을 [멤버 함수] 또는 [메서드] 라고 부른다.

 

> 함수 선언 형식

[접근지정자] [기타제어자] 리턴자료형 함수명([매개변수...]){
        [return문;]
}

> 함수를 선언하고 호출하려면 3가지를 알고 있어야 한다.

1) 기능 - 함수가 어떤 일을 하는가?

2) 매개변수 - 일을 처리하기 위해 어떤 변수를 매개로 받는가?

3) 리턴값(리턴자료형) - 일을 끝내고 어떤 타입의 값을 반환하는가?

> 함수의 선언 위치 ?

함수는 클래스 안에 선언되어야 하고, 또 함수 안에서 선언될 수 없다.

클래스의 main()도 함수이기 때문에 main()함수 안에 함수를 선언하지 않도록 주의하자.

 


> 구분선을 출력하는 함수

package days06;

public class Ex02 {

	public static void main(String[] args) {
    
		//구분선
		drawLine();		// [함수 호출]
		System.out.println("부서명 : 사원명");
		//구분선
		drawLine();		// [함수 호출]
		System.out.println("생산부 : 홍길동");
		System.out.println("총무부 : 김길동");
		System.out.println("영업부 : 이길동");
		System.out.println("생산부 : 박길동");
		//구분선
		drawLine();		// [함수 호출]

	} //main

	// main과 class 사이 [함수 선언]
	public static void drawLine() {
		System.out.println("*************");
	}

} //class

 


> 오버로딩(overloading)

함수명과 매개변수가 모두 같은 함수는 다시 선언할 수 없지만

함수명은 같고, 매개변수의 갯수 또는 타입이 다른 함수는 중복선언 할 수 있다.

중복함수 == 오버로딩(overloading) == 오버로드(overload) == 중복 선언된 함수

(주의) 리턴자료형만 다른것은 중복함수가 아니다. 선언 XXX

 


> 구분선을 출력하는 함수를 오버로딩한 예제

package days06;

public class Ex02 {

	public static void main(String[] args) {

		//구분선()
		drawLine();
		System.out.println("부서명 : 사원명");
		//구분선(int)
		drawLine(30);
		System.out.println("생산부 : 홍길동");
		System.out.println("총무부 : 김길동");
		System.out.println("영업부 : 이길동");
		System.out.println("생산부 : 박길동");
		//구분선(int,char)
		drawLine(20, '#');

	} //main
	
	// 정해진 구분선을 출력하는 함수
	// 매개변수 : 없음
	public static void drawLine() {
		System.out.println("*************");
	}
	
	// 원하는 길이만큼 구분선을 출력하는 함수
	// 매개변수 : int변수 1개
	public static void drawLine(int n) {
		for (int i = 0; i < n; i++) {
			System.out.print("-");
		}
		System.out.println("");
	}
	
	// 원하는 길이와 스타일로 출력하는 함수
	// 매개변수 : int변수 1개, char변수 1개
	public static void drawLine(int n, char style) {
		for (int i = 0; i < n; i++) {
			System.out.print(style);
		}
		System.out.println("");
	}

} //class

> 두 정수의 합을 구해서 반환하는 함수(메서드)

1) 기능 : 두 정수의 합을 계산한다

2) 매개변수 : 두 정수 int a, int b

3) 리턴값(리턴자료형) : int 자료형의 합 결과값

package days06;

import java.util.Scanner;

public class Ex03 {

	public static void main(String[] args) {
		
		int a =10, b =20;
		int result = hap(a,b);
		
		System.out.printf("%d+%d=%d\n",a,b,result);

	} //main
	
	// 함수 선언
	private static int hap(int a, int b) {
		return a+b;
	}

} //class

> 년도를 입력받아 윤년 / 평년 출력하기

package days09;

import java.util.Scanner;

public class Ex03_02 {

	public static void main(String[] args) {
		// 4자리 년도를 입력받아서 "윤년" / "평년"을 출력
		// "윤년" 이란 ?
		int year;		//2010 년도는 보통 int로 선언
		// String year;		//"2010" 
		
		Scanner scanner = new Scanner(System.in);
		System.out.print("> 년도 입력 ? ");
		year = scanner.nextInt();
		
		if (  isLeapYear(year)  ) {
			System.out.println("윤년 (leap year)");
		} else {
			System.out.println("평년 (common year)");
		}
		
		
	}//main

	public static boolean  isLeapYear(int year) {
		if( year%4==0  &&  year%100!=0  ||  year%400==0 ) return true;
		return false;
	}

}//class

'Java' 카테고리의 다른 글

[Java] switch() 예제  (0) 2021.07.16
[Java] 정규표현식 - String.matches(regex) / pattern, matcher  (0) 2021.07.13
[Java] 배열(Array)  (0) 2021.07.13
[Java] System.in.read()  (0) 2021.07.12
[Java] 별찍기  (0) 2021.07.12
Comments