멋쟁이사자처럼
클래스(class)
h_jinnny
2024. 3. 20. 22:21
- 클래스는 기본적으로 도면이라고 생각하면된다
- 클래스를 인스턴스화 하면 객체가 되는 것이다.
<예시>
클래스 : 자동차를 만드는 도면
객채 : 도면을 가지고 만든 나의 자동차
<Dog클래스 코드>
public class Dog {
String breed;
int age;
String color;
public Dog() {
//기본 생성자
}
public Dog(String breed, int age, String color) {
this.breed = breed;
this.age = age;
this.color = color;
}
public Dog(String breed, String color) {
this.breed = breed;
this.color = color;
}
//메소드
//접근제한자 리턴타입 메소드명 (매개변수들...)
static void bark(){
System.out.println("Woof!");
}
void displayInfo(){
System.out.println("Breed: " + breed + " Age: " + age + " Color: " + color);
}
//getter, settter
public String getBreed() {
return breed;
}
public int getAge() {
return age;
}
public String getColor() {
return color;
}
public void setBreed(String breed) {
this.breed = breed;
}
public void setAge(int age) {
this.age = age;
}
public void setColor(String color) {
this.color = color;
}
}
<설명>
강아지 클래스이다. 즉, 강아지를 만들 수 있는 도면을 만든 것이라고 생각하면 된다.
기본적으로 생성자를 만들지 않으면 자바에서는 기본 생성자를 제공해준다.
위의 코드에서는 “기본생성자”, “품종과 나이, 색깔이 모두 들어간 생성자”, “품종과 색깔만 들아간 생성자” 3 종류가 있다.
위의 메소드를 보면 bark()와 displayInfo()가 있다.
bark()는 static이 붙은 클래스 메소드이다.
displayInfo()는 static이 붙지 않은 인스턴스 메소드이다.
static이 붙은 클래스 메소드는 객체를 생성하지 않아도 사용이 가능하다.
하지만 static이 붙지 않은 인스턴스 메소드는 객체를 생성해야만 사용이 가능하다.
그러면 아래 객체를 생성하는 코드를 보자.
<코드>
public class DogTest {
public static void main(String[] args) {
Dog.bark();
Dog myDog = new Dog(); //Dog 타입의 myDog를 인스턴스화
myDog.setAge(3);
myDog.setBreed("말티즈");
myDog.setColor("흰색");
myDog.age=6;
myDog.displayInfo();
Dog myDog2 = new Dog("포메", 4, "검정색");
myDog2.displayInfo();
Dog myDog3 = new Dog("포메", "흰색");
myDog3.displayInfo();
}
}
<설명>
위의 코드는 Dog클래스의 객체를 생성해서 사용하는 DogTest클래스이다.
bark() 메소드를 보면 객체를 생성하지 않고 Dog클래스에 바로 접근해서 사용이 가능하다.
위에서 언급했듯이 static 키워드가 붙은 클래스 메소드이기 때문이다.
하지만 displayInfo() 메소드는 객세를 생성한 후 객체에 접근해서 사용이 가능하다.
static이 붙지 않은 인스턴스 메소드이기 때문이다.