public class P3_method {
public static void main(String[] args) { // void : main이라는 이름을 가진 매서드 (return은 없다)
Car c1 = new Car("현대", 5, 10);
// c1.doSomeThing(); // 매서드 호출 문법
// 호출할때마다 doSomeThing 시행이 주르륵 된다.
// c1.speed; 왜안되노
System.out.println(c1.name);
// 아 안되는 이유 : 저건 호출 문법이야ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 매서드만 호출되겠지? ㅇㅋㅇㅋ
c1.run(); // 현대는5의 속도로 달린다
c1.run();
c1.run();
c1.run(); // 현대는2의 속도로 달린다
Car c2 = new Car("마르세데스", 10, 20); // 매개 변수를 초기화 시킬 수 있다는게 이런거겠구나
c2.run(); // 마르세데스는10의 속도로 달린다
c2.run();
c2.run();
c2.run();
c2.run(); // 마르세데스는6의 속도로 달린다
int a = c2.doSomeThing(10, 2); // 홀수가 아니니까 syso출력, return a+b해서 12
System.out.println(a);
a = c2.doSomeThing(5, 3); // 5가 홀수니까 바로 return해서 -1 출력
System.out.println(a);
// ★★★★ 매개변수의 초기화
// doSomeThing() 메서드는 호출될 때마다 속도를 증가시키고 연료를 감소시키는 기능을 수행
// 이렇게 하면 c1과 c2 인스턴스의 속성이 변경되며, 메서드를 호출할 때마다 결과가 달라지겠지
c1.test(20);
// int k = c1.test(30); --> void니까 int로 호출하면 type mismatch가 뜨지
}
class Car{
// 1. 속성
String name;
int speed;
int fuel;
// 2. 생성자
Car(String name, int speed, int fuel ){
this.name = name;
this.speed = speed;
this.fuel = fuel;
}
// 3. 메서드 : 함수와 비슷한 개념을 클래스 내부에 구현하는 것
// ---> 함수 로직에 이름을 붙여서 묶은거!!!!!!!!
// 문법 : 리턴타입 매서드명(N개의 매개변수) {코드코코코ㅗ코코드....}
// ---> 리턴타입 존재시, 항상 그에 맞는 값을 리턴해줘야한다
// ---> 리턴이 필요없는 경우 : void를 쓰자
// int add(int a, int b) {
// a,b : 매개변수(parameter) / add : 메서드명 / int : 리턴타입
// return a + b;
// }
void oiling(int amount) {
fuel += amount;
}
boolean run() {
if(fuel <= 0) {
System.out.println("경고 ] 기름이 없습니다. 주유하세요");
return false;
// 달리면 안되니까 return으로 탈출!
}
System.out.println(name + "는" + speed + "의 속도로 달린다");
// 원래는 this.name인데 생략가능
speed--;
return true;
}
int doSomeThing(int a, int b) { // 이건 예시긴한데, 응집도가 낮다 (매서드면 매서드 답게 속성에서 정의한 this들을 잘 활용해야한다)★★★★★★★★
test(b); // 같은 클래스 내에 있는 것은 이렇게 써도 호출이 되겠지...
if(a % 2 == 1) {
return -1; // return을 만나면 if문을 탈출한다 (+ 그 값을 return해준다) ★★★★
}
System.out.println("이렇게 쓰면");
System.out.println("매서드를 정의만 한거야");
System.out.println("호출을 해야 시행이 된다구여~");
// return "안녕";
// -> 이것도 타입이 같아야해 (리턴타입이 int니까 문자는 안된다고)
return a+b;
}
// return 숫자 말고 --> return 어떠한 메서드?호출하고싶으면
// int processedValue = inputValue.length();
// return processedValue; 이런느낌
void test(int a) { // return타입이 void인 경우 return이 없어도 된다
// return 이후에 문자열, 숫자는 안되고, return;만 되징
if(a < 10) {
return;
}
System.out.println("테스트 호출됨");
}
}