package day6;
//자바에서는 클래스를 떠나 존재할 수 있는게 없다.
// 클래스 내의 함수 : 메소드
//메소드가 하는 일 : 입력을 가지고 어떤 일을 수행한 다음에 결과물을 내어놓는 것.
// 입력값 ---> 메소드 ----> 리턴값
public class Method1 {
// public int sum(int a, int b) {
// return a+b;
// } //평범한 메소드의 전형적인 예시.
// public String say() {
// return "Hi";
// } 입력 인수 부분을 나타내는 괄호 안이 비어있는 경우... 리턴으로 Hi라는 문자열을 돌려줌
// public void sum(int a , int b) {
// System.out.println(a+b);
// } 리턴값이 없는 경우.
// public void say() {
// System.out.println("Hi");
// } 당연히 둘다 없는 경우도 있음.
public static void main(String[] args) {
int a = 3;
int b = 4;
Method1 myTest = new Method1();
// int c = myTest.sum(a, b);
// String a = myTest.say(); //a에는 Hi라는 문자열이 대입.
// myTest.sum(3,4); 리턴값이 없는 메소드 : 객체.메소드명(입력인수1,입력인수2.....)
// myTest.say(); 둘다 없는 경우 : 객체.메소드명();
// System.out.println(c);
}
}
//결과값 : 7
return 의 또 다른 쓰임새...
public void say_nick(String nick) {
if ("fool".equals(nick)) {
return;
}
System.out.println("나의 별명은 "+nick+" 입니다.");
}
이 메소드에서 리턴값 없음.
* 문자열을 출력한다는 것과 리턴값이 있다는 것은 전혀 다른 말.
메소드의 리턴값은 오로지 return문에 의해서 생성.
위 메소드에서 입력값으로 fool 들어오면 문자열 출력 ㄴㄴ 하고 바로 메소드 빠져나감
**특정 조건에 따라 메소드 즉시 빠져나가고 싶으면 이렇게 return문 사용하면 됨..
자주 쓰이니까 기억해두자.
package day6;
//메소드에 값을 전달하는 것과 객체를 전달하는 것에는 차이 ㅇㅇ
// 한마디로, 메소드로 객체를 전달할 경우 메소드에서 객체의 객체변수(=멤버변수) 값 변경 가능.
class Updater{
public void update(int count) {
count ++;
}
} //전달받은 숫자를 하나씩 증가시키는 메소드.
public class Counter {
int count = 0; //Counter 라는 클래스는 count라는 객체변수 가지고 있음
public static void main(String[] args) {
Counter myCounter = new Counter(); //객체의 선언과 할당의 통합
System.out.println("Before update : " + myCounter.count);
//여기서 myCounter.count : 객체 안에 포함된 메서드 호출 .
Updater myUpdater = new Updater();
myUpdater.update(myCounter.count);
//myUpdater.update(myCounter);
//update 메소드 선언하는 부분도 바뀜.
//이렇게 수정하면 myCounter 객체의 count값이 1만큼 증가.
System.out.println("After Update : " + myCounter.count);
// Counter 클래스의 main메소드는 Counter 클래스에 의해 생성된 객체의 객체변수
// count값을 Updater 클래스를 이용하여 증가시킴.
}
}
//Counter라는 파일 내에 두개의 클래스(=Updater , Counter) 등장.
//하나의 파일 내에는 여러개의 클래스 선언 가능.
//하지만 만약 파일명이 Counter.java라면 Counter라는 클래스는 public으로 선언하라는 관례 존재
//결과값이 둘다 0이 나오는 이유?
// update 메소드는 값을 전달받았기 때문.
//여기서
//class Updater {
// public void update(Counter counter) {
// counter.count++;
// }
//}
//이전에는 int count와 같이 값을 전달받았다면
//이렇게 수정한 부분에서는 Counter counter과 같이 객체를 전달받도록 한것.
//콤마없이 나란히 쓴 것은 객체를 선언했다는 뜻..
정리..
메소드의 입력으로 객체를 전달받은 경우에는 메소드가 입력받은 객체를 그대로 사용
메소드가 객체의 속성값을 변경하면 메소드 수행 후 객체의 변경된 속성값이 유지.
'Language > JAVA' 카테고리의 다른 글
Constructor (0) | 2021.07.29 |
---|---|
JAVA Inheritance (0) | 2021.07.28 |
클래스와 메소드 (0) | 2021.07.27 |
method parameter, class, object (0) | 2021.07.27 |
basic quiz #1 (0) | 2021.03.25 |