언어/java
[Java] - 클래스
니푸
2023. 10. 2. 04:20
클래스와 객체
class Animal {
} // 보통 자바에서는 따로 파일을 만들지만 가독성상 한 파일에 쓰겠음
public class Sample {
public static void main(String[] args) {
Animal cat = new Animal();
}
}
- Animal class 는 가장 간단한 클래스 형태
- 껍데기 뿐일지라도 객체를 만드는 기능!
- 객체는 다음과 같이 만든다.
class Animal {
}
public class Sample {
public static void main(String[] args) {
Animal cat = new Animal(); // 여기!
}
}
- new는 객체를 생성할 때 사용하는 키워드
- cat 은 Animal 클래스의 인스턴스 이면서 하나의 객체!
- 객체와 인스턴스의 차이는 무엇일까?
클래스에 의해서 만들어진 객체를 인스턴스라고도 한다. 그렇다면 객체와 인스턴스의 차이는 무엇일까? Animal cat = new Animal() 이렇게 만들어진 cat은 객체이다. 그리고 cat이라는 객체는 Animal의 인스턴스이다. 인스턴스라는 말은 특정 객체(여기서는 cat)가 어떤 클래스(여기서는 Animal)의 객체인지를 관계 위주로 설명할 때 사용된다. 즉, ‘cat은 인스턴스’보다는 ‘cat은 객체’라는 표현이, ‘cat은 Animal의 객체’보다는 ‘cat은 Animal의 인스턴스’라는 표현이 훨씬 잘 어울린다.
- 비유하자면 클래스는 과자모양틀, 객체는 그렇게 찍어낸 과자!
- 다음과 같이 무수히 많은 Animal 클래스를 만들 수 있다.
Animal cat = new Animal();
Animal dog = new Animal();
Animal horse = new Animal();
...
여기서 설명한 내용이 이해되었다면 클래스는 70% 이상 알았다 할 수 있다. 클래스는 결코 어렵지 않다.
객체 변수란?
- 앞서 나온 Animal 클래스를 좀 더 발전시켜보자.
class Animal {
String name;
}
public class Sample {
public static void main(String[] args) {
Animal cat = new Animal();
}
}
- Animal 클래스에 name 이라는 String 변수를 추가했다. 이렇게 클래스 내에 생성된 변수를 객체 변수(instance variable) 라고 한다.
- 즉, 클래스에 의해 생성되는 것은 **객체**, 클래스 내에 선언된 변수는 **객체 변수**
- 이러한 객체 변수는 변수, 멤버 변수, 속성 이라고도 부른다.
- 이제 객체 변수를 사용해 보자. 객체 변수는 객체.객체변수 형식으로 접근할 수 있다.
- class Animal { String name; } public class Sample { public static void main(String[] args) { Animal cat = new Animal(); System.out.println(cat.name); // 객체 변수 프린트 } } // null
- 출력 결과 null 이 나온다. 이는 값이 할당되지 않은 상태를 뜻한다. 객체변수로 name 을 선언했지만 아무런 값도 대입하지 않았기 때문이다.
메서드란?
- 앞서 객체 변수에 접근하는 방법을 배웠고 이제는 객체 변수에 값을 대입하는 방법에 대해 알아보자.
- 방법은 여러가지가 있지만 여기서는 메서드를 이용하는 방법에 대해 알아본다.
- 클래스에 선언된 변수는 객체 변수 이고, 클래스 내에 구현된 함수는 메서드이다.
class Animal {
String name;
// 메서드!
public void setName(String name) {
this.name = name;
}
}
public class Sample {
public static void main(String[] args) {
Animal cat = new Animal();
System.out.println(cat.name);
}
}
- 메서드를 호출하는 방법 역시 객체.메서드 이다.
class Animal {
String name;
public void setName(String name) {
this.name = name;
}
}
public class Sample {
public static void main(String[] args) {
Animal cat = new Animal();
cat.setName("boby"); // 메서드 호출
System.out.println(cat.name);
}
}
- 근데 저 this 는 무엇일까?
- 위 코드에서 this.name = name 은 cat.name = "body" 와도 같은 뜻이다.
객체 변수는 공유되지 않는다.
class Animal {
String name;
public void setName(String name) {
this.name = name;
}
}
public class Sample {
public static void main(String[] args) {
Animal cat = new Animal();
cat.setName("boby"); // 메서드 호출
Animal dog = new Animal();
dog.setName("happy");
System.out.println(cat.name);
System.out.println(dog.name);
}
}
- 위 코드를 출력하면 다음과 같다.
boby
happy
- 즉, 객체 변수는 각 객체마다 독립적임을 알 수 있다.