본문 바로가기
Programming/JAVA(eclipse)

java 7일차 _01.메서드

by yoon9i 2024. 3. 18.

3. 메서드( method )

1) 용도: 기능처리. 일반적으로 인스턴스 변수와 관련된 기능처리이다.
           ( 변수값 수정, 변수값 조회, 유효성검사 기능 ... )
2) 문법:
public 리턴타입 메서드명 ( [변수, ...] ) { 
     // [변수, ...] : 파라미터
     // 파라미터는 없거나 여러개 지정 가능
     문장1;
       
     [return 값]; // 리턴값
     // 리턴값은 없거나 반드시 한개만 지정 가능
}

3) 특징
- 반드시 호출해야 실행된다.
==> 호출 방법은?

가. 다른 클래스에서
step1: 반드시 객체생성해야된다
         클래스명 참조변수명 = new 클래스명 ( [값,...] );
step2: 참조변수명.메서드( [값,...] );

나. 자신 클래스에서
step1: 반드시 객체생성해야된다
         클래스명 참조변수명 = new 클래스명 ( [값,...] );
step2: this.메서드( [값,...] ); 또는 메서드( [값,...] );

 

4) 메서드의 파라미터 및 리턴값의 따른 4가지 형식

가. 파라미터 x 리턴값 x 경우
- 문법:
         public class 클래스명 {
public void 메서드명( ) {
    문장;
}
public void 메서드명2( ) {
    문장;
    this.메서드명( ); // 메서드명( ); 
    // ==> 같은클래스내에서 ( this 생략가능 )
}
          }

- 사용방법
step1) 객체생성

클래스명 참조변수명 = new 클래스명( );
참조변수명.메서드명( ); // 다른클래스에서

나. 파라미터 o 리턴값 x 경우
문법:
        public class 클래스명 {
public void 메서드명1(int n) {

}
public void 메서드명2(String n) {

}

public void 메서드명3(String n, int n) {

}
        }
사용:
클래스명  참조변수명 = new 클래스명( );
참조변수명.메서드명1(10);
참조변수명.메서드명2("홍길동");
참조변수명.메서드명3("홍길동", 10);

* 오버로딩 메서드 ( overloading )
- 개념: 하나의 클래스안에 동일한 이름의 메서드가 여러개 지정이
         가능하다. 단, 식별하기 위해서 인자리스트( 개수, 타입, 순서 )
         가 반드시 달라야한다.
- 장점: 재사용

다. 파라미터 x 리턴값 o 경우
문법:
         public class 클래스명 {
public 리턴타입 메서드명( ) {
     문장 1;

     return 값; // 리턴되는 값: 리턴값
}
         }

ex)     public int x( ) {
문장;
return 100;
         }

         public String x( ) {
문장;
return "홍길동";
         }

사용:
step1) 객체생성

클래스명 참조변수명 = new 클래스명( );
리턴값저장용변수 = 참조변수명.메서드명( );


라. 파라미터 o 리턴값 o 경우
문법:
        pulic class 클래스명 {
public 리턴타입 메서드명( 변수, 변수2, ... ) {
    문장;
    return 값;
}
        }

ex)
        public int sum(int n, in n2) {
return n + n2;
        }

사용:
         클래스명  참조변수명 = new 클래스명( );
         리턴값저장용변수 = 참조변수명.메서드명(값, 값2);

 

package exam09_클래스4_method;

public class Util {

	// 1. 파라미터 x 리턴값 x
	public void method1() {
		System.out.println("method1");
	};

	// 2. 파라미터 o 리턴값 x
	public void method1(int n) {
		System.out.println("method1: " + n);
	}

	public void method1(String n) {
		System.out.println("method1: " + n);
	}

	public void method1(String n, int n2) {
		System.out.println("method1: " + n + "\t" + n2);
	}

	// 3. 파라미터 x 리턴값 o
//	public 리턴값의데이터타입 method2() {
//		System.out.println("method2");
//		return 값;
//	}

	public int method2() {
		System.out.println("method2");
		return 100;
	}

	public String method3() {
		System.out.println("method2");
		return "홍길동";
	}

	// 4. 파라미터 o 리턴값 o
	public int sum(int n, int n2) {
		return n + n2;
	}

}
package exam09_클래스4_method;

public class TestUtil {

	public static void main(String[] args) {
		
		Util u = new Util();
		// 1. 파라미터 x 리턴값 x
		u.method1();
		
		// 2. 파라미터 o 리턴값 x
		// 오버로딩 메서드 ( 인자리스트가 다르다면 하나의 메서드명으로 여러번 사용가능)
		u.method1(10);
		u.method1("홍길동");
		u.method1("홍길동",10);
		
		// 3. 파라미터 x 리턴값 o
		int result = u.method2();
		System.out.println(result);
		
		String result2 = u.method3();
		System.out.println(result2);
		
		// 4. 파라미터 o 리턴값 o
		int result3 = u.sum(10, 20);
		System.out.println("n + n2: " + result3);
	}

}

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

package exam09_클래스4_method2;

public class CatMethod {
	
	// private 로 지정하면 외부클래스에서 접근이 불가능
	private String name;
	private int age;
	private String gender;

	// 생성자: private된 변수를 초기화하자.
	// 기본생성자는 무조건 작성하자.
	public CatMethod() {

	}

