Java

5주차 클래스

donggi 2022. 8. 18. 18:11

클래스 정의하는 방법

Java에서 클래스를 정의하기 위해서는 Class 예약어를 사용한다.

키워드 뒤에는 클래스 이름이 와야 한다. 정의한 클래스 내에 메서드와 변수를 선언한다.

클래스 정의에는 다음과 같은 내용이 포함된다.

  1. modifier : public or default
  2. class keyword : class 키워드는 클래스를 생성하는데 사용된다.
  3. class name : 관례상 대문자로 시작하는 이름을 사용한다.
  4. superclass (있는 경우) : extends 키워드를 사용하여 클래스의 상위 클래스를 상속 받을 수 있다
  5. interface (있는 경우) : implements 키워드를 사용하여 인터페이스에 구현된 추상 메서드를 구현할 수 있다.
  6. body : 중괄호 { }로 클래스 본문의 범위를 지정한다.

Syntax

<access modifier> class class_name {
		
		// member variables
		// class methods
}

 


객체 만드는 방법 (new 키워드 이해하기)

클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화라고 하며,

어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 한다.

		Hello h;
// 클래스명 참조변수
		h = new Hello();
// new 예약어를 이용해 클래스 객체를 생성한 후 참조변수 h에 객체의 주소를 저장
  • 객체를 생성하기 위해 클래스의 객체를 참조하기 위한 참조변수 선언
  • 객체를 생성한 후, 객체의 주소를 참조 변수에 저장

new 예약어

  • Java에서 new 예약어를 사용하여 클래스의 인스턴스가 메모리의 빈 공간에 생성된다.
  • 객체가 생성되면 멤버변수는 각 자료형에 해당하는 기본 값으로 초기화됨
  • new 예약어를 통해 객체를 여러 개 만들면 객체들은 각각의 별도의 객체가 생성된다.
  • 생성된 객체는 속한 메서드의 실행이 끝나면 제거된다.

 


메서드 정의하는 방법

Java의 메서드는 특정 작업을 수행하고 호출자에게 결과를 반환하는 명령문의 모음이다.

메서드를 선언하는데에는 다음과 같은 구성 요소가 포함된다.

  1. modifier : 메서드의 액세스 유형을 지정해준다. 액세스 유형으로 메서드의 범위를 제한할 수 있다. 
    • default : 클래스가 정의된 동일한 클래스 및 패키지 내에서 액세스할 수 있다.
    • private : 정의된 클래스 내에서만 액세스할 수 있다.
    • protected : 정의된 클래스와 해당 하위 클래스에서만 액세스할 수 있다.
    • public : 애플리케이션 모든 클래스에스 액세스할 수 있다.
  2. return type : 메서드에서 반환된 값의 데이터 유형을 지정한다. 값을 반환하지 않는 경우엔 void를 사용한다.
  3. method name : 소문자로 시작하는 이름을 사용한다.
  4. parameter list : 매개변수는 데이터 유형을 앞에 정의 하여 쉼표로 구분하여 정의한다. 매개변수가 없으면 빈 괄호 () 를 사용한다.
  5. exception list : 메서드 내부에서 예상되는 예외를 던져야할 경우가 있다. 이러한 예외를 지정할 수 있다.
  6. method body : 메서드의 본문은 중괄호로 묶는다. 메서드 내부에서 수행할 코드를 입력한다.

 


생성자 정의하는 방법

생성자는 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드이다.

인스턴스 변수의 초기화 작업에 주로 사용되며, 인스턴스 생성 시 실행되어야 할

작업을 위해도 사용된다.

 

생성자의 조건은 다음과 같다.

  1. 생성자의 이름은 클래스의 이름과 같아야 한다.
  2. 생성자는 리턴 값이 없다.
class Hello {

	private String name;
	private int count;
		
	public Hello() {
			// 매개변수가 없는 생성자
	}

	public Hello(String name, int count) {
			this.name = name;
			this.count = count;
			// 매개변수가 있는 생성자
			// 생성자의 매개변수를 통해 인스턴스 변수를 초기화해주었다.
	}
}

 

인스턴스를 생성할 때는 반드시 클래스 내에 정의된 생성자 중 하나를 선택하여 지정해주어야 한다.

