클래스와 객체
클래스란?
정수형, 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);
}
}