카테고리 없음

클래스와 객체

casylm 2024. 6. 30. 17:28

클래스란?

정수형, string 형 처럼 하나의 데이터 타입을 의미한다. 클래스는 사용자 데이터 타입을 만들기 위한 설계도와 같은 개념으로 클래스를 통해서 사용자가 원하는 종류의 데이터 타입을 마음껏 정의할 수 있다. 클래스는 변수와 메소드를 가지고 있으며 ,각각 속성과 행위의 개념을 나타낸다. 

 

클래스는 왜 필요할까?

회원 관리 프로그램을 작성한다고 가정해보자. 각각의 회원은 이름, 나이, 이메일, 휴대폰 번호 등의 정보를 가지고 있다. 회원 2명을 생성해 보자.

package ClassMethod;

public class Main1 {
    public static void main(String[] args) {
        String Member1Name = "회원1";
        int Member1Age = 18;
        String Member1Phone = "01012341234";
        String Member1Email = "member1@naver.com";

        String Member2Name = "회원2";
        int Member2Age = 23;
        String Member2Phone = "01043214321";
        String Member2Email = "member2@gmail.com";
    }
}

다음과 같이 생성이 가능하다. 위 코드에서는 회원이 늘어날 때마다 회원 변수를 선언해야 하는 불편함이 발생한다.

이를 배열을 통해 개선해보자.

package ClassMethod;

public class MainArray {
    public static void main(String[] args) {
        String[] memberNames = {"회원1", "회원2"};
        int[] memberAges = {18, 23};
        String[] memberPhones = {"01012341234","01043214321"};
        String[] memberEmails = {"member1@naver.com","member2@gmail.com"};
    }
}

회원 변수를 매번 선언하는 불편함을 줄었다. 회원의 이름과, 휴대편 번호, 나이를 변경해보자.

package ClassMethod;

public class MainArray {
    public static void main(String[] args) {
        String[] memberNames = {"회원1", "회원2"};
        int[] memberAges = {18, 23};
        String[] memberPhones = {"01012341234","01043214321"};
        String[] memberEmails = {"member1@naver.com","member2@gmail.com"};
        
        memberNames[0] = "회원3";
        memberAges[0] = 17;
        memberPhones[0] = "01023451235";
    }
}

회원 정보가 많아지면 다음과 같이 정보 변경 시 빠뜨리는 값이 있는지 신경써야 할 것 이다. 혹은 회원 삭제 시 일부 정보가 삭제되지 않을 수 있는 위험성도 있다.

 

이를 해결하기 위해서는?

회원의 정보들을 한번에 관리 할 수 있는 틀을 만든다. 이것이 클래스이다. 회원이라는 개념을 만들고, 관련 정보들을 한 곳에서 관리해보도록 하자.

package ClassMethod;

public class Member {
    String name;
    int age;
    String phoneNumber;
    String email;
}

 

회원 클래스를 사용하여 회원 객체를 생성하고, 회원과 관련된 모든 속성을 한 클래스에서 관리 할 수 있다.

package ClassMethod;

public class Main2 {
    public static void main(String[] args) {
        Member member1 = new Member();
        member1.name = "회원1";
        member1.age = 16;
        member1.phoneNumber = "01012341234";
        member1.email = "member1@naver.com";

        Member member2 = new Member();
        member2.name = "회원2";
        member2.age = 18;
        member2.phoneNumber = "01043214321";
        member2.email = "memver2@gmail.com";
    }
}

 

클래스의 구조

 

 

객체란?

클래스를 통해 실제 메모리에 만들어진 실체. 예약어 new 를 사용하여 생성 할 수 있다.

Member member1 = new Member();

 

객체에 접근하는 방법은?

객체에 값을 읽고 쓰기 위해서는 우선 객체에 대한 접근 방식을 알아야 한다. 자바가 메모리 어딘가에 생성한 객체에 접근을 하기 위해서는 그 위치값을 알아야 한다. new를 통해 객체를 생성하면 자바는 생성된 객체의 위치값(주소)를 반환한다. 이때 우리는 이 값을 변수에 저장해 추후 객체에 접근 시 사용하는 것이다. 이것을 참조값이라고 한다.

 

클래스와 객체의 관계

사용자 타입을 만들기 위한 설계도를 클래스라 하고, 이 설계도를 이용하여 실제 메모리에 만들어진 실체를 객체 혹은 인스턴스라 명칭한다.

 

객체와 인스턴스

둘 다 클래스로 부터 나온 실체라는 개념에서 유사하다. 다만, 인스턴스는 객체보다 좀 더 관계에 초점을 둔 용어라고 생각하면 된다. 특정 클래스로 부터 생성된 객체임을 강조 할 때 인스턴스라는 개념을 사용한다. 즉, 모든 인스턴스는 객체지만 특정 클래스로부터 그 객체가 '생성' 되었음을 강조하고 싶을 때 우리는 인스턴스라는 용어를 사용한다.

 

객체의 생성과 사용법

객체의 생성

 

객체에 값을 대입하고 값에 접근하는 방법을 알아보자

public class Main1 {
    public static void main(String[] args) {
        Member member = new Member();

        // 객체 값 대입
        member.name = "김길동";
        member.age = 20;
        member.phoneNumber = "01022342532";

        // 객체 값 사용
        System.out.println("이름:" + member.name);
        System.out.println("나이:" + member.age);
    }
}