그렇기 때문에 모든 클래스에는 반드시 하나 이상의 생성자가 정의되어 있어야 한다.

 

컴파일러는 기본 생성자를 제공해준다.

컴파일 할 때 소스파일(.java)의 클래스에 생성자가 하나도 정의되지 않은 경우

컴파일러는 자동적으로 아래와 같은 내용의 기본 생성자를 추가하여 컴파일 한다.

Hello() { }
  • 컴파일러가 컴파일 시점에 자동으로 추가해주는 기본 생성자는 매개변수도 아무런 내용도 없는 그러한 생성자이다.

생성자에서 다른 생성자 호출하기

같은 클래스의 멤버들 간에 서로 호출할 수 있는 것처럼

생성자 간에도 서로 호출이 가능하다

  • 생성자의 이름으로 클래스 이름 대신 this를 사용한다.
  • 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다.

이와 같은 두 조건을 만족시켜주어야 한다.

-> 매개변수가 없는 생성자를 통해 매개변수를 초기화 해주고 있다. (this 키워드 사용 X)

public class Car {
	private String color;
	private String gearType;
	private int door;

	public Car() {
			color = "white";
			gearType = "auto";
			door = 4;
	}
}

-> this 키워드를 이용하여 Car() 생성자에서 또 다른 생성자
	 Car(String color, String gearType, int door)를 호출하였다.
	 생성자 간 호출에는 이름 대신 this를 사용해야 한다.

public class Car {
		
	private String color;
	private String gearType;
	private int door;

	public Car(String color, String gearType, int door) {
			this.color = color;
			this.gearType = gearType;
			this.door = door;
	}
		
	public Car() {
			// 생성자 내부에서 또 다른 생성자를 호출하기 위해서는 첫 줄에서만 호출
			this("white", "auto", 4);
	}
}

 


this 키워드 이해하기

Java의 this는 인스턴스 메서드 혹은 생성자에서 현재 객체를 참조하고자 할 때 사용된다.

그 중 주로 아래의 세 가지 상황에서 사용된다.

  1. 객체 자신의 속성을 나타내고자 할 때
public class Hello {

		private String name;

		public Hello(String name) {
				this.name = name;
		}
}

생성자에 매개변수로 넘어온 name의 값을 현재 객체의 참조 변수에 할당하고자 할 때 현재 객체를 참조하고자하는 의도로 this 키워드가 사용된다.

 

   2. 생성자 내부에서 다른 생성자를 호출하고자 할 때

public class Hello {

		private String name;
		private int age;
		
		public Hello() {
				this("hello", 10);
		}
		
		public Hello(String name, int age) {
				this.name = name;
				this.age = age;
		}
}

아무 매개변수를 받지 않는 생성자를 호출했을 때 생성자 내부에서

name과 age를 매개변수로 받는 또 다른 생성자를 this 키워드를 이용하여 호출하였다.

이 경우 this 키워드는 생성자 내부 첫 줄에서 사용해야한다.

 

   3. 객체 자신의 참조 값을 전달하고자 할 때

public class Hello {

		private String name;
		private int age;
				
		public Hello(String name, int age) {
				this.name = name;
				this.age = age;
		}

		public Hello getHelloInstance() {
				return this;
		}
}

메서드에서 어떠한 동작을 수행하고 반환 값으로 현재 객체를

반환하고자 할 때 this 키워드를 사용할 수 있다.

 

 

이 외에 인스턴스 변수가 참조되고 있다는 사실을 명시하기 위해 사용할 수 있다.

 

 

 

 

 

 

 

 

 

https://www.javatpoint.com/class-definition-in-java

자바의 정석 6장

https://stackoverflow.com/questions/7019754/what-does-the-new-keyword-actually-do-in-java-and-should-i-avoid-creating-new

https://www.geeksforgeeks.org/methods-in-java/

https://stackoverflow.com/questions/2411270/when-should-i-use-this-in-a-class

https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html

https://library1008.tistory.com/4

'Java' 카테고리의 다른 글

Java Overriding  (0) 2022.08.30
Java의 상속과 super 키워드  (0) 2022.08.29
제어문  (0) 2022.08.12
연산자  (0) 2022.08.10
자바 데이터 타입, 변수 그리고 배열  (5) 2022.07.28