JAVA 메서드

박승현·2022년 3월 20일
0

JAVA

목록 보기
7/16

메서드란?

메서드는 멤버 함수라고도 불리며, 객체 지향 프로그래밍에서 객체와 관련된 함수로 데이터와 멤버 함수에 대한 접근 권한을 갖는다. 메서드는 클래스 기반 언어에서는 클래스 내부에 정의되며, 프로그램이 실행되고 있을 때 클래스에서 생성된 인스턴스와 관련된 동작을 정의한다.

메서드의 사용

반환타입 메서드명(타입 변수명, 타입 변수명...) {
	// 메서드 내부의 동작
    return;
}
  • 반환타입 : 메서드의 반환 값의 타입을 정해주는 것이다. 메서드는 내부의 논리를 통해 처리된 값을 반환 하는데 이 반환하는 값의 타입을 미리 장해주는 것이다. 예를 들어 두개의 정수를 입력받아서 두 수의 합을 int형 정수로 반환한다면 반환타입은 int가 될 것이다. 만약 반환하는 값이 없으면 반환 타입은 void로 지정 한다.

  • 메서드명 : 변수명 처럼 자유롭게 지을 수 있으며 소문자로 시작하는 것이 일반적이다. 명사가 여러 개 이어진 경우 라면 뒤에 오는 명사의 첫 글자를 대문자로 하여 구분한다. 메서드의 이름을 지을 때는 의미가 있는 이름을 사용하는 것이 좋다.

  • 매개변수는 메서드명 뒤의 괄호 안에 위치한다. 타입과 변수명으로 이루어졌으며 파라미터라고도 불린다. 메서드에서 입력받을 변수의 개수만큼 선언한다.

  • return문은 메서드 내부의 결과 값을 반환하는 역할을 한다. 반환 타입이 void인 경우를 제외하고는 반드시 메서드 내부에 return문이 포함되어 있어야한다. 여러 값을 받을 수 있는 매개변수와는 달리 반환할 수 있는 값은 하나이다.

인스턴스메서드와 클래스메서드

메서드도 클래스 메서드와 인스턴스 메서드로 구분한다. 메서드 앞에 static이 붙어있으면 클래스 메서드이고 그렇지 않으면 인스턴스 메서드이다. 클래스 메서드는 객체를 생성하지 않아도 호출이 가능하지만 인스턴스 메서드는 객체를 생성해야만 호출한다. 왜냐하면 인스턴스 메서드는 객체가 생성되어야 메모리상에 실제로 존재하고 클래스 메서드는 클래스가 메모리에 올라갈 때 생성되기 때문이다.

class Area {
	static void manual() { // static이 있으므로 클래스 메서드
		System.out.println("현재 사용 가능한 함수 목록");
		System.out.println("triangle : 삼각형 넓이");
		System.out.println("rectangle : 사각형 넓이");
		System.out.println("입니다.");
	}
	
	double triangle(int a, int b) { // 삼각형 넓이를 반환하는 메서드 
		return (double) a * b / 2;
	}
	
	int rectangle(int a, int b) { // 사각형 넓이 반환하는 메서
		return a * b;
	}
}

public class Method {

	public static void main(String[] args) {
		Area.manual(); // 클래스 메서드 접근가능
		// Area.triangle(3,5); //에러발생
		// Area.rectangle(3,4); //에러발생
		
		Area cal = new Area();
		cal.manual();
		System.out.println(cal.triangle(3, 5));
		System.out.println(cal.rectangle(3, 4));
	}

}
/*
출력결과
현재사용 가능한 함수 목록
triangle : 삼각형의 넓이
rectangle : 사각형의 넓이
입니다
현재 사용 가능한 함수 목록
triangle : 삼각형의 넓이
rectangle : 사각형의 넓이
입니다
7.5
12
*/

클래스 멤버와 인스턴스 멤버간의 참조 및 호출

클래스 변수와 클래스 메서드를 클래스 멤버, 인스턴스 변수와 인스턴스 메서드를 인스턴스 멤버라고부른다. 같은 클래스에 속한 멤버들끼리는 인스턴스를 생성하지 않고 변수를 참조하거나 메서드를 호출한다. 하지만 클래스 메서드로 인스턴스 멤버들을 참조하는 것은 에러가 발생한다. 그 이유는 클래스 멤버가 존재하는 시전은 처음 클래스가 메모리에 올라갈 때인데 이 시점에는 인스턴스 멤버는 존재하지 않기 때문이다.

인스턴스 멤버의 클래스 멤버 사용 -> 가능
클래스 멤버의 인스턴스 멤버 사용 -> 에러
인스턴스 멤버의 인스턴스 멤버 사용 -> 가능
클래스 멤버의 클래스 멤버 사용 -> 가능
class Check {
	static int cv = 5; // 클래스 변수
	int iv = 4; // 인스턴스 변수
	
	static void cm() { // 클래스 메서드
	}
	
	void im() {// 인스턴스 메서드
	}
	
	static void cm_Imember() {
		// 클래스 메서드가 인스턴스멤버에 접근
		// System.out.println(iv); // 에러발생
		// im(); //에러발
	}
	
	void im_Cmember() {
		// 인스턴스 메서드가 클래스 멤버에 접근
		System.out.println(cv);
		cm();
	}
	
	static void cm_Cmember() {
		// 클래스 메서드가 클래스 멤버에 접근
		System.out.println(cv);
		cm();
	}
	
	void im_Imember() {
		// 인스턴스 메서드가 인스턴스 멤버에 접근
		System.out.println(iv);
		im();
	}
}

public class Method2 {
	public static void main(String[] args) {
		//Check.cm_Imember(); // 에러
		Check.cm_Cmember(); // 성공
		
		Check myinstance = new Check();
		myinstance.im_Cmember(); // 성공
		myinstance.im_Imember(); // 성공
	}
}
profile
그냥 해보자 안되더라도 해보자 끝까지 해보자

0개의 댓글

관련 채용 정보