YTCW

java 메소드, method 본문

java

java 메소드, method

YTCW 2024. 9. 5. 17:15

메서드

특정 작업을 수행하는 일련의 문장들을 하나로 묶은것이다.

메서드의 구조

선언부와 구현부가 있다

 

반환타입 메서드명 () : 선언부

{수행될 코드 } ;구현부

 

반환타입, 메서드명, 매개변수 들을 선언한다.

 

매개변수 선언

메서드가 작업을 수행하는데 필요한 값을 제공받기 위한 것 (파라메털라고한다)

 

필요한 값의 개수만큼 변수를 선언하여 각 변수 간의 구분은 쉼표를 사용한다.

 

반환타입

메서드의 작업수행 결과

 

구현부

메서드 선언부 다음에 오는 중괄호{}

 

return 문

void 가 아닌 경우

구현부안에 반드시 return 반환값타입데이가 포함되어야한다.

해당 반환값은 반환타입과 일치하거나 적어도 자동 형변황이 가능한것

 

지역변수

메서드 내에 선언된 변수는 그 내부에서만 사용이 가능하고

메서드의 구현부에 작성된 변수뿐 아니라 

매개변수도 메서드 내에서 선언된 것으로 간주하기때문에 지역 변수로 인식한다.

 

package chapter05;
class Example {
	// int x;  int y;랑 같음
	int x, y;
	
	// add 메서드
	int add(int x, int y) {
		return x + y;
	}

	// multiply 메서드
	int multiply (int x, int y) {
		return x + y;
	}
	
	// 매개변수 x, 반환값 x
	void print99dan () {
		for (int i = 0; i < 8; i++) {
			for (int j = 0; j < 8; j++ ) {
				System.out.print(j * i + " ");
			}
			System.out.println();
			
		}
		
	}
}
// class 파일
public class Method02 {
	
	// main 인 메서드
	// 접근 제어자 정적 메서드 반환타입 메서드명 (매개변수) {... 구현부로 이루어져있다}
	public static void main(String[] args) {
		Example ex1 = new Example();
		ex1.x = 9;
		
		ex1.y = 9;
		
		ex1.add(10, 20); // 타입과 들어가는 파라메터 개수를 지켜줘야함
		ex1.add('a', 'b'); 
		// int 타입만 사용해야되는데 char 타입을 넣어도 문제가 없다. 
		// 자동형 변환이 되기 때문에 좋은 사용 방법은 아니다
		ex1.print99dan();
	}

}

 

사칙연산 클래스

두개의 값을 매개변수로 전달받아 사칙연산 수행

package chapter05;

class MyMath {
	// 매개변수가 있고, 반환값이 있음
	// 매개변수는 타입 생략이 불가하다
	int add(int a, int b) {
		return a + b;
	}
	int subtract(int a, int b) {
		return a - b;
	}
	int multiply(int a, int b) {
		return a * b;
	}
	int divide(int a, int b) {
		return a / b;
	}
	// return 문
	// : 현재 실행중인 메서드를 종료하고 호출한 메서드로 돌아감
	// 반환값 유무에 상관없이 반드시 존재해야합니다.
	
	// 반환이 없는 메서드
	void noReturn () {
		System.out.println("해당 메서드는 반환값이 없습니다.");
		return;
		// 자바 메서드 컴파일러가 반환 타입을 읽고 
		// 자동으로 return; 을 추가한다. 그래서 생략해도 된다
		
	}
	
	String yesReturn () {
		String name = "익명";
		return name;
		// 반환 타입이 void 가 아닌경우에는 
		// return 문 생략 시 오류가 발생한다.
		// 반드시 반환 타입의 데이터값이 반환되어야한다.
		// 생략하고 싶으면 void 를 쓰자
	}
	
	int max (int a, int b) {
		if (a>b) {
			return a;	
		} else {
			return b;
		}
	}
	// 반환 타입이 있는 경우에는 항상 결과값이 반환되도록 지정해야한다.
	// return 쓰였지만 조건에 따라 반환되지않을 경우의 수가 있을떄는 에러남
	
	int min (int a, int b) {
		return a < b ? a : b;
	}
	//
	
}
public class Method03 {

	public static void main(String[] args) {
		MyMath mm = new MyMath();
		// 앞의 MyMath 데이터 타입을 의미한다
		// 두의 MyMath는 생성자 호출을 의미한다 new 를 붙이는건 생성하는것
		System.out.println(mm.add(10, 20)); // 30
		mm.noReturn(); // 해당 메서드는 반환값이 없습니다.
		System.out.println(mm.max(11, 12)); // 12
		System.out.println(mm.max(11, 12)); // 12
	}
	

}

 

 

정적 메서드

메서드 앞에 static 키워드를 붙여 클래스 (정적) 메서드 생성

인스턴스 생성 없이도 호출 가능 메서드이다.

클래스명.메서드명(매개변수...) 로 사용한다.

호출겸 , 값 변경도 가능

 

사용 권장 사항

클래스 설계 시, 변수 중 모든 인스턴스가 공통적으로 사용하는 값

인스턴스 변수를 사용하지 않는 경우에 static 사용

클래스 메서드 내에서 인스턴스 변수 호출을 하지 않는다.

 

 

package chapter05;

// 정적 메서드

class Operator {
	// 인스턴스 변수
	int a, b;
	
	// 인스턴스 메서드 : 인스턴스 변수 a, b 가 필요한 작업
	// 매개변수가 필요하지 않는 경우가 있음
	int add() {
		return  a + b;
		};
		
	int subtract() {
		return a - b;
		};
		
	// 인스턴스 변수와 관계없이 매개변수만으로 작업이 가능하다
		
		
	static int multiply (int a, int b) {
		return a * b;
	}
	static int divide (int a, int b) {
		return a / b;
	}
	static int dff = 123;
	
}
public class Method04 {

	public static void main(String[] args) {
		// 인스턴스 생성
		Operator op = new Operator();
		op.a = 10;
		op.b = 20;
		System.out.println(op.add()); // 30
		System.out.println(op.subtract()); // -10
		
		// 정적 (클래스) 메서드 호출
		// 클래스.메서드명(매개변수...)
		
		int result1 = Operator.multiply(10,20);
		int result2 = Operator.divide(10,20);
		
		System.out.println(result1); // 200
		System.out.println(result2); // 0
	}

}

 

'java' 카테고리의 다른 글

java constructor  (0) 2024.09.06
java 용어 정리, overloading  (0) 2024.09.06
java 객체 지향 프로그램의 변수  (0) 2024.09.05
java 객체 지향 프로그래밍, oop (object - orientend - programming)  (3) 2024.09.05
java 배열, array  (4) 2024.09.05