프로그래밍 언어/Java

[Java] 클래스와 객체

happy_life 2022. 6. 22. 11:12

목차

1. 클래스와 객체

2. 객체와 인스턴스

3. 객체의 구성요소 - 속성과 기능

4. 인스턴스의 생성과 사용

5. 객체배열

 

 

 

 

1. 클래스와 객체

클래스는 객체를 정의해 놓은 것으로, 객체를 생성하는 데 사용된다.

객체는 클래스에 정의된 대로 메모리에 생성된 것을 의미한다.

 

클래스는 제품의 설계도

객체는 제품 

 

2. 객체와 인스턴스

클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화라고 한다. 어떤 클래스의 객체를 그 클래스의 인스턴스라고 한다. 

 

인스턴스와 객체는 같은 의미이지만, 객체는 모든 인스턴스의 대명사이고, 인스턴스는 특정 클래스의 객체를 의미한다는 점에서 약간의 차이가 있다.

 

 

3. 객체의 구성요소 - 속성과 기능

객체는 속성과 기능이라는 두 요소로 구성되어 있다. 클래스에는 객체의 모든 기능과 속성이 정의되어 있다. 이로부터 객체를 생성하면, 클래스에 정의된 기능과 속성을 가진 객체가 만들어진다. 속성과 기능은 다양한 이름으로 불리는데, 그 이름들은 아래와 같다.

속성 멤버변수 특성 필드 상태
기능 메서드 함수 행위  

 

코드 예제

public class Member {
    // 멤버 변수 = 특성 = 필드 = 상태
    long id;
    String name;

    // 메서드 = 함수 = 행위
    void idUp() {
        ++id;
    }
    void idDown() {
        --id;
    }
}

 

4. 인스턴스의 생성과 사용

인스턴스는 클래스 객체이름 = new 클래스();로 생성한다.

연산자 new에 의해 클래스의 인스턴스가 메모리의 빈 공간에 생성되게 된다.

그 다음에 대입 연산자(=)에 의해 생성된 객체의 주소값이 참조변수 (객체이름)에 저장된다.

객체의 주소를 참조하면 객체의 멤버변수와, 메서드가 메모리에 저장되어있게 된다.

 

코드예제

public class UseInstance {
    public static void main(String[] args) {
        // 객체 생성 
        Member member = new Member();
        System.out.println("member.id = " + member.id);
        // member.id = 0
        
        // 객체 id 올리는 메서드 사용
        member.idUp();
        System.out.println("member.id = " + member.id);
        // member.id = 1
    }
}

* 참고

각각의 객체마다 멤버변수는 각자의 메모리 주소에 독립적으로 가지고 있는 것이다.

 

코드예제

public class UseInstance {
    public static void main(String[] args) {
        // 객체 생성
        Member member = new Member();
        System.out.println("member.id = " + member.id);
        // member.id = 0

        // 객체 id 올리는 메서드 사용
        member.idUp();
        System.out.println("member.id = " + member.id);
        // member.id = 1

        // 객체2 생성
        Member member2 = new Member();
        System.out.println("member2.id = " + member2.id);
        // member2.id = 0
        // member와는 독립적인 것이므로 1 이 아니다.
    }
}

 

member의 주소 0x100   <--------------------- member

 

 

 

 

 

member2의 주소 0x200 <---------------------- member2

 

 

 

 

 

 

 

만약 member = member2 코드를 작성한다면 둘다 참조변수이므로 member의 주소를 가리키던 member는 member2의 주소를 가리키게 된다. 이제 기존에 0x100을 가리키는 것은 아무것도 없게 되고 그 주소의 member 객체는 사용할 수 없게 된다.

 

 

5. 객체 배열

객체도 배열로 다루는 것이 가능하고 이를 객체 배열이라고 한다.

 

코드예제

public class InstanceArrayEx {
    public static void main(String[] args) {
        // 참조 변수 배열을 생성하기
        Member[] memberArray = new Member[3];

        // 각 요소에 객체 생성후 주소를 저장
        memberArray[0] = new Member();
        memberArray[1] = new Member();
        memberArray[2] = new Member();

        // memberArray의 각각 member의 id를 0, 1, 2로 만들기
        memberArray[1].idUp();
        memberArray[2].idUp();
        memberArray[2].idUp();

        //출력해보기
        System.out.println("memberArray[0].id = " + memberArray[0].id);
        System.out.println("memberArray[1].id = " + memberArray[1].id);
        System.out.println("memberArray[2].id = " + memberArray[2].id);
        //memberArray[0].id = 0
	//memberArray[1].id = 1
	//memberArray[2].id = 2
    }
}

 

'프로그래밍 언어 > Java' 카테고리의 다른 글

[Java] 오버로딩이란?  (0) 2022.06.22
[Java] 변수와 메서드  (0) 2022.06.22
[Java] 배열(Array)  (0) 2022.06.21
[Java] 자바 연산자(Java Operator)  (0) 2022.06.20
[Java] 비트와 바이트 / 2의 보수법  (0) 2022.06.19