컴퓨터를 전혀 모르는 내 친구가 물어봤다. 회사에서 들었는지.
"자바에서 클래스, 객체, 인스턴스가 뭐야? 왜 쓰는겨??"
난감했다. 자바를 해왔고, 꽤 자신있다고 생각했는데 말이다.
다 내 오만이었다.
그에게 설명해주려고 공부해본다.
클래스
클래스는 무엇인가? 그냥 순수하게 학급, 반, 수업 등의 뜻이 떠오른다.
또는 자동차 브랜드 벤*의 클래스 시리즈가 생각난다. 영어를 모국어처럼 사용하는 이들은 이러한 어떤 그들만의 뉘앙스로 쉽게 생각할 수도 있을 것 같은데 나는 토종 한국인이라 "클래스"가 풍기는 뉘앙스를 알아차리는데 꽤 오랜 시간이 걸렸다. "불 좀 주라" 했을 때, 라이터를 달라는 뜻인것을 우리 한국인은 안다. 하지만 미국인이라면 그 뉘앙스를 알아차리기 힘들 수 있다.
객체지향 언어에서는 소프트웨어적으로 객체를 구현하기 위해 클래스를 활용한다. 클래스가 없다면 객체도 만들지 못한다. 클래스는 객체의 속성과 기능을 코드로 구현한 것이다. 이는 우리의 관점 말고 소프트웨어의 관점에서 보면 객체를 만들기 위한 설계도이다. 이 클래스는 객체의 이러한 속성과 이런 기능을 코드로 구현해놨구나.
User 클래스를 만들어보자.
class User{
int age;
String name;
}
User라는 클래스를 만들었다. 이게 클래스다. 앞으로 소프트웨어 내에서 이 클래스를 활용하여 객체를 만들게 된다.
이 클래스를 통해 만들어진 객체는 나이와 이름이라는 속성을 가지고 있다. 이게 멤버 변수다.
속성과 기능이라고 했으니 기능도 만들어보자.
class User{
int age;
String name;
void SignUp(){
System.out.println(this.name + "회원가입이 완료되었어요");
}
}
SignUp같은 걸 메소드라고 한다. User라는 클래스 안에 정의한 함수는 그 클래스를 통해 만들어진 객체만 사용할 수 있다.
객체
참으로 실제로 사용해 본적이 없는 단어다. 그냥 수능 국어지문에나 나올 법한 단어다.
소프트웨어 세계에서의 객체는 속성과 기능을 가지고 있다.
객체는 소프트웨어 세계에 구현할 대상이다. 클래스에 선언된 모양 그대로 생성된다.
객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖는다.
클래스의 타입으로 선언되었을 때 객체라고 부른다.
인스턴스
소프트웨어 세계에 구현된 실체이다.
즉, 객체를 소프트웨어에 실체화하면 그것을 인스턴스라고 부른다.
실체화된 인스턴스는 메모리에 할당된다.
/* 클래스 */
public class User{
......
}
public class Main{
public static void main(String[] args){
User me, you; // 객체
me = new User(); // 인스턴스화, me는 User클래스의 인스턴스가 되었다.
}
}
'Computer Science > JAVA' 카테고리의 다른 글
[JAVA] 클래스 메서드, 인스턴스 메서드 (0) | 2022.02.04 |
---|---|
[JAVA] 클래스 변수, 인스턴스 변수, 지역 변수 (0) | 2022.02.04 |
[JAVA] 추상클래스와 인터페이스의 차이 (0) | 2022.01.26 |
[JAVA] StringTokenizer (0) | 2021.11.14 |
[JAVA] Priority Queue (0) | 2021.10.30 |
댓글