💡 1. 객체 설계 요약!
🔍 1-1. 클래스라는 도구로 객체를 설계한다.
책을 기준으로 살펴보자.
책이 가지고 있는 정보의 종류는 다양하다
제목, 출판사,저자, 가격, 페이지수, 이미지, 두께,무게 , 재질 등등 많은 부분을 고려할 수 있는데
여기서 프로그램 내에서 정의하여 사용하고자 하는 특징만을 골라 정의하는 것을 Modeling이라고 한다.
이렇게 특정 정보만을 가지고 모델링한 BookVO라는 class를 만들고
내부의 객체 생성 메소드를 이용해 객체를 생성해준다.
🔍 1-2. 설계된 클래스를 이용해 객체 생성하기
BookVO b = new BookVO();
객체를 생성해 주면 Heap 메모리 영역에 객체가 생성됨과 동시에
this 라는 자기자신을 가르키는 객체가 하나 더 생성이 된다.
이때 b 라는 객체의 변수(인스턴스 변수)를 이용해
인스턴스 변수 뒤에 dot 연산자를 붙여 메모리 영역에 생성된 객체의 정보에 접근이 가능하다.
이때 접근 허용자가 public 이므로 모든 곳에서 .(dot)연산자를 통해 접근하고 수정이 가능한데
이러한 부분은 여러부분에서 잘못된 정보로 바뀔 수 있어 설계할 때 접근성의 규제를 줄 수 있다.
public 이 아닌 private 혹은 protect 등등 public 외에도 여러가지 접근제한자가 있으며 상황에 맞게 사용 할 수 있다.
💡 2. 생성자 메서드 (Constructor)
생성자 메서드 역할
객체를 생성할 때 사용되는 메서드이다.
객체를 생성후에 객체를 초기화를 진행해준다.( 생성자 메서드의 유일한 동작적 기능)
생성자 메서드 특징
클래스 이름과 동일한 메서드이다.
메서드의 return type이 없다( void랑은 다르다)
public 접근 권한을 갖는다. (private 생성자도 있을 수 있음)
생성자가 없을 때는 기본 생성자(default contstructor)가 만들어 진다.
객체를 초기화 하는 방법.
객체를 초기화 할때에는 객체를 사용한 곳에서 선언한 인스턴스(객체)변수 를 통해서
데이터를 직접 입력하는 방법으로 초기화가 가능하다.
다른 방법으로는 생성자 메서드를 통해서 초기화가 가능하다.
BookVo 객체를 생성한 곳에 생성자 메소드 안에 초기값을 위와 같이 넣어준다.
생성자 메소드의 매개변수를 통해서 전달한 초기값은
BookVO 클래스 내부의 해당 매개변수의 개수와 타입을 동일하게 가지고 있는 생성자 메소드를 찾아간다.
이때 객체를 생성할 때 만들어 졌던 자기 자신을 가르키는 this 객체를 이용하여
클래스 BookVO 에서 선언한 기억 공간을 가르키게 된다.
이를 통해 클래스 내부의 데이터에 해당 값으로 저장할 수 있다.(초기화 진행)
💡 코드로 초기화 과정 살펴보기
왼쪽에 TPC12 의 클래스는 BookVO 객체를 생성을 하면 동시에 초기화가 진행된다.
BookVO b1 = new BookVO();
BookVO 클래스 내부의 생성자 메서드에 이미 초기화 작업이 되어있기 때문이다.
출력하면 바로 초기화된 데이터 값들이 출력된다.
그래서 하나의 책을 더 생성해도 동일한 초기값을 갖는다. (같은 생성자 메서드를 사용하기 때문에)
💡 Overloading(중복정의) 을 이용해서 생성자 메서드 접근하기
생성자 메서드에 매개변수 값( 초기값)을 넣은 객체를 생성해보자.
이러한 생성자 메서드를 이용하기 위해서는
BookVO 클래스에 동일한 매개변수의 타입과 개수를 갖는 생성자 클래스가 필요하다.
생성자에 받고자 하는 타입과 변수명을 각각의 매개변수마다 선언을 해준다.
이렇게 자기 자신을 가르키는 객체인 this 를 통해 생성된 객체의 기억공간에서 받아온 데이터를 저장하면된다.
하나의 클래스 안에 이름이 같은 메서드가 여러개 존재하는 것
이를 생성자 메서드의 중복정의. 즉 (overloading) 이라고 한다.
단! 메서드 이름이 같다고 무조건 정의되지는 않는다.
매개변수의 개수와 종류가 달라야 메서드의 이름이 같아도 서로 다른 메서드로 인식된다.
여기서
매 개변수 안에 아무런 데이터를 갖고 있지 않은 생성자는 default constructure 인데
만약 클래스 내부에 다른 생성자를 정의했고
매개변수가 없는 default 생성자를 없애버리면
기존의 default 생성자로 생성했던 객체는 오류가 발생한다.
default 생성자는 다른 생성자를 선언한 순간 자동으로 만들어 지지 않고 직접 선언해줘야 한다.
default 생성자는 클래스 내에 생성자 메서드가 없는 경우에만 자동으로 생성되는 것이다.
Java 관련 개념을 알려주실 때 그 내부 동작이 어떻게 구현되는지 자세하게 알수 있는 강의입니다.
출처: Java TPC (생각하고, 표현하고, 코딩하고) 대시보드 - 인프런 | 강의 (inflearn.com)
'Java > Java 활용 개념 정리' 카테고리의 다른 글
[Java]class, object, instance 상호 관계. (0) | 2023.02.02 |
---|---|
[Java] private 생성자와 static의 관계 (0) | 2023.02.01 |
[Java] 사용자 정의 자료형(feat. 생성자 method()) (0) | 2023.02.01 |
[Java] JVM의 Memory 활용 개념(static 유무의 차이) (0) | 2023.01.31 |
[Java] 메서드도 변수이다. (0) | 2023.01.31 |
댓글