자바는 객체지향 언어라고 해요
클래스는 상태와 행위가 있어야 한다고 했다.
모든 사물에도 "상태"와 "행위"가 있다.
자동차의 예를 들어보자. Car클래스를 만들자.
public class Car {
public Car() {
}
}
car 클래스 선언문 밑에 메소드 같이 생긴 것은 뭘까?
이것을 생성자라고 부른다.
생성자는 Car 클래스의 객체를 생성할 때 필요한데,
이 Car 클래스의 주행중인 상태, 주행한 상태, 차 색깔의 상태 등을 다음과 같이 변수로 나타낼 수 있다.
Public class Car{
public Car() { //생성자
}
int speed; //상태
int distance;
String color;
}
이렇게 변수를 지정함으로써 여러분들은 클래스의 상태를 정할 수 있다.
그렇다면, 행위는 어떻게 지정할까?
public class Car {
int speed;
int distance;
String color;
public Car() {
}
public void speedUP() {
}
public void breakDown() {
}
}
속도를 올리는 speedUp() 메소드와 속도를 줄이는 breakDown() 메소드로 클래스의 상태를 변경하는 행위를 지정할 수 있다.
public class SmartPhone {
int button;
int touch;
public SmartPhone() {
}
public phoneOn() {
}
public phoneOFF() {
}
}
내가 만든 SmartPhone 클래스
클래스와 객체는 구분하셔야 해요
앞 절에서 만든 Car 클래스는 말 그대로 "클래스"이다.
"포르쉐"라는 차가 있더라도 , 개똥이의 포르쉐와 소똥이의 포르쉐는 다르다. 주행한 거리도 다를 것이고, 색도 다를 수 있고, 등록번호도 가르다. 그러면 어떻게 이 둘의 차를 구분하고 나타낼 수 있는가?
-> 객체로 만들면 됩니다.
이렇게 각각의 실제 사물을 나타내기 위한 것을 "객체" 혹은 "인스턴스"라고 한다.
자동차를 관리하는 CarManager라는 클래스를 만들고, 그 안에 다음과 같이 main() 메소드를 만들자.
public class CarManager {
public static void main(String args[]) {
//앞으로 여기에 코드가 들어감
}
}
여기에서 개똥이의 차와 소똥이의 차를 나타내기 위해서는 Car 클래스를 이용하여 각각의 객체를 생성하면 된다.
Car dogCar = new Car();
Car cowCar = new Car();
이렇게 해주면 객체가 생성된다.
그런데 여기에 "Car()"이라고 하는 메서드 같이 생긴 "생성자"를 사용하고 있는 것을 볼 수 있다.
생성자는 객체를 생성하기 위한 거의 유일한 도구 이다.
그런데 Car()처럼 매개변수가 없는 생성자는
여러분들이 만들지 않아도 괜찮다.
매개변수가 없는 생성자를 "기본 생성자"라고 하며,
기본 생성자는 자동으로 만들어진다.
도대체 객체는 뭘까?
"car"이라는 클래스는 그냥 껍대기일 뿐이고, 여러분들이 new 라는 예약어를 통해서 생성자인 Car()를 호출하면
dogCar, cowCar라는 객체가 생성된다.
즉, 클래스는 대부분 그 자체만으로 일을 할 수가 없고, 객체를 생성해야만 우리가 일을 시킬 수 있다.
cowCar.speedUp();
다시 말해서
소똥이의 차의 속도를 높이고 싶다면?
cowCar객체를 만들고,
그 객체의 speedUp()메소드를 불러주면 된다.
여러분들이 메소드를 만들면, 그 메소드는 저절로 아무 때나 수행되지 않는다.
즉 여러분들이 메소드들을 불러줘야만 한다.
public class CarManager {
public static void main(String args[]) {
Car dogCar = new Car();
Car cowCar = new Car();
cowCar.speedIp();
}
}
public class Car {
int speed;
int distance;
String color;
public Car() {
}
public void speedUP() {
}
public void breakDown() {
}
}
여기서 speedUp() 메소드와 breakdown() 메소드는 구현이 되지 않았다.
구현조건은 다음과 같다.
- speedUp() 메소드를 호출하면 speed는 5씩 증가한다.
- breakDown() 메소드를 호출하면 speed는 10씩 감소한다.
먼저 speedUp() 메소드를 어떻게 구현할 지 직접 생각해보자.
pubic void speedUp() {
speed=speed+5;
}
정답!!
breakdown()메소드는 어떻게 구현해야할 까?
public void breakdown() {
speed=speed-10;
}
다른 메소드를 만들어보자.
public int getCurrentSpeed() {
return speed;
}
이제 완성된 Car클래스를 갖고 만든 객체의 속도를 증가시키고 감소시켜보자.
public class CarManager {
public static void main(String args[]) {
Car dogCar = new Car();
Car cowCar = new Car();
cowCar.speedUp();
dogCar.speedUp();
System.out.println(dogCar.getCurrentSpeed());
}
}
계산기 클래스를 만들어보자.
'JAVA' 카테고리의 다른 글
자바의 신 4장_ [변수] 정보를 어디에 넣고 싶은데 (0) | 2023.01.29 |
---|---|
3장 자바를 제대로 알려면 ..-2 (0) | 2023.01.28 |
2장 Hello God Of Java_2 (0) | 2023.01.27 |
2장 Hello God Of Java (0) | 2023.01.26 |
1장 프로그래밍이란 무엇인가?-2 (0) | 2023.01.25 |