코딩 공부/JAVA

[JAVA] 자바 클래스-메서드에 대하여

Cosmic-dust 2022. 4. 27. 14:30
728x90
반응형

1. 메서드 정의하기

메서드: 클래스의 기능에 해당하는 요소

ex) 클래스(사람) - 메서드(먹기, 잠자기, 공부하기 등)

클래스(자동차) - 메서드(전진하기, 후진하기, 회전하기 등)

 

(1) 메서드 정의의 문법적 구조

자바 제어자 리턴(반환)타입 메서드명(입력매개변수) {

//    메서드 내용

}

ex) public static int sum(int a, int b) {

//    메서드 내용

}

 

(2) 메서드의 장점

- 중복코드 재사용

- 코드의 모듈화를 통해 코드 가독성 향상

 

(3) 특징

- 입력매개변수가 꼭 두 개가 아니어도 된다. 여러개가 있어도 되지만 갯수가 많을때는 array나 class로 쓴다.

- 메서드 정의시 소괄호(( ))와 중괄호({ }) 포함

 

리턴(반환) 타입 - 메서드 완료 후 반환되는 타입 - 반환값이 있는 경우
(=리턴타입이 void가 아닌 경우) 메서드 내 return이 존재해야 함
- 반환값이 없는 메서드는
리턴타입을 void로 선언

 

메서드 이름 - 변수의 이름 규칙과 동일하게 적용

 

입력매개변수 - 메서드에 전달되는 값

 

(4) 메서드의 예시

/*	클래스의 외부에서 메소드 호출  */

//#1. 	클래스 정의
class A {
	// 메서드
	//@1. 리턴 타입: void + 매개변수: 없음.
	void print() {
		System.out.println("안녕");
	}
	//@2. 리턴 타입: int + 매개변수: 없음.
	int data() {
		return 3;
	}
	//@3. 리턴 타입: double + 매개변수: 2개
	double sum(int a, double b) {	
		return a + b;		// return 입력하지 않으면 오류 발생
	}
	//@4.  리턴 타입: void + 내부에 리턴 포함(함수를 종료한다는 의미)
	void printMonth(int m) {
		if(m < 0 || m > 12) {
			System.out.println("잘못된 입력");
			return;						//return 없을 경우 = 잘못된 입력/n 15월 입니다. 이렇게 뒷문장도 나온다.
		}
		System.out.println(m + "월입니다.");
	}
}

public class ExternalCallMethods {
	public static void main(String[] args) {
		//#2. 객체 생성 : 중요
		A a = new A();	
		//#3. 메서드 호출(멤버 활용)
		a.print();						// 안녕
		
		int k = a.data();		
		System.out.println(k);			// 3
		a.data();	// return 타입을 활용하지 않을 때 쓸 수도 있지만, 결과에는 영향 X 꼭 써야되는 건 아니다.
		
		double result = a.sum(3,  5.2);
		System.out.println(result);		//3 + 5.2 = 8.2
		a.printMonth(5);				//5월 입니다.
		a.printMonth(15);				//잘못된 입력
	}
}

(5) 클래스 내부에서의 메서드 호출

import java.util.Arrays;

/* 클래스 내부에서의 메서드 호출  */

public class InternalCallMethods {
	//메서드
	public static void main(String[] args) {
		// 같은 클래스 안에 있는 내부 메서드 호출
		print();				//안녕
	
		int a = twice(3);
		System.out.println(a);	//a = 6
		
		double b = sum(a, 5.8);
		System.out.println(b);	//11.8
		
		//배열을 매개변수로 가지는 메서드 호출
		int[] array1 = new int[] {1,2,3};	//100번지
		modifyData(array1);
		
		printArray(array1);		//{4, 5, 6}
		
//		printArray(new int[] {1,2,3});		//정상
//		printArray({1,2,3});				//비정상
		-
	}
	
	public static void modifyData(int[] array2) {
		//int[] array2;
		//array2 = array1	//100번지
		array2[0]=4;
		array2[1]=5;
		array2[2]=6;
	}
	
	
	public static void printArray(int[] array2) {
		//int[] array2;
		//array2 = {1, 2, 3}		// 어떤 타입의 묶음인지 모르니까 안된다.
		System.out.println(Arrays.toString(array2));
	}
	
	public static void print() {
		System.out.println("안녕");
	}
	
	public static int twice(int k) {
		//int k;
		//k = 3;
		return k * 2;
	}
	
	public static double sum(int m, double n) {		// (int a, double n) return a + n 로 해도 상관없다.
		//int m; double n;
		// m = a
		// n = 5.8
		return m + n;
	}
}

array2 = array1 는 똑같이 100번지를 가리키고 있다.

때문에 array1를 {1,2,3}으로 입력해도, array2 가 {4,5,6}이기 때문에 {4,5,6}으로 출력된다.

 

728x90
반응형