생성자
생성자는 인스턴스 초기화 메서드다. 연산자 new 결과로 인스턴스를 만들 때 생성자를 실행하여 인스턴스의 값을 초기화한다. 생성자명은 클래스명과 같고 리턴타입이 없다.(하지만 void를 쓰지 않는다) 클래스에 생성자 함수가 없으면 기본 생성자(default)를 자바 컴파일러가 자동으로 만든다.
클래스명() {
}
디폴트 생성자
모든 클래스에는 생성자를 하나라도 만들었다면 디폴드 생성자를 꼭 정의해줘야 한다. 개발자가 생성자를 정의하지 않으면 컴파일러가 기본생성자를 만든다.
class 클래스명
...
class 클래스명() { // 기본 생성자
}
this
this는 컴파일러에서 자동으로 생성되는 현재 객체 자신을 가리키는 참조변수다. (생성자에서 매개변수와 필드이름의 혼동을 막기 위해 사용)
public class Circle{
int radius
public Circle(int radius) {
this.radius = radius;
}
double getArea() {
return. 3.14 * radius * radius;
}
}
Plain Text
복사
this()
this()함수는 같은 클래스의 다른 생성자를 호출한다.(사용 시 가장 위에서 사용한다)
class Person{
String name;
String passport = "0000000";
public Person(String name) {
this.name = name;
}
public Person(String name, String passport) {
this(name); //this()로 다른 생성자를 호출한다
this.passport = passport;
}
}
public class Switch {
public static void main(String[] args) {
Person kim = new Person("김말똥");
Person hong = new Person("홍길동", "0000-0000");
}
}
Plain Text
복사
상속
자식 클래스가 부모 클래스(기존클래스)를 재사용하는 것으로 코드의 중복을 방지한다. extends 로 상속한다. 자식 클래스는 부모 클래스의 모든 멤버를 상속 받는다. 부모클래스의 변경은 자식클래스에 영향을 미치지만 자식클래스의 변경은 부모클래스에 아무런 영향을 미치지 않는다.
•
자식(상위/super)클래스, 부모(하위/sub)클래스
class 자식클래스 extends 부모클래스 {
}
접근 제한자
접근제한자(Access Modifier)는 외부로부터 데이터를 보호하기 위해 사용하고 외부로부터의 접근을 제한한다.
•
private: 같은 클래스 내에서만 접근이 가능하다.
•
default: 같은 패키지 내에서만 접근이 가능하다.
•
protected: 같은 패키지 내에서, 그리고 다른 패키지의 자식 클래스에 접근이 가능하다.
•
public: 접근 제한이 전혀 없다.
클래스의 접근 제한자
•
public: 어디서든 인스턴스 생성이 가능하다.
•
default: 동일 패키지로 묶인 클래스 내에서만 인스턴스 생성을 허용한다. (다른 패키지에서는 인스턴스 생성 불가능)
```java
import edu.lion.car.Hcar;
import edu.lion.car.Scar; //컴파일 에러
public class JvmTest {
public static void main(String[] args) {
Hcar hcar = new Hcar();
Scar scar = new Scar(); // 에러. 패키지에서 default로 클래스를 정의하면, 다른 패키지에서 인스턴스를 만들 수 없다.
}
}
```
Plain Text
복사
변수 & 메서드 접근 제한자
•
클래스 : public, default
•
변수, 메서드 : public, protected, default, private
주의사항
1.
하나의 자바 파일에 한개의 public class만 들어간다.
2.
생성자도 메소드다 (접근 제한자를 올바르게 설정해야 객체를 만들 수 있다)
정보은닉
변수에 다이렉트로 접근하지 않도록 문법적으로 제한한다. 메소드를 통해서 값을 설정하도록 하여 정보를 보호한다. (실무에서는 모든 변수를 private으로 선언한다) 모든 변수에 대해서 getter, setter 함수를 만들어서 값을 읽고 쓴다.
•
getter, setter 함수 설정
소스코드 마우스 오른쪽 클릭 > source > Generate Getters and Setter
패키지
서로 관련된 자바 클래스와 인터페이스의 묶음이다. 인터넷 도메인 이름의 역순으로 이름을 구성한다. 콤마(.)로 패키지를 구분한다.
package edu.lion.prj class A{ }
Plain Text
복사
패키지가 필요한 이유
1.
같은 위치에 똑같은 이름의 클래스 파일(.java)을 둘 수 없다.
2.
다른 위치에 있는 똑같은 이름의 클래스를 실행하면 동일한 이름의 인스턴스가 생성되어 충돌이 일어나기 때문이다.