It's going to be one day 🍀

안녕하세요! 매일 매일 공부하려고 노력하는 백엔드 개발자 지망생의 공부 흔적입니다.

Back-End/Java # 교육

[Java 교육] 메소드

2jin2 2024. 1. 31. 16:36

[공부 내용 정리]

 

생성자 오버로딩

클래스 내에 같은 이름의 함수를 여러개 선언하는 것.

하나의 메소드(혹은 생성자)이름으로 여러 기능을 담을 수 있음.

public class Car {
	String company;
	String model;
	int maxSpeed;

//1번 생성자
	Car(String company) {
		this.company = company;
	}

//2번 생성자
	Car(String company, String model) {
		this.company = company;
		this.model = model;		
	}

//3번 생성자
	Car(String company, String model, int maxSpeed) {
		this.company = company;
		this.model = model;		
		this.maxSpeed = maxSpeed;
	}
}
public class CarExample {

	public static void main(String[] args) {
	  Car sonata = new Car("현대");                 // 1번 생성자 이용
	  Car sportage = new Car("기아", "sportage");   // 2번 생성자 이용
	  Car gv80 = new Car("제네시스", "gv80", 300);   // 3번 생성자 이용
  }
}

메소드

메서드 : 클래스내에 구현된 함수

public class Car {
	String model

	void setModel(String model) {
		this.model = model
	}
}
public class CarExample {

	public static void main(String[] args) {
	  Car sonata = new Car();
		sonata.setModel("sonata");      // model 필드의 값을 대입	  
  }
}

 

Car 클래스에 추가된 setModel 메서드는 다음과 같은 형태의 메서드임

  • 입력 : String model
  • 출력 : void (’리턴값 없음’을 의미)

즉, 입력으로 model이라는 문자열을 받고 출력은 없는 형태의 메서드임.

 

리턴(return)문

메소드가 실행 후 리턴하는 값의 타입.

void 리턴타입 : 리턴값이 없을 경우

 

매개변수와 인수

매개변수 : 메서드에 저장된 입력값을 저장하는 변수

인수 : 메서드를 호출할 때 전달하는 입력값

public class Calculator {
  double divide(int x, int y) {     // x, y는 매개변수
		return x / y;	
  }

  public static void main(String[] args) {
	  Calculator calculator = new Calculator();
		calculator.divide(10, 20);      // 10, 20은 인수
  }
}

 

메서드 내에서 선언된 변수의 효력 범위

메소드 안에서 사용하는 변수의 이름을 메소드 밖에서 사용한 이름과 동일하게 사용한다면?

public class Calculator {
    void postfixOperator(int a) {
        a++;
    }

    public static void main(String[] args) {
        int a = 1;
        Calculator calculator = new Calculator();
        calculator.postfixOperator(a);
        System.out.println(a);
    }
}

→ 막상 실행해보면 1이라는 결과값이 나옴. 그 이유는

메소드에서 사용한 매개변수는 메소드 안에서만 쓰이는 변수이기 때문

즉, void posifixOperator(int a) 라는 문장에서 매개변수 a는 메소드 안에서만 쓰이는 변수이지 메소드 밖의 변수 a가 아님.

그러면 main 메소드 외부의 a값을 증가시키려면?

public class Calculator {
    int postfixOperator(int a) {
        a++;
	return a;
    }

    public static void main(String[] args) {
        int a = 1;
        Calculator calculator = new Calculator();
        a = calculator.postfixOperator(a);
        System.out.println(a);
    }
}

→ int posifixOperator(int a)를 이용해서 return 값을 받기로 함.

그리고 main에서 그 return 값을 a 에 받아옴. 그러면 a의 값은 다시 posifixOperator 의 return 값으로 대입됨. (즉, a에 1만큼 증가된 값으로 a값 변경)

 

this 활용하기

cal.postfixOperator(cal);

→ cal 객체를 이용하여 메소드를 호출할 경우 cal 객체를 전달할 필요가 없음.

왜냐면 this 키워드를 이용하여 객체에 접근할 수 있기 때문!

int postfixOperator(int a) {
        this.result++;
        return this.result;
    }

    int postfixOperator() {
        return ++this.result;
    }

→ this.result는 자신이 가지고 있는 result 필드라는것임.

this는 주로 생성자와 메소드 매개변수 이름이 필드와 동일할 경우, 혹은 인스턴스의 필드임을 명시하고자할 때 사용됨.


Dailu Quiz

Animal 클래스를 정의해주세요. 내부 구현은 자유입니다.

(정의된 필드, 메소드 외 추가 가능)

  • 필드
    • name
  • 생성자
    • 없음 (필요하면 선언해주세요)
  • 메소드
    • setName()
    • getName()
    • sleep()
package chapter06;

public class Animal {
    String name;
    int sleeptime;
    void setName(String name) {
        this.name = name;
    }
    void getName(){
        System.out.println("이 동물의 이름은 "+this.name+"입니다.");
    }

    void sleep(int x) {
        System.out.println(this.name+ "는 평균적으로 하루에 "+x+"시간을 잡니다.");
    }

    public static void main(String[] args) {
        Animal dog = new Animal();
        dog.setName("댕댕이");
        dog.getName();
        dog.sleep(5);

        Animal cat = new Animal();
        cat.setName("야옹이");
        cat.getName();
        cat.sleep(8);
    }
}

 

출력 결과