부트캠프

Java 객체지향 프로그래밍 기초 2

hunm719 2022. 12. 28. 16:15

1.생성자(Constructor) : 객체를 생성하는 역할을 하는 클래스의 구성 요소로 인스턴스 변수들을 초기화하는 데 사용되는 특수한 메서드

 

생성자는 메서드와 비슷한 구조지만 두 가지 차이가 있음


(1)생성자의 이름은 반드시 클래스의 이름과 같아야 함.
(2)생성자는 리턴 타입이 없음.
 *무언가를 ‘리턴하지 않는다’를 의미하는 void와는 다르게 생성자는 아예 리턴 타입 자체가 존재하지 않기 때문에 void키워드를 사용하지 않음

 

생성자 기본 구조 예시
클래스명(매개변수) {
...생략...
}

 

 

1-1.기본 생성자(Default Constructor) = 매개변수가 없는 생성자
 *모든 클래스에는 반드시 하나 이상의 생성자가 존재해야 함.
 *만약 생성자가 클래스 안에 포함되어 있지 않은 경우에는 자바 컴파일러가 기본 생성자를 자동으로 추가

클래스명(){} //기본 생성자
DefaultConst(){} // 예시) DefaultConst 클래스의 기본 생성자

위의 예시처럼 컴파일러가 자동으로 추가해주는 기본 생성자에는 매개변수도 없고 바디에 아무런 내용이 없음.

 

1-2.매개변수가 있는 생성자
 *메서드처럼 매개변수를 통해 호출 시에 해당 값을 받아 인스턴스를 초기화하는 데 사용됨.

 

1-3. this() 와 this 의 차이
(1)this() 메서드는 자신이 속한 클래스에서 다른 생성자를 호출하는 경우에 사용
  -this() 메서드는 반드시 생성자의 내부에서만 사용할 수 있음.
  -this() 메서드는 반드시 생성자의 첫 줄에 위치해야 함.

(2)this 메서드는 인스턴스 자신을 가리키며, this를 통해서 인스턴스 자신의 변수에 접근할 수 있음.
 *참조변수를 통해 인스턴스의 멤버에 접근할 수 있는 것과 비슷
 *주로 인스턴스의 필드명과 지역변수를 구분하기 위한 용도로 사용

 

2.내부 클래스(Inner Class) : 클래스 내에 선언된 클래스로, 외부 클래스와 내부 클래스가 서로 연관되어 있을 때 사용
 -외부 클래스의 멤버들에 쉽게 접근 할 수 있고, 코드의 복잡성을 줄일 수 있음.
 -외부적으로 불필요한 데이터를 감출 수 있어 캡슐화(encapsulation)를 달성하는 데 유용함.

 

class Outer { // 외부 클래스

       class Inner {

             // 인스턴스 내부 클래스
       }

       static class StaticInner {
             // 정적 내부 클래스
       }

       void run() {
             class LocalInner {
             // 지역 내부 클래스
             }
       }

 

(1)인스턴스 내부 클래스 : 객체 내부에 멤버의 형태로 존재하며, 외부 클래스의 모든 접근 지정자의 멤버에 접근할 수 있음
 *인스턴스 내부 클래스는 반드시 외부 클래스를 생성한 이후에 사용해야 한다는 점을 꼭 기억하기.
  (따라서 클래스의 생성과 상관없이 사용할 수 있는 정적 변수와 정적 메서드는 인스턴스 내부 클래스에서 선언할 수 없음)

(2)정적 내부 클래스 : 인스턴스 내부 클래스와 동일하게 클래스의 멤버 변수 위치에 정의하지만, static 키워드를 사용한다는 점에서 차이가 있음.

(3)지역 내부 클래스 : 클래스의 멤버가 아닌 메서드 내에서 정의되는 내부클래스

내부 클래스 종류별 차이점

 

 

이미지 및 내용 출처 - code states

'부트캠프' 카테고리의 다른 글

Java 객체지향 프로그래밍 심화 2  (1) 2022.12.30
Java 객체지향 프로그래밍 심화  (3) 2022.12.29
Java 객체지향 프로그래밍 기초  (1) 2022.12.27
Java 배열  (0) 2022.12.26
Java 조건문 - 반복문  (1) 2022.12.23