본문 바로가기
JAVA

[JAVA] 객체와 클래스 - 메소드(method)

by Amy IT 2022. 5. 22.

메소드(method)는 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것입니다. 클래스의 구성요소 중 하나로서, 클래스의 기능적인 면을 표현할 때 사용합니다. 일반적으로 멤버변수에 저장된 데이터를 수정, 조회, 삭제하거나 중복코드를 처리할 때 사용합니다. 다음과 같은 형식으로 메소드를 정의합니다.

[접근제한자] 리턴타입 메소드명([파라미터,...]) {
      //메소드가 처리하는 실행문
      [return 리턴값;]
}

 

메소드를 사용하려면 반드시 해당 메소드가 속한 클래스 객체를 생성한 후 메소드를 호출해야 합니다. 메소드를 호출하면 프로그램 제어가 호출한 곳(caller)에서 호출된 곳(callee, worker)으로 넘어가며, 호출된 곳에서 작업이 끝나면 다시 호출한 곳으로 복귀합니다. 리턴값을 가지고 복귀할 때는 매소드 마지막에 return 리턴값; 을 사용하며, 리턴값과 동일한 데이터 형을 리턴타입에 지정해야 합니다. 리턴값 없이 복귀할 때는 리턴타입에 반드시 void(텅 빈)라고 명시해야 합니다. 파라미터(매개변수)를 이용하면 호출한 곳에서 호출된 곳에 특정 값(인자, argument)을 전달할 수 있습니다. 

 

 

 

◆ 리턴값과 매개변수의 유무에 따른 메소드의 다양한 형태

 

(1) 리턴값 X ,   매개변수 X

public class Test {
	public void methodA() {
		System.out.println("methodA()");
	}
}
public class TestMethod {
	public static void main(String[] args) {
		Test t1 = new Test(); //Test 클래스 객체 생성
		t1.methodA(); //methodA 호출
	}
}

 

(2) 리턴값 X ,   매개변수 O (1개)

public class Test {
	public void methodA(int num) { //매개변수 통해 10 값 받음
		System.out.println("methodA(): "+num);
	}
}
public class TestMethod {
	public static void main(String[] args) {
		Test t1 = new Test(); //Test 클래스 객체 생성
		t1.methodA(10); //methodA 호출하며 값 전달
	}
}

 

(3) 리턴값 X ,   매개변수 O (여러개)

public class Test {
	public void methodA(int num1, int num2) { //매개변수 통해 10, 20 값 받음
		System.out.println("methodA(): "+(num1+num2));
	}
}
public class TestMethod {
	public static void main(String[] args) {
		Test t1 = new Test(); //Test 클래스 객체 생성
		t1.methodA(10, 20); //methodA 호출하며 값 전달
	}
}

 

(4) 리턴값 O ,   매개변수 X

public class Test {
	public int methodA() { //리턴값의 데이터 형 == 리턴타입
		int num = 100;
		System.out.println("methodA() 리턴 시킨 값: "+num);
		return num; //num 값 가지고 호출한 곳으로 리턴
	}
}
public class TestMethod {
	public static void main(String[] args) {
		Test t1 = new Test(); //Test 클래스 객체 생성
		t1.methodA(); //호출만 하고 리턴값 사용 안함 
		int result = t1.methodA(); //호출 후 리턴값 사용, result 변수에 리턴값 저장
		System.out.println("main에서 받은 값: "+result);
	}
}

 

(5) 리턴값 O ,   매개변수 O (여러개)

public class Test {
	public int methodA(int num1, int num2) { //매개변수 통해 10, 20 값 받음 //리턴값의 데이터 형 == 리턴타입
		int result = num1+num2; //넘어온 10, 20 값을 더해서 result에 저장
		System.out.println("methodA() result: "+result);
		return result; //result 값 가지고 호출한 곳으로 리턴
	}
}
public class TestMethod {
	public static void main(String[] args) {
		Test t1 = new Test(); //Test 클래스 객체 생성
		int result = t1.methodA(10, 20); //methodA 호출하며 값 전달, result 변수에 리턴값 저장
		System.out.println("main에서 받은 값: "+result);
	}
}

 

(6) 리턴값 O (여러개)

public class Test {
	public int[] methodA() { //리턴값의 데이터 형 == 리턴타입
		int a = 10;
		int b = 20;
		int c = 30;
		int [] arr = {a,b,c}; //리턴시킬 값이 여러개이므로 배열로 저장
		for (int i : arr) {
			System.out.println("methodA(): "+i);
		}
		return arr; //arr 값 가지고 호출한 곳으로 리턴
	}
}
public class TestMethod {
	public static void main(String[] args) {
		Test t1 = new Test(); //Test 클래스 객체 생성
		int [] arr = t1.methodA(); //methodA 호출 후 arr 변수에 리턴값 저장
		for (int i : arr) {
			System.out.println("main에서 받은 값: "+i);
		}
	}
}

 

 

 

◆ setter, getter 메소드

 

역할에 따라 메소드를 크게 두 가지로 구분할 수 있습니다. 

 

(1) setter 메소드 : setter 메소드는 멤버변수에 데이터를 저장할 목적으로 사용되는 함수입니다. 메소드명은 일반적으로 set변수명(첫 글자 대문자)으로 지정합니다. 매개변수를 통해서 호출한 곳에서 호출된 곳으로 특정 값을 전달합니다. 데이터를 전달 받아서 저장하는 역할이므로 주로 매개변수를 가지며 리턴값은 없는 형태입니다. 

 

(2) getter 메소드 : getter 메소드는 멤버변수의 데이터를 조회할 목적으로 사용되는 함수입니다. 메소드명은 일반적으로 get변수명(첫 글자 대문자)으로 지정합니다. 리턴값을 가지고 호출한 곳으로 복귀합니다. 호출 시 멤버변수에 접근해서 값을 리턴시키는 역할이므로 주로 매개변수는 없고 리턴값을 가지는 형태입니다. 

 

 

3개의 멤버변수를 가지는 학생 클래스를 만든다고 할 때, 가장 기본적으로 생성자, get(), set() 함수, toString() 함수를 작성해 놓을 수 있습니다. 참고로 toString() 함수는 객체의 주소 대신 객체가 실제 가지고 있는 데이터 값을 출력하도록 해 주는 함수로서, 해당 클래스에 toString() 함수를 작성해 놓으면 참조변수를 출력할 때 자바 프로그램이 묵시적으로 toString() 함수를 호출하여 주소가 아닌 실제 데이터를 확인할 수 있도록 합니다. 

public class Student {
	String name;
	int age;
	String addr;

	//생성자
	public Student(String name, int age, String addr) {
		super();
		this.name = name;
		this.age = age;
		this.addr = addr;
	}
	public Student() {
		super();
	}

	//get() set() 함수
	public String getName() { //String 타입의 name 멤버변수 값을 리턴
		return name;
	}
	public void setName(String name) { //매개변수로 값을 받아와서
		this.name = name; //멤버변수(this.멤버변수)에 값을 저장
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}

	//toString() 함수
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + ", addr=" + addr + "]";
	}
	
}
public class TestStudent {

	public static void main(String[] args) {
		Student s1 = new Student();
		s1.setName("홍길동");
		s1.setAge(20);
		s1.setAddr("서울");
		System.out.println(s1); 
		System.out.println(s1.toString());
	}

}

 

 

이번 글에서는 메소드의 기본 개념과 다양한 형태, setter와 getter 메소드를 정리해 보았습니다. 다음 글에서는 setter 메소드와 getter 메소드를 이용한 정보은닉에 대해 알아보도록 하겠습니다.

 

 

댓글