컴퓨터는 잘못이 없다..
[JAVA]클래스란? (클래스, 객체, 필드, 메소드) 본문
[클래스의 용도]
1. 객체의 설계도 역할
- 객체는 값의 저장소(Field)와 기능(Method)으로 이루어져있다.
- 객체는 설계도 역할이라는 의미는 해당 클래스로 객체를 생성했을 때 그객체가 어떤 저장소와 어떤 기능을 갖게할지 정할 수 있다라는 의미이다.
2. Data Type의 역할
3. static 자원들을 감싸고 있는 역할
[예제코드]
Car.java (Car 클래스)
package test.mypac;
public class Car {
//필드(저장소)정의하기
public int cc; //아무것도 넣어주지 않으면? --> 자동으로 0이 들어가진다.
public String name; //아무것도 넣어주지 않으면? --> 자동으로 null이 들어가진다.
//main method에 변수를 선언해주고 아무것도 넣어주지 않으면 변수 생성이 아예 안됐다.
//하지만 클래스 내에 필드를 정의해주고 아무것도 넣어주지 않으면 자동으로 0과 null이 들어가진다.
//달리는 메소드(기능)
public void drive() {
System.out.println("달려요!");
}
//엉덩이를 따뜻하게 하는 메소드(기능)
public void hotHip() {
System.out.println("엉덩이가 따뜻해져요");
}
}
MainClass01.java
package test.main;
//다른패키지에 있는 클래스 이므로 import해주어야한다.
import test.mypac.Car;
public class MainClass01 {
public static void main(String[] args) {
//데이터타입이 Car인 car1변수를 선언하고 null값을 대입
// Car car1 = null;
// car1=10; //에러남
// car1=true; //에러남
// car1="kim"; //에러남
//에러나는 이유? 맞지않는 타입의 데이터를 대입했기 때문
String a=null;
// a=10; //에러남 --> 맞지 않는 데이터 타입 대입했기 때문에 에러남
// a=true; //에러남 --> 맞지 않는 데이터 타입 대입했기 때문에 에러남
a="kim"; //에러나지 않음
//Car type의 참조값을 담을 수 있는 빈 지역 변수 car1 만들기
Car car1=null;
//Car클래스로 객체를 생성(new)하고 그 생성된 객체의 참조값을 car1에 대입하기
car1=new Car(); //new라는 예약어와 함께 넣어준다.
//-> new Car()은 참조값을 의미함!(주소), 또한 생성자를 호출해줌!
//car1 지역 변수에 있는 참조값을 이용해서 메소드 호출하기
//.(dot)으로의 접근이 가능하다
car1.drive();
car1.hotHip();
//newCar()은 참조값을 의미하므로 이런식으로 쓰는 것도 가능하다!
new Car().drive();
new Car().hotHip();
}
}
[코드설명]
0. 다른 패키지에 있는 클래스는 import 해주어야 한다.
1.main 메소드 내 지역변수는 선언만 하고 대입하지 않으면 생성되지 않지만
클래스 내 필드는 선언만하고 대입하지 않으면 자동으로 초기화 된다.(각 타입에 맞는 초기값으로 초기화된다.)
따라서 지역변수는 변수 선언 후 초기값을 대입해주어야 하고 ex) int num=0; String name=null;클래스 내 필드는 선언 후 초기값을 대입해주지 않아도 된다. ex) public int num; , public String name;
▲ 따라서 지역변수는 초기화를 해주는게 좋고, 필드는 초기화를 하지 않아도 자동으로 초기화 된다!! ★★★
2.클래스타입의 초기화는 null로 해준다.
여기서 new Car() 자체는 참조값을 의미한다. (나중에 배우겠지만 생성자 호출을 의미하기도 한다.)
3.객체 생성과 Stack, Heap
new Car() 자체는 참조값을 의미한다.
즉, Car car1 = new Car() 을 하면 stack의 car1 지역변수에 new Car() 이라는 참조값을 대입하는 것!
다회용으로 쓸것이라면 ) Car car1 = new Car(); car1.~ 으로
일회용으로 쓸것이라면) Car().~으로 써도 무방하다.
4.객체 생성과 함수 호출
5.각각의 명칭
클래스 - 설계도 같은 역할, 나중에 객체의 필드와 메소드가 어떤 저장소와 기능을 하게 될지에 대해 정해준다.
객체 - new 클래스명()으로 생성한다.
지역변수 - new 클래스명()으로 생성한 참조값을 클래스타입 지역변수에 대입해 쓴다. ex) Car car = new Car()
필드 - 하나의 저장소
메소드 - 기능 역할
6.System.out.println() 깊게 파보기
[퀴즈]
Car 클래스를 이용하여 객체 2개 만들어보기
1. Car 객체를 생성해서 참조값을 car1, car2 지역변수에 담기
2. car1, car2에 들어있는 참조값을 이용해서 drive() 메소드 호출하기
3. car1, car2 안에 들어있는 참조값을 이용해서 name과 cc필드에 값 넣어주기
package test.main;
import test.mypac.Car;
/*
프로그래밍의 목적이 "달리기" 라면?
목적을 달성해보세요.
*/
public class MainClass02 {
public static void main(String[] args) {
//Car 객체를 생성해서 참조값을 car1이라는 지역변수에 담기
Car car1 = new Car();
//car1안에 들어있는 참조값을 이용해서 drive() 메소드 호출하기
car1.drive();
//car1안에 들어있는 참조값을 이용해서 name이라는 필드에 String type 참조값 넣어주기
car1.name= "프라이드";
//car1안에 들어있는 참조값을 이용해서 cc라는 필드에 int type의 값 넣어주기
car1.cc = 1000;
//car2 객체를 생성해보자!
Car car2 = new Car();
car2.drive();
car2.name= "소나타";
car2.cc = 2000;
}
}