6-1장. 클래스
클래스 특징
- 구성요소
- 생성자
- 필드 = 멤버변수
- 메소드 = 멤버함수
참조 변수
student 클래스에 대해 main 함수에서 2개의 객체를 만들었다고 하자.
Student s1 = new Student("pdy",19990101);
Student s2 = new Student("dlwerma",19920301);
- 클래스는 기본 타입이 아니므로 s1, s2는 모두 참조변수이다.
이 참조변수가 실제로 가리키고 있는 것은 Student 객체이다
this
Student 클래스에서 아래와 같은 생성자를 정의했다고 하자.
Student(String name, int birth){
_name = name;
this.birth = birth;
}
이 생성자 영역안에서 매개변수 birth 를 만들었기 때문에, 필드 birth 는 매개변수 birth의 의미가 된다. (인식하는 우선순위에 따라)
따라서 필드를 구분해주기 위해 this 를 붙여준다.
캡슐화
- 실제 구현 내용을 감추는 것
- 객체의 필드, 메소드를 하나로 묶는다
클래스 선언 규칙
-
소스 파일 이름과 동일한 클래스만 public 으로 선언가능
ex) A.java 파일에는 클래스 A 만 public 으로 만들수있다.
클래스 B를 추가적으로 만들때 public 을 못만듦 -
소스 파일당 하나의 클래스를 선언하는 것이 관례임!
(몰론 2개 이상의 클래스도 한 파일에 선언 가능) -
하나의 패키지 안에서는 중복으로 같은 클래스를 선언 불가능
ex) package1 패키지에서 A.java 파일과 B.java 파일이 있는데,
두 파일에서 모두 클래스 Student 을 정의할 경우 충돌이 일어난다. -
선언한 개수만큼 바이트 코드 파일이 생성
new 연산자
-
객체 생성 역할 => 생성자를 호출하는 코드
( new로 객체를 생성시 생성자가 반드시 자동으로 호출된다) -
생성된 객체는 힙 메모리 영역에 생성
-
new 연산자는 객체를 생성후, 객체 생성 번지 리턴 => 이로써 참조변수가 힙 영역에 있는 실제 객체를 가리킬 수 있게됨
생성자
- new 연산자에 의해 호출되어 객체의 초기화 담당
생성자 오버로딩
- 매개변수 타입, 개수, 순서가 다른 생성자 여러개 선언가능
public class Car{
Car(){ ... }
Car(String model){ ... }
Car(String model, String color){ ... }
Car(String model, String color, int maxSpeed){ ... }
}
this() 메소드로 다른 생성자 호출하기
- 내가 이미 만들어 놓은 생성자를 다른 생성자에서 호출가능
this()
- 클래스 안에서 또 다른 생성자에서 이미 정의된 생성자를 호출 가능함
- 생성자 내에서만 사용가능
- 반드시 생성자 코드의 제일 처음에 수행
public class Book{
String title;
String author;
public Book(){ // 1번 생성자
this(",");
System.out.println("생성자 호출됨");
}
public Book(String title){ // 2번 생성자
this(title, "작가미상"); // 3번 생성자 호출
}
public Book(String title, String author){ // 3번 생성자
this.title = title;
this.author = author;
}
}
pubic static void main(String[] args){
Book littlePrince = new Book("어린왕자", "생텍쥐페리");
Book loveStory = new Book("춘향전");
Book emptyBook = new Book();
loveStory.show();
}
// 실행결과
// 생성자 호출됨
// 춘향전 작자미상
Author And Source
이 문제에 관하여(6-1장. 클래스), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@msung99/6장.-클래스저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)