목표
자바의 Class에 대해 학습하세요.
학습할 것 (필수)
- 클래스 정의하는 방법
- 객체 만드는 방법 (new 키워드 이해하기)
- 메서드 정의하는 방법
- 생성자 정의하는 방법
- this 키워드 이해하기
Class 란 무엇인가?
클래스(class)는 객체 지향 프로그래밍(OOP)에서 특정 객체를 생성하기 위해 변수와 메서드를 정의하는 일종의 틀이다.
(wikipedia에서는 이와 같이 정의하고 있다.)
그냥 간단히 말해서 어떤 사물들이 가지고 있는 특성들을 정의할 수 있는 큰 그릇이라고 생각하면 쉽다.
위에 그림에서는 class는 Account(계정) 이 되고 변수는 (계정 ID, 계정 PW , 이름 , 나이 , 사는 지역) 이 된다.
작성방법
접근 지정자 class 클레스명 {
필드 1
필드 2
}
위 그림을 코드로 써보자.
이렇게 간단히 Account라는 class를 작성할 수 있다.
객체 만드는 방법 (new 키워드 이해하기)
class를 정의했으니 이제 사용해보자.
main 메서드를 하나 선언해서 new 키워드를 이용하여 Account class를 생성하면 되는데
여기서 new 키워드란 -> 내가 만든 객체(class)를 생성하여 메모리(Heap 영역)에 데이터를 저장할 공간을 할당하고 저장한 공간의 주소를 객체에게 반환한다.
main 함수는 다음과 같다.
디버그를 통해 Account의 주소를 보자.
new 연산자를 통해 Account라는 객체를 2개 생성했을 때 account와 account2의 주소 값이 다른 걸 볼 수 있다.
이제 여기서 나는 account라는 큰 그릇에 포함되어있는 작은 그릇들(AccountID, AccountPW, name 등등)에
값을 채워 넣고 싶지만 접근 제한자가 private 이여서 클래스 외부에서 접근을 할 수 없다.
이제 메서드가 필요할 차례이다.
메서드 정의하는 방법
위에서 class를 정의하고 객체(Account)를 생성했지만 Account 가 가지고 있는 필드에 값을 클래스 외부에서
넣어 줄 수 없기 때문에 method를 정의하여 값을 세팅해보자.
메서드 정의하는 법
return 타입 -> void (없음) 이거나 return 할 타입 ex)접근 지정자 return타입 method 명(Parameter타입 parameter이름){} |
흔히 말하는 setter를 구현했다. 여기서는 반환하는 값이 없기 때문에 return 타입이 void이다.
method를 만들었으니 main에서 값을 세팅해보자
디버그로 보면 값이 세팅된 걸 확인할 수 있다.
여기서 의문이 든다.
private 접근 지정자로 지정되면 무조건 method를 통해 초기 값을 세팅해야만 하나?
그건 아니다. 바로 생성자를 통한 초기값을 세팅할 수 있다.
생성자 정의하는 방법
사실 우리는 생성자를 쓰고 있었다.
바로 new 키워드에서 이미 default(기본) 생성자를 사용하고 있었다.
하지만 우리는 Account.class 에서 생성자 따위를 만든 적이 없다.
바로 컴파일 시점에서 프로그래머가 따로 정의한 생성자가 없다면 자동으로 생성이 되어 new 키워드가 사용될 때
기본 생성자가 호출된다.
즉 new 키워드는 생성자를 이용해 객체를 인스턴스화 시킬 수 있는 것이다.
생성자 정의하는 법
1. return 타입이 없어야 함 2. Class 명과 일치 해야함 ex) 접근 지정자 Class명(Parameter타입 parameter이름){} |
확인해보기 위해 기본 생성자를 직접 만들어서 확인해보자.
print에 찍힌 걸 확인할 수 있다. 그러면 이 생성자를 통해 초기값을 세팅할 수 있음으로 다음과 같이 작성할 수 있다.
위에 예제처럼 생성자도 오버로딩하여 여러 개 만들 수 있다.
오버로딩이란 다음과 같다.
오버 로딩(Overloading)은 메서드의 이름은 하나만 주고 매개변수(parameter)를 다르게 함으로써 메서드를
여러 개 만드는 것을 말한다.
오버 로딩(Overloading) 메서드의 구별은 매개변수의 개수 및 매개변수의 데이터 타입으로 구분한다.
메서드의 리턴 타입은 구분하지 않는다.
this 키워드 이해하기
내가 정의한 생성자에 this. 변수명이라는 게 존재한다.
여기서 this란 객체 자신을 의미한다
즉 위 사진에 있는 this 은 Account 클래스 내부에 있는 필드명을 가리키고 있다.
this는 생략이 가능하며 생성자와 메서드의 에서 받는 매개변수 이름과 class 내부의 필드와 동일한 경우
어떤 필드가 class의 필드인지 명시하기 위해 사용한다.
'Java > live-study' 카테고리의 다른 글
[Java] 백기선 라이브스터디 9주차 : 예외 처리 (0) | 2021.01.14 |
---|---|
[JAVA] 백기선 라이브스터디 8주차 과제: 인터페이스 (0) | 2021.01.06 |
(JAVA)백기선 라이브 스터디 7주차 : 패키지 (0) | 2021.01.01 |
[JAVA] 백기선 라이브 스터디 6주차 과제: 상속 (0) | 2020.12.26 |
[JAVA] 백기선 자바 스터디 4주차 과제: 제어문 (0) | 2020.12.05 |