JAVA/JAVA 정리

[JAVA] 메소드

웹코린이 2023. 5. 23. 21:02
728x90

메소드란 ?

클래스 안에서 특정 기능을 수행하기 위해 코드들을 따로 하나의 블록으로 묶어 놓은 집합을 말한다.

 

메소드의 장점

  • 같은 내용의 코드를 반복적으로 사용하는 것을 피할 수 있다.
    • 반복되는 문장들을 묶어서 메소드로 작성해 놓으면 필요할 때마다 재사용이 가능하며 중복된 코드를 제거할 수 있다.

이렇게 메소드처럼 코드들의 집합을 따로 분리하는 것을 "모듈화"라고 한다.

 

모듈화의 장점

  • 코드를 읽을 떄 가독성이 좋다.
  • 프로그램을 수정할 때 빠르고 쉽게 수정할 수 있다.

 

메소드의 선언 방법

접근 제한자 반환 타입 메서드 이름() {
	// 실행할 문장;
}

 

  • 접근제한자 (access modifier) : 변수와 마찬가지로 해당 메소드를 접근할 수 있는 범위를 결정한다.
  • 반환 타입 (return type) : 메소드를 호출하면 메소드는 블록 안에 있는 코드들을 실행한 후 결과값을 반환하는데, 어떤 타입으로 반환할 것인지 타입을 미리 정해준다. 반환값이 없는 경우에는 반환 타입으로 'void'를 사용한다.
  • 메소드 이름 : 변수처럼 이름이 있고, 메소드를 호출할 때 사용한다.

 

메소드의 선언 및 호출 방법

public class Test01 {
	public static void main(String[] args) {
		printHello();  // main() 에서 printHello() 메소드 호출
    }
	static void printHello() { // static : 프로그램 시작과 동시에 메모리에 올라가 있는 특징
                                 // 따라서, 바로 사용 가능.
    	System.out.println("안녕하세요");
        System.out.println("만나서 반갑습니다.");
    }
}

 

다른 클래스에 있는 메소드에 접근하고 싶을 경우에는 아래와 같이 사용합니다.

메소드가 있는 클래스 참조 변수 = new 클래스();   // 다른 클래스 객체 생성
참조 변수.메소드 이름();   // 객체.메소드명();

// Book이라는 클래스가 있고, 그 안에 read()라는 메소드가 있을 시 사용법
Book b = new Book();
b.read();

 

2개 이상의 메소드 선언 및 호출 방법

public class Jogger {
	String name;
    
    void run() { // 메소드 1
    	System.out.println("run run run!");
    }
    
    void sayName() { // 메소드 2
    	System.out.println("제 이름은 " + name + "입니다.");
    }
}

public class Test01 {
	public static void main(String[] args) {
    	Jogger jogger = new Jogger(); // Jogger 클래스 객체 생성
        jogger.name = "홍길동"; // Jogger 클래스의 name을 홍길동으로 초기화
        jogger.sayName(); // Jogger 클래스의 sayName() 메소드 호출
        jogger.run();  // Jogger 클래스의 run() 메소드 호출
    }
}

 

매개변수

 

메소드의 기능을 수행할 때 사용할 "인수"를 매개변수라고 한다. 메소드를 선언할 때 괄호 () 안에 어떤 형태로 받을지 작성할 수 있다 .

 

매개 변수가 하나일 경우

접근 제한자  반환 타입  메소드 이름(자료형 변수명) {
	// 실행할 문장
}

 

매개변수가 2개 이상일 경우

접근 제한자 반환 타입 메소드 이름(자료형 변수명1, 자료형 변수명2, ...) { 
	// 수행할 문장
}

 

매개 변수 하나가 있는 메소드 선언 및 사용

public class Book {
	void count(int bookNum) { // 매개변수가 하나인 메소드
    	System.out.println("책은 " + bookNum + "권 입니다.");
    }
}

public class Test01 {
	public static void main(String[] args) {
    	Book myBook = new Book(); // Book 객체 생성
        myBook.count(3); // myBook 클래스의 count 메소드 호출
    }
}

// 실행 결과
// 책은 3권입니다.

 

getter와 setter 메소드

 객체 밖에서 필드에 마음대로 접근하여 값을 변경할 수 있게 된다면 문제가 발생할 수 있기 때문에 우리는 getter와 setter를 사용한다. 객체 지향 프로그래밍에서는 메소드를 통해서 필드의 값을 불러오고, 필드의 값을 변경하는 값을 변경하는 방법을 이용한다. 

 

getter와 setter의 장점

  • 필드를 보호할 수 있다.
  • 메소드에서 필드에 들어갈 값을 검증한 후 필드에 대입할 수 있다.
  • 외부에서 사용할 필드의 값을 정제한 후 값을 제공할 수 있다.

setter의 선언 방법

// 나이의 값을 1 이상으로만 받고 싶을 경우 코드
class Test01 {

	private int age;
    
	void setAge(int num) {
		if(num <= 0) { // 유효성 검사 (값이 잘못 넣어졌을 경우)
    		System.out.println("잘못된 수를 입력하셨습니다. 1 이상의 값으로 설정하세요.");
        	return;
    	} else {
    		age = num;
    	}
	}
}

setAge 메소드를 이용해 age 값을 저장한다면, 필드에 값을 저장하기 전에 검증을 먼저 할 수 있다. 이런 메소드를 setter 메소드라고 한다. 따라서 필드에 선언된 age도 객체 외부에서 직접 값 변경을 하지 못하도록 필드에 접근을 제한하기 위해 private을 붙여 선언한다.

 private로 age를 선언하게 되면서 값을 불러오는 것도 불가능해졌기 때문에 외부에서 값을 불러올 수 있는 메소드를 선언 해주어야 하는데 그것을 getter라고 부른다.

 

getter의 선언 방법

void getAge() {
	return age;
}

이런식으로 getter와 setter는 한번에 같이 선언하게 된다.

 

getter와 setter의 선언과 사용 방법

public class Person {
	private int age; // age는 Person 클래스에서만 접근이 가능함. 
	
    void setAge(int num) {
    	if(num <= 0) {
        	System.out.println("잘못된 수를 입력하셨습니다. 1이상의 값으로 설정하세요.");
            return;
        } else {
        	age = num;
        }
    }
    
    int getAge() {
    	return age;
    }
}

public class Test01 {
	public static void main(String[] args) {
    	Person kim = new Person();
        kim.setAge(-30);  // 잘못된 값
        kim.setAge(30);
        System.out.println("kim의 나이는 " + kim.age() + "세입니다.");
    }
}

// 출력 결과
// 잘못된 수를 입력하셨습니다. 1 이상의 값으로 설정하세요.
// kim의 나이는 30세입니다.

getter & setter은 private 필드의 값을 대입하는 방법으로 setter 메소드를 사용하고, 반대로 객체 외부에서 private 필드의 값을 구하기 위해 getter 메소드를 사용한다.

 

 

728x90