	// 오버로딩 생성자
	public CatMethod(String name, int age, String gender) {
		this.name = name;
		this.age = age;
		this.gender = gender;
	}
	
	// 메서드
	// 이름변경하는 메서드: 파라미터 o 리턴값 x ( 7일차정리 메서드형식 (나) 참고 )
	public void setName(String name) {
		this.name = name;
	}
	
	// 나이변경하는 메서드
	public void setAge(int age) {
		this.age = age;
	}
	
	// 성별변경하는 메서드
	public void setGender(String gender) {
		this.gender = gender;
	}
	
	// 이름조회하는 메서드: 파라미터 x 리턴값 o ( 메서드형식 (다) 참고 )
	public String getName() {
		return this.name;
	}
	
	// 나이조회하는 메서드
	public int getAge() {
		return this.age;
	}
	
	//성별조회하는 메서드
	public String getGender() {
		return this.gender;
	}
	
}
package exam09_클래스4_method2;

public class TestCat {

	public static void main(String[] args) {
		
		// 야옹이 2 암컷
		CatMethod c1 = new CatMethod("야옹이", 2, "암컷");
		
		// 값 변경 ==> set 메서드, setter 메서드라고 부른다.
		// 메서드명: 'set변수명' 권장, 카멜표기법(camel)
		c1.setName("망치");
		c1.setGender("수컷");
		
		// 값 조회 ==> get 메서드, getter 메서드라고 부른다.
		// 메서드명: 'get변수명' 권장, 카멜표기법(camel)
		String name = c1.getName();
		int age = c1.getAge();
		String gender = c1.getGender();
		System.out.printf("이름: %s, 나이: %d, 성별: %s \n", 
				name,age,gender);
		
		System.out.printf("이름: %s, 나이: %d, 성별: %s \n", 
				c1.getName(),c1.getAge(),c1.getGender());
	}

}

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

package exam09_클래스4_method2;

public class Dog {

	// 변수
	private String name;
	private int age;
	private String gender;

	// 생성자
	public Dog() {

	}

	public Dog(String name, int age, String gender) {
		this.name = name;
		// age 유효성 체크하기
		if (age < 20) {
			this.age = age;
		} else {
			System.out.println("age 값을 확인해주세요.");
		}
		this.gender = gender;
	}

	// 메서드 (setter & getter)

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		// age 유효성 체크하기
		if (age < 20) {
			this.age = age;
		} else {
			System.out.println("age 값을 확인해주세요.");
		}
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

}
package exam09_클래스4_method2;

public class TestDog {

	public static void main(String[] args) {
		
		// 망치 2 수컷
		Dog d1 = new Dog("망치",2000,"수컷");
		
		// 나이수정
		d1.setAge(1000);
		
		// 조회
		String name = d1.getName();
		int age = d1.getAge();
		String gender = d1.getGender();
		System.out.printf("이름: %s, 나이: %d, 성별: %s \n", 
				name,age,gender);
	}

}

 

package exam09_클래스4_method2;

public class Dog2 {

	// 변수
	private String name;
	private int age;
	private String gender;

	// 생성자
	public Dog2() {

	}

	public Dog2(String name, int age, String gender) {
		this.name = name;
		// age 유효성 체크하기
		if (ageCheck(age)) {
			this.age = age;
		} else {
			System.out.println("age 값을 확인해주세요.");
		}
		this.gender = gender;
	}

	// 메서드 (setter & getter)

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		// age 유효성 체크하기
		if (ageCheck(age)) { // this.ageCheck(age)
			this.age = age; 
		} else {
			System.out.println("age 값을 확인해주세요.");
		}
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}
	
	///////////////////////////////////////////
	// age 값의 유효성 체크하는 메서드 ////////////////
	///////////////////////////////////////////

	public boolean ageCheck(int age) {
		if(age < 20) {
			return true;
		} else {
			return false;
		}
	}
	
	public boolean ageCheck2(int age) {
		return age < 20;
	}
	
	public boolean ageCheck3(int age) {
		boolean result = false;
		if(age < 20) {
			result = true;
		}
		
		return result;
	}
	
}

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

package exam09_클래스4_method3;


class Test {
	
	int num;
	public Test(int num) {
		this.num = num;
	}	
}// end Test

public class TestMain {

	// 파라미터에 전달되는 값이 기본형인 경우에는 메서드내에서 
	// 전달된 값을 변경해도 원본값은 변경이 안된다.
	public static void method1(int x) {
		// 값 변경
		x = 20;
	}
	
	// 파라미터에 전달되는 값이 참조형인 경우에는 메서드내에서
	// 전달된 값을 변경하면 원본값도 변경이 된다.
	//Test -> 참조형, String -> 참조형
	// Test 도 class 이기때문
	public static void method2(Test t) { 
		// 값 변경
		t.num = 200;		
	}
	

	public static void main(String[] args) {
		
		// 기본형
		int a = 10;
		System.out.println("기본형 메서드 호출전: " + a); // 10
		method1(a); // method1 에 a 변수가 가진 값(10)을 전달 ==> call by value
		System.out.println("기본형 메서드 호출후: " + a); // 10
		
		// 참조형
		Test b = new Test(100);
		System.out.println("기본형 메서드 호출전: " + b.num); // 100
		method2(b); // method2 에 b 변수가 가진 값(주소값)을 전달 ==> call by reference
		System.out.println("기본형 메서드 호출후: " + b.num); // 200
	}

}