유연성을 확보하기 위해 공통적인 것을 추출하고 공통적이지 않은(불필요한 부분) 것을 제거하는 것을 의미한다.
추상화 과정을 통해 객체(Object)가 도출이 되며, 이러한 객체를 생성하기 위해 클래스를 설계하게 된다.
즉, 추상화는 현실세계의 복잡한 사건을 단순화하여 새로운 객체 지향 세계를 창조해나가는 과정이다.
추상화의 목적은 (객체들의) 유연성을 확보하기 위함이다.
여러 곳에 적용될 수 있는 유연한 객체를 의미한다. 재사용성이 높아질 수 있게 한다는 뜻
class Car {
public void start() {
System.out.println("자동차가 시동을 겁니다.");
}
public void drive() {
System.out.println("자동차가 달립니다.");
}
}
💡 추상화의 핵심
사용자가 내부 엔진 작동 방식을 몰라도 start()와 drive()만 사용하면 자동차를 움직일 수 있다.
인스턴스를 생성할 때 초기 수행할 명령이 있는 경우 미리 작성해두고, 인스턴스를 생성할 때 단 한 번 호출되는 함수이다.
생성자를 사용하면 객체를 생성하는 시점에 즉시 필요한 기능을 수행 가능.
객체를 생성하고 이후에 바로 초기값을 할당해야 하는 경우에 사용한다.
인스턴스를 생성할 때 클래스명 레퍼런스변수 = new 클래스명(); 이렇게 사용해왔다.
new 뒤에 클래스명은 사실 생성자(constructor)라는 메소드를 호출하는 구문이다.
생성자 함수에 매개변수가 없는 생성자를 기본생성자(default constructor)라고 하며, 기본 생성자는 compiler에 의해 자동으로 추가되기 때문에 명시적으로 작성하지 않고 사용할 수 있다.
public User() {
}
생성자를 써주지 않으면 이렇게 매개변수가 없는 기본 생성자가 생긴다.
만약 자바에서 기본 생성자를 만들어주지 않는다면,
생성자 기능이 필요하지 않은 경우에도 모든 클래스에 개발자가 직접 기본 생성자를 정의해야 한다.
생성자 기능을 사용하지 않는 경우도 많기 때문에 이런 편의 기능을 제공한다.
하지만 명시적으로 써주는 것이 좋다.
매개변수가있는 생성자를 만들어버리면 기본 생성자가 자동으로 생기지 않는다.
따라서 매개변수가 있는 생성자를 만든 후 기본 생성자를 호출하려고 하면 오류가 발생한다.
public User(String id, String pwd, String name, Date enrollDate) {
this.id = id;
this.pwd = pwd;
this.name = name;
this.enrollDate = enrollDate;
}
this는 인스턴스 자신의 참조값을 가리킨다.
매개변수가 멤버 변수보다 코드 블럭의 더 안쪽에 있기 때문에 우선순위를 가진다.
public User(String id) {
id = id;
}
이렇게 해버리면 양쪽 id 다 매개변수의 id를 가리키게 된다.
보통 멤버 변수와 매개 변수의 이름을 같게하기 때문에 this. 을 써주는편이다.
public User(String id) {
id1 = id;
}
멤버 변수가 String id1; 처럼 매개 변수와 이름이 다르다면 this를 적지 않아도 된다.
public User(String id, String pwd, String name) {
System.out.println("매개변수있는 생성자 호출");
/* 설명
* 생성자 안에서의 this. 은 이 생성자로 만들어질 객체에 접근하는 것이다. */
this.id = id;
this.pwd = pwd;
this.name = name;
System.out.println("id = " + id + ", pwd = " + pwd + ", name = " + name);
}
public User(String id, String pwd, String name, Date enrollDate) {
// this.id = id;
// this.pwd = pwd;
// this.name = name;
this(id, pwd, name);
this.enrollDate = enrollDate;
}
this() 를 사용하면 생성자 내부에서 다른 생성자를 호출할 수 있다.