Week 05

2022. 7. 9. 22:00
728x90

목표

자바의 Class에 대해 학습하세요.

학습할 것

  • 클래스 정의하는 방법
  • 객체 만드는 방법 (new 키워드 이해하기)
  • 메소드 정의하는 방법
  • 생성자 정의하는 방법
  • this 키워드 이해하기

1.클래스 정의하는 방법

클래스는 객체를 정의한 것이고, 객체를 생성할 때 클래스를 사용한다.
# class

* 클래스는 객체를 정의한 것이므로 클래스에는 객체의 모든 속성과 기능이 정의되어있다.

속성은 쉽게 말해서 객체의 상태, 성질 등을 나타내는 것이고
기능은 객체가 할 수 있는 행동 예를 들면, Tv 볼륨 높이기, 줄이기, 채널 변경 등이 있다.

클래스{} 영역 안에 클래스 영역이 있고, 그 안에 메서드 영역이 따로 하나 더 있는데
클래스 영역에서는 멤버 변수를 정의할 수 있고, 메서드 영역에서는 메서드를 정의를 할 수 있다.

멤버는 변수와 기능을 합쳐서 부를 때 사용하는 용어다.
ex)인스턴스 멤버(인스턴스 변수 + 인스턴스 메서드), 멤버 변수(인스턴스 변수 + 클래스 변수).. 등

그리고 지역변수라는 것도 있는데, 이 지역변수는 메서드 영역에서 임시방편으로 쓴 후에 메서드 실행문이 종료되면
소멸되는 변수이다.

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

객체는 실제로 존재하는 것이다. 즉, 사물 또는 개념이다.
# 객체

객체를 생성하기 위해서는 우선 참조변수를 하나 지정해서 선언을 해줘야 한다.

1. 클래스명 변수명;
2. 변수명 = new 클래스명();

1 -> 2 순서대로 하면 된다.

*한 번에 객체를 생성하려면 클래스명 변수명 = new 클래스명();으로 생성하면 된다.

ex) Tv t1 = new Tv();

여기서 Tv클래스는 하나의 타입이 된다. 이걸 사용자정의 타입이라고 한다.

3.메소드 정의하는 방법

메소드는 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것이다.
# 메소드

메소드는 선언부와 구현부가 있다.

