본문 바로가기
Language/Java

JAVA입문-5 (클래스 다듬기)

by 드럼치는 코린이 2021. 2. 26.
728x90
반응형

 


[생성자]

클래스를 만들고 해당 클래스를 이용해서 인스턴스를 만들려면 new 연산자를 사용했는데, new 연산자 다음에는 반드시 생성자가 나와야 한다.


  • 특징

1. 클래스를 만들 때 메서드와는 다르게 리턴 타입을 갖지 않는다.
2. 생성자를 프로그래머가 만들지 않으면 매개변수가 없는 생성자가 컴파일할 때 자동으로 만들어진다.

출처(프로그래머스 자바 입문)

매개변수가 없는 생성자를 '기본 생성자'라 한다.

생성자를 하나라도 프로그래머가 만들었다면 '기본 생성자'는 자동으로 만들어지지 않는다.


ex. 현재 Car 클래스에 생성자를 만들지 않았으므로 이때 컴파일러는 '기본 생성자'를 만든다.


객체는 만들어질 때 어떤 값을 가지고 만들어지길 원할 수도 있는데, 생성자가 하는 일은 객체가 될 때 필드를 초기화하는 역할을 수행한다.

ex. Car 클래스에 생성자를 하나만드니 CarExam 클래스에 '기본 생성자'로 만들어져 있던 Car 객체 c1이 오류를 발생 발생하게 된다. 그 이유는 사용자가 생성자를 하나라도 추가하니 '기본 생성자'는 자동으로 만들어지지 않는다.


ex. 생성자는 객체가 생성될 때 값이 초기화 되어 나온다.


[this]

this는 객체 자신을 참조하는 키워드로 사용되며 키워드가 중복 되지 않도록 할 때 쓰면 좋다.


변수의 이름을 사용할 때는 한눈에 알아보기 쉬운 이름으로 사용하는 것이 좋다.

그래서 값이 이름의 값을 받아들이기 원하기 때문에 n보다 name로 수정하는 것이 좋다.

하지만 컴파일러상 name은 가까운 name를 참조하기 때문에 초기화가 제대로 되지 않을 수 있다.


그래서 이 때 사용하는 것이 this.

this를 사용하는 것을 통해 name이 필드명 name인지 정확하게 인식할 수 있게 된다.

따라서 클래스 안에서 자기 자신이 가지고 있는 메서드를 사용하고 싶을 때는 this.메서드명을 통해 호출할 수 있다.

또는 나의 생성자를 호출할 때에도 this를 사용한다.


[메서드 오버로딩]

매개변수의 수, 타입이 다른 경우 동일한 이름으로 메서드를 여러 개 정의할 수 있다.

ex. 매개변수의 개수나 타입은 조금씩 다르지만 비슷한 기능을 하는 메서드가 여러 개 있을 수 있다.

3개의 메서드가 있는데 3개 모두 매개변수를 받아들이고 더해서 리턴하는 메서드이기 때문에 똑같은 이름으로 메서드를 만들 수 있다.

위와 같이 3가지의 메서드의 이름을 똑같이 plus로 정의하는 것을 메서드 오버로딩이라고 한다.

메서드 오버로딩에서 중요한 것은 타입과, 매개변수의 개수!!

타입은 같지만 매개변수의 개수가 다르거나 매개변수의 개수는 같지만 타입이 달랐기 때문에 메서드 오버로딩 가능.

하지만 매개변수의 갯수 차이가 아닌 매개변수 이름이 다른 것은 메서드 오버로딩이 되지 않는다.


ex. 만든 메서드 오버로딩을 이용하는 방법


[생성자 오버로딩과 this]

메서드와 마찬가지로 매개변수의 수와 타입이 다르다면 여러 개의 생성자를 선언할 수 있다.


앞에서 공부했듯이 Car클래스에 생성자를 만들었다면 CarExam클래스에는 기본 생성자가 자동으로 생성될 수가 없다.

하지만 기본 생성자를 사용하고 싶다면 기본생성자를 직접 정의하면 사용할 수 있다.


ex. Car객체가 처음 생성될 때부터 이름과 번호를 받아들이고 싶다면?


ex. 만약 기본 생성자를 호출했을 때 이름없음, 0을 호출하고 싶다면?

위에 코드처럼 코드가 중복되게 하는 것보다....

Car의 기본 생성자가 생성됐을 때 this안에 있는 String값과, int값을 가진 생성자인 name과 number에 호출이 되어 필드 name에는 이름없음, 필드 number에는 0 값으로 초기화하게 된다.

this()는 자신의 생성자를 호출.

즉, this를 통해 자기 자신의 생성자를 호출하므로 코드가 중복되는 것을 방지할 수 있다.


[패키지]

보통 사진, 음악, 영상 등 파일들이 많아지면 폴더를 통해 장르별로 폴더를 만들어 관리를 하는데 이때 한꺼번에 넣으면 찾거나 관리하기 힘들다보니 폴더안에 폴더를 만들어 관리하기 쉽게 사용한다.

출처(프로그래머스 자바 입문)

이처럼 Java도 관련된 클래스들을 폴더별로 관리하는데, 이 때 사용하는 키워드를 '패키지'라고 한다.

출처(프로그래머스 자바 입문)

도메인을 붙여 사용하는 이유는 다른 회사에서 만든 프로젝트 혹은 파일명과 중복되는 것을 원하지 않기 때문이다.

프로젝트 뒤에 또 다른 이름이 오거나 실제 없는 도메인을 써도 상관없고 폴더명.폴더명.으로 관리가 된다.

다만 폴더명이 숫자로 시작할 수는 없다.

ex.


다른 패키지에 들어있는 클래스를 사용할 때는 import라는 키워드를 반드시 사용해야 한다.

*import : 다른 패키지에 들어있는 클래스를 사용하기 위한 키워드

Ctrl + Shift + o 단축키를 사용하면 import가 자동적으로 생성된다.

ex.

ex. 만약 import를 사용하지 않는다면 클래스를 쓸 때마다 클래스 앞에 패키지를 입력해줘야 한다. (불편한 방법)

 

728x90
반응형

'Language > Java' 카테고리의 다른 글

JAVA입문-7 [인터페이스(interface)와 다른 형식의 클래스(class)]  (0) 2021.03.05
JAVA입문-6 (상속)  (0) 2021.02.27
JAVA입문-4 (클래스와 객체)  (2) 2021.02.21
JAVA입문-3 (배열)  (0) 2021.02.18
JAVA입문-2 (제어문)  (0) 2021.02.16

댓글