[Java 기초]01. 클래스 및 객체 생성과 사용법
우선 용어부터 알아보자.
객체(object)
-
- 객체(object)란 클래스의 인스턴스나 배열을 말한다
- → 객체는 모든 인스턴스를 포괄하는 넓은 의미를 가지고,
인스턴스 (Instance)
객체와 인스턴스는 크게 차이를 보이지는 않는다. 따라서 두 용어를 혼용하여 사용하기도 한다.
-
- → 객체는 모든 인스턴스를 포괄하는 넓은 의미를 가지고,
- → 인스턴스는 해당 객체가 어떤 클래스로부터 생성된 것인지를 강조한다.
클래스(Class)
-
- 객체지향 프로그래밍에서 클래스는 멤버 변수와 메서드를 가지는 객체를 만들기 위한 확장이 가능한 코드 양식을 말한다
- 쉽게 말해, 객체를 찍어내기 위한 틀, 설계도라고 보시면 됩니다
[한줄 정리]
-
- 객체 : 소프트웨어 세계에 구현할 대상이며 속성과 기능을 가지는 프로그램 단위를 뜻 한다.
- 클래스 : 객체에 속성과 기능을 넣어줄 설계도를 뜻 한다.
- 인스턴스 : 클래스에 따라 메모리상에 구현된 실체를 뜻 한다.
1. 멤버변수(필드) 선언
클래스는 [멤버변수(필드)]와 [멤버함수(메소드)]로 구성되어 있다.
→ 그렇기에 우선적으로 멤버 변수를 선언 해줄것이다.
1-1. 멤버변수 선언 받기
- Person 클래스 생성
package Classes;
public class Person {
private String name; // 이름 : 홍길동
private int age; // 나이 : 10
private String addr; // 주소 : 인천 미추홀구 인하로 100
}
해당 코드 처럼 String형으로 이름을 선언 할 수 있지만,
Name클래스를 생성하여 성, 이름을 나눠서 선언 받을 것이다.
Person.java
package Classes;
public class Person {
private String name; // 이름 : 이준환
private int age; // 나이 : 24
private String addr; // 주소 : 경기도 군포시 산본천로 34
}
Name.java
package Classes;
public class Name {
private String firstName; // 성
private String lastName; // 이름
}
1-2. 위 코드를 처리하기 위한 생성자를 만들 것이다.
→ 이클립스 기준 “생성자” 생성 단축키 : “Alt + Shift + S” → Generate Constructor using Fields… 클릭
생성자 : Constructor
Name.java
package Classes;
public class Name {
private String firstName; // 성
private String lastName; // 이름
public Name(String firstName, String lastName) {
super();
this.firstName = firstName;
this.lastName = lastName;
}
}
1-3. 위 코드의 Getter, Setter를 만들 것이다.
→ 이클립스 기준 “Getters&Setters” 생성 단축키 : “Alt + Shift + S” → Generate Getters and Setters 클릭
Name.java
package Classes;
public class Name {
private String firstName; // 성
private String lastName; // 이름
public Name(String firstName, String lastName) {
super();
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
Getter, Setter가 무엇인가?
→ 한줄 요약 : private를 관리하는 메서드.
private는 외부에선 접근할 수 없다. 가져다 사용하거나, 변수에 값을 넣는것 초차, 메서드의 도움이 필요하다.
getter : private를 외부로 꺼내는 메서드
-
- 내부의 멤버변수에 저장된 값을 외부로 리턴.
- 메개변수는 없고, 리턴값만 있는 메서드로 정의한다.
- 메서드명은 주로 getㅁㅁㅁㅁ() 메서드 형식으로 지정
- ㅁㅁㅁㅁ은 해당 멤버변수의 변수명을 사용.
setter: private에 값을 넣는 메서드이다.
-
- 외부로부터 데이터를 전달받은 값을 멤버변수에 저장.
- 매개변수만 있고, 리턴값은 없는 메서드로 정의.
알아야 하는 TMI
getter, setter규칙
private 변수를 다른 클래스에 꺼내는 메서드는 get + 변수명(첫글자 대문자)
-
- ex) public String getFirstName()
private 변수에 값을 초기화하는 메서드는 set + 변수명(첫글자 대문자)
-
- ex) public void setFirstName(String firstName) {
2.위 내용을 이용하여 주소를 담는 변수인 addr의 관한 “생성자”, “Getter, Setter”를 만들어보자
2-1. Address 클래스를 만든다.
2-2. 현재 Person 클래스는 멤버 변수만 선언 해놓은 깡통에 불과하다. Person 클래스에도 생성자 getter, setter를 넣자
Address.java
package Classes;
public class Address {
private String city; // 시, 구 정보
private String detail; // 상세 주소
public Address(String city, String detail) {
super();
this.city = city;
this.detail = detail;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getDetail() {
return detail;
}
public void setDetail(String detail) {
this.detail = detail;
}
}
Person.java
package Classes;
public class Person {
private Name name; // 이름 : 홍길동
private int age; // 나이 : 10
private Address addr; // 주소 : 인천 미추홀구 인하로 100
public Person(Name name, int age, Address addr) {
super();
this.name = name;
this.age = age;
this.addr = addr;
}
public Name getName() {
return name;
}
public void setName(Name name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Address getAddr() {
return addr;
}
public void setAddr(Address addr) {
this.addr = addr;
}
}
3. 위 선언 해놓은 값들을 사용하기 위해 Main클래스를 만들어 주자
PersonMain클래스 생성
→ public static void main(String] args) 메인 메소드도 추가 해주기

사진 설명을 입력하세요.
- Person 객체를 생성한다
1-1. 현재 Person 클래스에 Person 객체에는 name, age, addr객체를 전달 받기에 Main 함수에서 3개의 값을 전달 해야한다.

사진 설명을 입력하세요.
1-2. 생성자를 호출할 때 name, age, address에 대한 값을 전달합니다. 현재 위 사진은 name과 address를 null로, age를 0으로 전달합니다.
- Person 객체를 이용하기 위해 Name, Address 객체를 만들어 Person 객체에 변수를 넣어준다.
package Classes;
public class PersonMain {
public static void main(String[] args) {
Name name = new Name("이", "준환");
Address address = new Address("경기도 군포시", "산본천로34");
Person person = new Person(name, 0, address);
System.out.println(person);
}
}
출력
Classes.Person@2133c8f8
객체를 출력하면 위와 같이 “Classes.Person@2133c8f8”라고 찍힌다.
이유는? → Name, Address클래스에서 toString을 통해 문자열로 변환 시켜서 출력을 시켜줘야한다.
Person.java
package Classes;
public class Person {
private Name name; // 이름 : 이준환
private int age; // 나이 : 24
private Address addr; // 주소 : 경기도 군포시 산본천로 34
public Person(Name name, int age, Address addr) {
super();
this.name = name;
this.age = age;
this.addr = addr;
}
public Name getName() {
return name;
}
public void setName(Name name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Address getAddr() {
return addr;
}
public void setAddr(Address addr) {
this.addr = addr;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", addr=" + addr + "]";
}
}
Name.java
package Classes;
public class Name {
private String firstName; // 성
private String lastName; // 이름
public Name(String firstName, String lastName) {
super();
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Override
public String toString() {
return "이름 [성 = " + firstName + ", 이름 = " + lastName + "]";
}
}
Address.java
package Classes;
public class Address {
private String city; // 시, 구 정보
private String detail; // 상세 주소
public Address(String city, String detail) {
super();
this.city = city;
this.detail = detail;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getDetail() {
return detail;
}
public void setDetail(String detail) {
this.detail = detail;
}
@Override
public String toString() {
return "주소 [도시 = " + city + ", 상세주소 = " + detail + "]";
}
}
출력
Person [name=이름 [성 = 이, 이름 = 준환], age=24, addr=주소 [도시 = 경기도 군포시, 상세주소 = 산본천로34]]