반환타입 메소드이름 (타입 변수명, 타입 변수명, ...)   -> 선언부
{   // 메소드 호출시 수행될 코드   }    -> 구현부

1. 반환타입: 메서드의 작업수행 결과인 반환값의 타입을 적는다. 반환값이 없는 경우에는 void를 적어야한다.

2. 메소드 이름: 메소드의 이름도 앞서 배운 변수의 명명규칙대로 작성하면 된다. 이름만으로도 메서드의 기능을 쉽게
알 수 있도록 함축적이면서도 의미있는 이름을 짓도록 노력해야 한다.

3. 매개변수 선언: 매개변수는 메소드가 작업을 수행하는데 필요한 값들을 제공받기 위한 것이며, 필요한 값의
개수만큼 변수를 선언하며 각 변수 간의 구분은 쉼표를 사용한다. 한 가지 주의할 점은 일반적인 변수선언과 달리 두 변수의
타입이 같아도 변수의 타입을 생략할 수 없다는 것이다.

4. 메소드의 구현부: 메서드의 선언부 다음에 오는 괄호{}를 메서드의 구현부라고 하는데, 여기에 메서드를
호출했을 때 수행될 문장들을 넣는다. 우리가 그동안 작성해온 문장들은 모두 main메서드의 구현부{}에 속한다.

5. return문: 메서드의 반환타입이 void가 아닌 경우, 구현부{}안에 return 반환값;이 반드시
포함되어 있어야 한다. 이 문장은 작업을 수행한 결과인 반환값을 호출한 메소드로 전달하는데, 이 값의 타입은 반환타입과
일치하거나 적어도 자동 형변환이 가능한것이어야 한다.

6. 지역변수: 메소드 내에 선언된 변수들은 그 메소드 내에서만 사용할 수 있으므로 서로 다른 메소드라면 같은 이름의
변수를 선언해도 된다. 이처럼 메소드 내에 선언된 변수를 지역변수라고 한다.

4.생성자 정의하는 방법

생성자는 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드이다. 따라서 인스턴스 변수의 초기화 작업에 주로 사용되며, 인스턴스 생성 시에 실행되어야 할 작업을 위해서도 사용된다.
# 생성자

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

Card c = new Card();

1.연산자 new에 의해서 메모리에 Card클래스의 인스턴스가 생성된다.'
2.생성자 Card()가 호출되어 수행된다.
3.연산자 new의 결과로 생성된 Card인스턴스의 주소가 반환되어 참조변수 c에 저장된다.

* 기본 생성자: 모든 클래스에 반드시 하나 이상의 생성자가 정의되어 있어야 한다. 그러나 클래스에 생성자를 
정의하지 않고도 인스턴스를 생성할 수 있는 이유는 컴파일러가 제공하는 기본 생성자 덕분이었다.
기본 생성자는 매개변수도 없고 아무런 내용도 없는 아주 간단한 것이다.

* 매개변수가 있는 생성자: 인스턴스마다 각기 다른 값으로 초기화되어야 하는 경우가 많기 때문에 매개변수를 사용한 초기화는 매우 유용하다.
Car인스턴스를 생성할 때, 생성자 Car()를 사용하면, 생성한 다음 따로 초기화를 해주어야 하지만, Car(String color, String gearType, int door)을
사용한다면 인스턴스를 생성하는 동시에 원하는 값으로 초기화를 할 수 있다.

Car c = new Car("white", "auto", 4);

* 생성자에서 다른 생성자 호출하기: 같은 클래스의 멤버들 간에 서로 호출할 수 있는 것처럼 생성자 간에도 서로
호출이 가능하다. 단 두 가지의 조건을 만족시켜야 한다.

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

Car() {
		this("white", "auto", 4);
}

위의 코드는 Car(String color, String gearType, int door)를 호출한 것이다.

* 생성자를 이용한 인스턴스의 복사: 현재 사용하고 있는 인스턴스와 같은 상태를 갖는 인스턴스를 하나 더 만들고자 할 때 생성자를 이용할 수 있다.
두 인스턴스가 같은 상태를 갖는다는 것은 두 인스턴스의 모든 인스턴스 변수가 동일한 값을 갖고 있다는 것을 뜻한다.
하나의 클래스로부터 생성된 모든 인스턴스의 메소드와 클래스변수는 서로 동일하기 때문에 인스턴스간의 차이는, 인스턴스마다 각기 다른 값을
가질 수 있는 인스턴스변수 뿐이다.

Car(Car c) {
		color = c.color;
		gearType = c.gearType;
		door = c.door;
}

위의 코드는 Car클래스의 참조변수를 매개변수로 선언한 생성자이다. 매개변수로 넘겨진 참조변수가 가리키는 Car인스턴스의 인스턴스변수인
color, gearType, door의 값을 인스턴스 자신으로 복사하는 것이다.

5.this 키워드 이해하기

this 키워드는 생성자에서 다른 생성자를 호출할 때 쓰는 this()와 인스턴스 자신을 가리킬 때 쓰는 참조변수 this가 있다.
# this

* 생성자에서 다른 생성자를 호출할 때 쓰는 this의 경우 위에 이미 정리된 것을 참고할 것.

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

Car() {
			//Card("white", "auto", 4);
			this("white", "auto", 4); //여기서 쓰는 this()는 다른 생성자를 호출하기 위해 쓰는 것이다. 참조변수 this가 아님에 주의할 것
}

Car(String color, String gearType, int door) { //Car(String c, String g, int d)
		this.color = color; //color = c; 
		this.gearType = gearType; //gearType = g;
		this.door = door; //door = d;
}

만약에 위의 코드처럼 지역변수(매개변수)도 color이고 인스턴스변수명도 color인 경우 중복이 생기게 된다.
이때 this라는 참조변수를 이용해서 인스턴스변수와 지역변수를 구별한다.

'Java & Spring > WhiteShip Study' 카테고리의 다른 글

Week 07  (0) 2022.07.23
Week 06  (0) 2022.07.16
Week 04  (0) 2022.07.02
Week 03  (0) 2022.06.25
Week 02  (0) 2022.06.18

BELATED ARTICLES

more