코딩항해기

[JAVA] 객체 생성하기 본문

JAVA

[JAVA] 객체 생성하기

miniBcake 2024. 6. 22. 11:53

 

[관련한 이전 글 보기]

 

[JAVA] 객체와 객체지향언어 장단점

객체 지향 프로그래밍Object Oriented Programming java는 객체지향 프로그래밍 언어이다.객체지향 프로그래밍 언어로는 java, c#, python 등이 있다. 그 외의 방식으로는 절차지향 프로그래밍 언어가 있으

minibcake.tistory.com


 

객체 생성은 클래스를 생성 후 메모리에 할당(구체화) 시키는 것을 의미한다.

 

예시로 [TV]클래스와 필드(속성), 메소드(기능)을 생성하고 구체화시키는 법을 정리하겠다.

 

(속성) 먼저 채널, 볼륨, 색상, 이름 필드와

(기능) 티비 정보, 볼륨 올리기, 내리기, 채널 올리기, 내리기 기능을 가진

(이름) ClassicTv 클래스를 구현해보겠다.

package home0622;

public class ClassicTv {
	// 필드 : 이름, 색상, 채널, 볼륨
	public String name;
	public String color;
	public int channel; // 0번채널부터 무한대
	public int volume; // 0~100

	// 메소드 : tv 정보, 채널 올리기, 채널 내리기, 볼륨 올리기, 볼륨 내리기
	public void tvInfo() {
		System.out.printf("name = %s, color = %s, channel = %d, volum = %d\n", name, color, channel, volume);
	}
	
	public void channelUp() {
		channel++;
		System.out.println("채널을 올립니다. [채널:" + channel + "]");
	}

	public void channelDown() {
		channel--;

		if (channel < 0) { // 채널은 음수가 될 수 없다
			channel = 0;
		}

		System.out.println("채널을 내립니다. [채널:" + channel + "]");
	}

	public void volUp() {
		volume++;

		if (volume > 100) { // 볼륨은 100을 넘을 수 없다.
			volume = 100;
		}

		System.out.println("볼륨을 올립니다. [볼륨:" + volume + "]");
	}

	public void volDown() {
		volume++;

		if (volume < 0) { // 볼륨은 0보다 작아질 수 없다.
			volume = 0;
		}

		System.out.println("볼륨을 내립니다. [볼륨:" + volume + "]");
	}

	//기본생성자
	public ClassicTv() {
		super();
	}

	//모든 필드를 매개변수로 받는 생성자
	public ClassicTv(String name, String color, int channel, int volume) {
		super();
		this.name = name;
		this.color = color;
		this.channel = channel;
		this.volume = volume;
	}
	
	//이름과 색상만 매개변수로 받고 채널과 볼륨은 기본값으로 초기화
	public ClassicTv(String name, String color) {
		super();
		this.name = name;
		this.color = color;
		this.channel = 0;
		this.volume = 50;
	}
	
	//필드를 public으로 생성했으므로 게터와 세터는 생략함
}


생성자를 생성하지 않으면 기본 생성자를 컴파일러가 자동으로 만들어주지만,

이름, 색상을 매개변수로 필드값을 초기화 해줄 예정이기 때문에 생성자를 만들어주며

기본 생성자와 모든 필드값을 매개변수로 받는 생성자도 함께 만들어주었다.

(컴파일러가 만들어주는 기본 생성자는 생성자를 만들게 되면 더이상 자동 제공해주지 않는다.)

 

이제 생성한 클래스를  new 연산자를 이용하여 구체화(메모리에 할당)해주면 객체 생성이 완료된다.

package home0622;

public class HomeworkMain {
	public static void main(String[] args) {
		
		ClassicTv tv = new ClassicTv("miniTv", "black");
		
		tv.tvInfo();
	}
}

 

객체를 만들고 생성자를 통해 필드값이 적절하게 초기화 되었는지 tvInfo메소드를 통해 확인해주었다.

객체가 가진 메소드를 사용할 때에는 변수명(객체명).메소드명(); 형식으로 사용하면 되는데,

리턴값이 있을 경우에는 출력문을 사용해주거나 리턴값의 타입에 맞는 타입을 지닌 변수에 저장하여 사용해주어야한다.

매개변수 유무 리턴값 유무 메소드 호출방식
매개변수 X 리턴값 X 객체명.메소드명();
매개변수 O 객체명.메소드명(인수);
매개변수 X 리턴값 O 출력문(객체명.메소드명());
리턴타입 변수 = 객체명.메소드명();
매개변수 O 출력문(객체명.메소드명(인수));
리턴타입 변수 = 객체명.메소드명(인수);