[자바(Java)] 클래스(Class)-(2)
✨ 클래스 정리
클래스는 객체를 만들 수 있는 틀이며, 객체는 여러 속성들과 그 속성들을 사용해 기능을 구현한 메서드를 가지는 것으로, 클래스에 의해 생성되어 참조 변수가 그 객체의 주소를 가리키고 있다. 그리고 .(다트 연산자)를 사용해 "참조 변수.메서드()", "참조 변수.속성"로 해당 객체에 대한 속성을 가져오거나 메서드를 이용할 수 있다.
✔️ 같은 메서드에 대해서도 여러 결과가 나오는 이유는 어떤 객체가 메서드를 호출하는지가 중요하기 때문이다. 서로 다른 객체는 서로 다른 속성을 가지고 있고(물론 같은 속성을 가질 때도 있다.) 주소값이 다른 등 구분되는 점들이 존재한다. 따라서 같은 메서드라도 그 메서드를 호출한 객체가 다르면 서로 다른 결과값이 나올 수 있다.
📍 Q1. 하나의 파일에 두 개 이상의 클래스를 작성할 수 있는가?
A1. Yes! 여러 개의 클래스가 하나의 파일에 존재해도 된다.
📍 Q2. 여러 개의 클래스가 한 파일에 있을 때 자바 파일명이 될 수 있는 것은 (A2) 키워드가 있는 클래스이다.
A2. public
📍 Q3. 여러 개의 클래스가 한 파일에 있을 때 모든 클래스에 public 키워드가 있어도 괜찮은가?
A3. No!
🔻 한 파일에 public 클래스가 두 개 이상 존재하는 코드(아래 코드는 Main 클래스 파일의 내용이다.)
public class A {}
class B {}
class Main{
public static void main(String[] args) {
}
}
👉🏻 클래스 A에 빨간 줄이 그어지는 것을 볼 수 있다.
👉🏻 마우스를 빨간 줄에 가져가면 아래 사진에 나와있는 같은 문장이 뜬다. 즉, public type이 존재할 시 그 클래스명은 파일명이 되어야 한다는 것이다.
📍 Q4. 여러 개의 클래스가 한 파일에 있을 때 모든 클래스에 public 키워드가 없는 것은 괜찮은가?
A4. Yes! 모든 클래스에 붙이는 것은 불가능하지만, 모든 클래스에 작성하지 않는 것은 가능하다.
🔻 한 파일에 존재하는 여러 클래스에 모두 public이 존재하지 않는 코드
class A {}
class B {}
class Main{
public static void main(String[] args) {
}
}
👉🏻 코드 작성 결과 아무런 경고도 뜨지 않고 컴파일도 잘 된다.
✔️ 하지만, 메인 메서드인 public static void main(String[] args)는 언제나 파일명과 동일한 클래스명이 있는 블록에 작성해야 한다.
🔻 예시1) 아래 코드와 같이 메인 메서드 없이 run
class A {}
class B {}
public class Main {
}
👉🏻 Error 발생
📍 Q5. 파일에 하나의 클래스만 존재한다면 그 클래스가 파일명이 되어야 하는가?
A5. Yes!
✨ 생성자(Constructor)
생성자는 new 키워드로 클래스의 객체(인스턴스)가 생성될 때 제일 먼저 자동적으로 호출되는 메서드이다.
✔️ 클래스에서 생성자를 따로 작성하지 않으면 default constructor가 자동으로 호출된다.
👉🏻 클래스명과 동일하다. 또한, 디폴트 생성자에서는 받는 인자가 존재하지 않는다.
🔻 클래스 Car의 default constructor
class Car {
// 속성
int price;
String color;
// 생성자
Car() {} // 디폴트 생성자의 모습
// 메서드
void stop(){
System.out.println("stop()");
}
}
public class Main{
public static void main(String[] args){
}
}
✔️ 자바에서 생성자명은 클래스명과 같아야 한다.
✔️ 생성자는 보통 속성과 일반적인 메서드 사이에 기술한다.
✔️ 생성자는 호출만 가능하다.
✔️ 생성자는 리턴되는 반환값이 없다.(인자값을 받는 것은 가능하다.)
✔️ 생성자는 객체의 초깃값을 설정할 때 많이 사용한다.
✔️ 생성자는 여러 개 만들 수 있다.
👉🏻 디폴트 생성자가 아닌, 또 다른 생성자를 만들어도 객체를 생성할 때 구분이 가능하므로 괜찮다. (Ex) Car(70000000, "red")로 생성하는 객체와 Car()로 생성하는 객체는 구분이 가능하다! )
👉🏻 생성자는 오버로딩(overloading)이 가능하다.
🔻 디폴트 생성자가 아닌 다른 생성자 작성하기
class Car {
// 속성
int price;
String color;
// 생성자
Car() {} // 디폴트 생성자의 모습
Car(int price, String color) {
this.price = price;
this.color = color;
}
// 메서드
void stop(){
System.out.println("stop()");
}
void showCarInfo() {
System.out.println("가격: " + price + "색깔: " + color);
}
}
public class Main{
public static void main(String[] args){
Car car1 = new Car(70000000, "red"); // 객체 생성
Car car2 = new Car(80000000, "white"); // 객체 생성
}
}
✔️ this는 생성자 객체 자신이라고 생각하면 된다. (cf) Python에서는 this 대신 self를 사용한다.)
👉🏻 위의 코드에서 car1, car2를 가지고 이해해보자! car1, car2는 디폴트 생성자가 아닌 Car(int price, String color) 생성자 형태로 생성되었다. 이때 인자로 주어진 가격과 색깔을 생성된 각 객체의 속성 price와 name에 대입해야 하는데, 이때 car1, car2 각 객체를 의미하는 것이 바로 this이다. 즉, car1 객체가 생성될 때는 this가 car1이라는 의미이고 car2 객체가 생성될 때는 this가 car2라는 의미이다. 정리하자면 this는 생성되는 객체 자기 자신을 가리킨다!
#### ✨ 참고한 강의, 교재, 사이트
인프런 예제로 공부하는 Java 100 문제풀이 Part3
Do it 자바프로그래밍 입문
점프 투 자바
Author And Source
이 문제에 관하여([자바(Java)] 클래스(Class)-(2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ddo_0/자바Java-클래스Class-2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)