생성자(Constructor)
생성자는 new 연산자를 통해서 instance를 생성할 때 반드시 호출이된다. 호출과 동시에 제일먼저 실행되는 method라고 할 수 있지만 method와는 다른 특징들이 있다. 또한 생성자는 class의 멤버변수의 초기화를 시키는 역할도 가능하다.
생성자의 특징
- 생성자의 이름은 class의 이름과 동일해야한다.
- 생성자는 다른 method와는 다르게 return 타입이 없다.
- 생성자는 객체가 생성될 때 자동으로 한번 호출한다.
- 생성자는 매개변수 조건에 따라 여러 개를 작성할 수 있다.(생성자 오버로딩)
- 생성자는 class에 최소 1개는 있어야하며 기본적으로 기본 생성자가 생략되어있고 자동으로 생성한다.
- 만약 생성자 코드가 1개라도 있다면 컴파일러는 기본 생성자가 없어도 기본 생성자를 자동으로 생성하지 않는다
생성자의 종류
기본 생성자(No argument Constructor)
class를 만들 때 기본적으로 만들어지는 생성자이고 생략되어있다. 만약 class의 멤버변수가 final이 있다면 만들 수 없다.
J10_Student(){ //NO argument constructor
System.out.println("기본 생성자 호출");
}
필수 생성자(required argument Constructor)
class에 final이란 변수가 있다면 무조건 생성자를 만들어야하는 생성자가 바로 Required Argument Costructor이다.
J10_Student(int a) {//required argument constructor
// TODO Auto-generated constructor stub
this.a = a;
}
전체 생성자(all argument Constructor)
class의 모든 멤버변수를 생성자의 매개변수로 받는 생성자이다.
J10_Student(String name, int age, int a) {//all argument constructor
//클래스내의 멤버변수의 지역변수들은 이름이 같아도 구분을 해줌
//하지만 이름이 같아지기 때문에 this를 이용해준다.
//this 자기자신의 주소를 가지고 있음.
this.name = name;
this.age = age;
this.a = a;
}
접근지정자
class내에 멤버변수나 method의 접근을 지정하는 키워드이다. 만약 변수나 method에 아무것도 입력을 안한다면 default상태가 된다.
접근지정자 종류
- public : 접근제한 없음
- proteced : 동일 패키지와 상속받은 class 내부만 접근가능
- private : class 내부에서만 접근이 가능
- default : 동일 패키지 내에서만 접근이 가능
접근지정자를 써보자
package j11_접근지정자.default1;
public class J11_StudentDefault {
//클래스내의 멤버변수는 private로 지정 -> 데이터의 은닉
//메서드를 활용해 멤버변수를 값을 전달해줘야한다.
private String name;
private int age;
public J11_StudentDefault() {
}
public J11_StudentDefault(String name, int age) {
this.name = name;
this.age = age;
}
public void printInfo() {
System.out.println("이름: " + name);
System.out.println("나이: " + age);
}
//클래스내에서 작동하는 메소드들은 private로 지정 -> 캡슐화
//Getter -> 값을 가지고 오는 메서드
public String getName() {
return name;
}
//Setter -> 값을 대입 해주는 메서드
public void setName(String name) {
this.name = name;
}
//알트 쉬프트 s -> Getter , Setter, 생성자를 자동으로 만들어주는 단축키
//컨트롤 쉬프트 f -> 자동 줄정리 단축키
// ${name} -> 하나의 표현식이고 Getter를 호출함
}
package j11_접근지정자;
import j11_접근지정자.default1.J11_StudentDefault; //다른 패키지의 자료형을 쓸려면 import를 해줘야 한다.
public class J11_StudentMain {
public static void main(String[] args) {
J11_Student s1 = new J11_Student("김민수", 30);
s1.name = "철수";
s1.age = 25;
s1.printInfo();
J11_StudentDefault s2 = new J11_StudentDefault();
// s2.name = "홍길동";
// System.out.println("이름: " + s2.name);
System.out.println("이름: " + s2.getName());
}
}
'Language > Java' 카테고리의 다른 글
[Java] 추상클래스와 인터페이스 차이점 (1) | 2023.09.15 |
---|---|
[Java] Class 형변환 (0) | 2023.09.14 |
[Java] Class와 객체지향언어(OOP) (0) | 2023.09.13 |
[Java] Method(함수) (0) | 2023.09.12 |
[Java] 반복문 (0) | 2023.09.12 |