0317 함수/메소드

Fifty·2025년 3월 17일

2. JAVA

목록 보기
5/33

JAVA는 Class로 이루어져있다.
지금까지 내가 배운 거? Class 이름 생성 규칙: 첫글자는 대문자

배열은 동일한 Type만 저장이 가능함
서로 다른 Type을 저장하고 싶으면? '구조체'

Class의 구성 요소

  1. 변수: 데이터를 저장하는 저장소
    *데이터는 처리가 되어야 한다.

  2. 함수: 데이터를 처리하는 명세서 → "메소드": 소문자로 쓴다.
    (입력) 5
    (처리) +3
    (출력) 8

함수의 형태

	메소드의Type:반환자료형 메소드의이름(입력받을 값:매개변수) {
		함수 내에서 처리되어야 할 명령문들;
        return 반환할 값; (void 함수에는 없음)
	}

*return의 또 다른 의미: 여기가 끝입니다.

	void add3(int a){
		int result;
        result = a+3;        
	}

메소드의 Type이 void면 비어있다, 반환되는 것이 없다.
반환할 것이 있다면, return되는 자료의 자료형으로 선언한다.

우선 public static을 붙여주고 사용하자.

public class Test0317 {
	public static void main(String[] args) {
		int i=1;
		int ad;
		
		System.out.println("i "+i);
		ad = add3(i);
		System.out.println("ad "+ad);
	}
	
	public static int add3(int n){
		System.out.println("n "+n);
		int result;
	    result = n+3;
	    System.out.println("result "+result);
	    return result;
	}
}

실행결과

*MAIN 함수는 최초에 시작되는 함수

[예제]
이름: f1
반환자료: x(void)
입력자료: x
실행: f1함수 실행.

	public static void main(String[] args) {
		f1();
	}
	
	
	public static void f1() {
		System.out.println("hello");
	}

[예제]
이름: f2
반환자료: x(void)
입력자료: 정수
실행: 입력받은 자료를 그대로 출력

public class Test0317 {
	public static void main(String[] args) {
		int i=3;
		f2(i);
	}

	public static void f2(int a) {
		System.out.println(a);
	}
}

[예제]
2개의 숫자를 받아서 사칙연산하는 함수를 만들기
연산 결과 출력은 프린터를 해주는 함수를 활용하기

public class Test0317 {
	public static void main(String[] args) {
		int n1=3;
		int n2=5;
		
		printResult(add(n1, n2));
		printResult(minus(n1, n2));
		printResult(div(n1,n2));
		printResult(multi(n1, n2));
	}
	
	public static void printResult(int n) {
		System.out.println("결과값: "+ n);
	}
	
	public static int add(int a, int b) {
		return a+b;
	}
	
	public static int minus(int a, int b) {
		return a-b;
	}
	
	public static int div(int a, int b) {
		return a/b;
	}
	
	public static int multi(int a, int b) {
		return a*b;
	}
	
}

[예제]
메인함수는 사칙연산을 수행하고 싶어함
calculater라는 함수에게 두 개의 정수를 넣어준다.
calculater는 덧,뺄,나,곱에게 주고 그 결과를 출력해준다.
출력해주고 난 뒤에는 메인에서는 '프로그램을 종료합니다.' 메시지를 출력하고 종료

public class Test0317 {
	public static void main(String[] args) {
		int n1=3;
		int n2=5;

		calculater(n1, n2);
		
		System.out.println("프로그램을 종료합니다.");
	}
	
	public static void calculater(int a, int b) {
		System.out.println("입력받은 수: " + a + ", " + b);
		System.out.println("덧셈: "+ add(a,b));
		System.out.println("뺄셈: "+ minus(a,b));
		System.out.println("곱셈: "+ multi(a,b));
		System.out.println("나눗셈: "+ div(a,b));
	}
	
	public static int add(int a, int b) {
		return a+b;
	}
	
	public static int minus(int a, int b) {
		return a-b;
	}
	
	public static int multi(int a, int b) {
		return a*b;
	}
	
	public static int div(int a, int b) {
		return a/b;
	}
}

stack


차곡차곡 쌓여서 함수의 연산이 이루어짐
add
calculater
main

[예제]
main함수가 f1함수를 호출할 때도 있고 f2함수를 호출할 때도 있다.
main → f1() 호출하고 print f1함수 실행
main → f2() 호출하고 print f2함수 실행
숫자를 입력하세요.
음수를 입력하면 프로그램 종료
0을 포함한 양수를 입력했을 때,
짝수일 경우 f1()를 실행
홀수일 경우 f2()를 실행

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		System.out.println("숫자를 입력하세요");
		
		int input = sc.nextInt();
		while(input>=0) {
			if(input%2==0) f1();
			else f2();
			System.out.println("계속 하시려면 숫자를 입력하세요.(종료: 음수 입력)");
			input = sc.nextInt();
		}
		System.out.println("프로그램을 종료합니다.");
	}

	public static void f1() {
		System.out.println("짝수입니다.");
	}
	public static void f2() {
		System.out.println("홀수입니다.");
	}

[예제]
하이픈(-) n개를 출력하는 함수 linePirnt()
main()에서 몇 번 찍을지 정할 거임

	public static void main(String[] args) {
		linePrint(10);
	}

	static void linePrint(int n) {
		for(int i=0;i<n;i++) {
			System.out.print("-");
		}
		System.out.println("");
	}

원하는 문자와 n개를 출력하는 함수도 만들자

	static void linePrint(char c, int n) {
		for(int i=0;i<n;i++) {
			System.out.print(c);
		}
		System.out.println("");
	}

원하는 문자와 n개의 라인을 l개 출력하는 함수도 만들자.

	static void linePrint(char c, int n, int l) {
		for(int j=0;j<l;j++) {
			for(int i=0;i<n;i++) {
				System.out.print(c);
			}
			System.out.println("");
		}
	}

! 참고 !
linePrint()의 이름이 모두 똑같은데 코드에 문제가 없는 이유는
오버로딩(overloading)을 사용했기 때문인데,
오버로딩은 메소드의 이름이 같고, 매개변수의 개수나 타입이 다른 것을 의미한다.
같은 기능을 하는 메소드를 하나의 이름으로 사용할 수 있고, 메소드의 이름을 절약할 수 있다.
필요한 기능을 매개변수에 따라 설정할 때 사용하면 좋다. 위의 예제 참고!

class test(){
}
class test(int n){
}
class test(int n, String s){
}

참고로 오버라이딩(overriding)은 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의하는 것이다.
오버라이딩은 메소드의 이름, 매개변수, 리턴값이 모두 같아야한다.

class Parent(){
}
class baby extends Parent(){
}

[예제]
정수가 주어지면 짝수와 홀수를 판별하는 프로그램

main이 짝홀판단함수에게 숫자를 주면
짝수면 0, 홀수면 1을 반환해서 알려준다.

main은 받은 숫자를 가지고 짝수입니다. 홀수입니다. 라는 내용을 출력한다.

	public static void main(String[] args) {
		int n = evenOdd(3);
		if(n==0) System.out.println("짝수입니다.");
		else System.out.println("홀수입니다.");
	}

	static int evenOdd(int n) {
		if(n%2==0) return 0;
		else return 1;
	}

해보니까 출력할 때도 삼항연산자를 사용할 수 있다.

System.out.println(n==0?"짝수입니다.":"홀수입니다.");

0개의 댓글