Develop

[Java 기초]01. 클래스 및 객체 생성과 사용법

이준환 2024. 4. 7. 15:21
반응형

우선 용어부터 알아보자.

객체(object)

    • 객체(object)란 클래스의 인스턴스나 배열을 말한다
    • → 객체는 모든 인스턴스를 포괄하는 넓은 의미를 가지고,

인스턴스 (Instance)

객체와 인스턴스는 크게 차이를 보이지는 않는다. 따라서 두 용어를 혼용하여 사용하기도 한다.

    • → 객체는 모든 인스턴스를 포괄하는 넓은 의미를 가지고,
    • → 인스턴스는 해당 객체가 어떤 클래스로부터 생성된 것인지를 강조한다.

 

클래스(Class)

    • 객체지향 프로그래밍에서 클래스는 멤버 변수와 메서드를 가지는 객체를 만들기 위한 확장이 가능한 코드 양식을 말한다
    • 쉽게 말해, 객체를 찍어내기 위한 틀, 설계도라고 보시면 됩니다

[한줄 정리]

    • 객체 : 소프트웨어 세계에 구현할 대상이며 속성과 기능을 가지는 프로그램 단위를 뜻 한다.
    • 클래스 : 객체에 속성과 기능을 넣어줄 설계도를 뜻 한다.
    • 인스턴스 : 클래스에 따라 메모리상에 구현된 실체를 뜻 한다.

 

1. 멤버변수(필드) 선언

클래스는 [멤버변수(필드)]와 [멤버함수(메소드)]로 구성되어 있다.

→ 그렇기에 우선적으로 멤버 변수를 선언 해줄것이다.

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) 메인 메소드도 추가 해주기

대표사진 삭제

사진 설명을 입력하세요.

  1. Person 객체를 생성한다

1-1. 현재 Person 클래스에 Person 객체에는 name, age, addr객체를 전달 받기에 Main 함수에서 3개의 값을 전달 해야한다.

대표사진 삭제

사진 설명을 입력하세요.

1-2. 생성자를 호출할 때 name, age, address에 대한 값을 전달합니다. 현재 위 사진은 name과 address를 null로, age를 0으로 전달합니다.

  1. 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]]
 

 

 

 

반응형