드디어 등장했다. 이론적인 얘기.
class Calculator {
int result = 0;
int add(int num) {
result += num;
return result;
}
}
public class Sample {
public static void main(String[] args) {
Calculator cal1 = new Calculator(); // 계산기1 객체를 생성한다.
Calculator cal2 = new Calculator(); // 계산기2 객체를 생성한다.
System.out.println(cal1.add(3));
System.out.println(cal1.add(4));
System.out.println(cal2.add(3));
System.out.println(cal2.add(7));
}
}
객체(cal1, cal2)를 생성해서 만드는 방식 --> 지금까지 new를 이용해서 생성했던 ArrayList 등과 동일하다.
class를 작성해두고, 이를 복사해서 쓰는 방식이라고 이해하면 될 것 같다.
보통 클래스를 만들 때는 "하나의 파일에 하나의 클래스"를 만든다.!!
예시에서는 편하게 설명하기 위해 하나의 파일 안에 여러개의 클래스를 작성한다.
(즉, 하나의 파일에 여러 개의 클래스가 있어도 되지만 파일 분리를 해주는 것이 좋다.)
class Animal {
}
public class Sample {
public static void main(String[] args) {
Animal cat = new Animal();
}
}
비어있는 클래스도 객체를 만들 수 있다.
여기서 주의해야할 점은, cat은 객체 = cat은 Animal의 인스턴스 이다.
"인스턴스"는 관계를 의미하기 때문에, 표현을 주의하자.
class Animal {
String name;
}
public class Sample {
public static void main(String[] args) {
Animal cat = new Animal();
System.out.println(cat.name); //null
}
}
이런식으로 객체명.내부변수를 통해 해당 값에 접근할 수 있다.
(위에서는 아무 값도 없기 때문에 null 출력)
class Aniaml {
String name;
public void setName(String name) {
this.name = name; //this == Animal 의미, 메서드가 속한 클래스의 name이라는 객체 변수를 찾아 해당 변수에 값을 할당한다.
}
}
public class Sample {
public static void main(String[] args) {
Animal cat = new Animal(); //cat이라는 객체 생성
System.out.prinln(cat.name); //null 출력
cat.setName("boby"); //생성된 cat 객체의 name 객체변수에 boby 입력
System.out.prinln(cat.name); //"boby" 출력
Animal dog = new Animal(); //dog이라는 객체 생성
dog.setName("happy"); //새로운 dog라는 객체에 happy 입력
System.out.println(dog.name); // "happy" 출력
}
}
클래스의 객체 변수 값은 독립적으로 유지된다. 즉, 새로운 객체를 생성해서 해당 객체에 값을 넣어주면, 다른 객체에는 영향을 끼치지 않는다. --> 클래스 존재의 이유
(but, static을 이용하면 객체 변수를 공유할 수 있다.)