[Section 1] Java 객체지향 프로그래밍 기초(2)

현이·2023년 2월 24일
0
post-thumbnail

사진은 베르사유의 그랑 트리아농 방 중 하나 - 방마다 다른 색으로 꾸며져있다

생성자는 반복 학습으로 익숙해져 있는 상태였지만, 종합 퀴즈를 풀면서 리턴 타입이 상관없다는 부분을 까먹고 있던거 보니까 다시 정리해야겠다! 내부 클래스는 공부한 기억이 없어서 조금 생소했다. 변수들 유효 범위가 아직 제대로 와닿지 않아서 직접 코딩해보며 좀더 익혀야겠다.




생성자

  • 인스턴스가 생성될 때 호출되는 초기화 메서드
  • 선언 방법
    1. 생성자 이름 = 클래스 이름
    2. 리턴 타입❌
  • 생성자도 오버로딩 가능!

기본 생성자 vs 매개변수가 있는 생성자

  • 생성자 따로 안만들어도 없으면 자바 컴파일러가 자동으로 생성해줌
  • 생성자 따로 만들어줬으면?
    -> default constructor 안 생김!
    -> 매개변수 있는 생성자만 만들고 인자없이 객체 생성하면 오류남!

컴파일 결과:

컴파일 에러가 난다...

=> 매개변수가 있는 생성자 만들때는 매개변수 없는 디폴트 생성자도 꼭 만들어주는게 나음!

+) 오버로딩에는 반환타입 상관이 없다!
=> 생성자는 반환값이 없으니까 상관없지만 기억하기!


this()

  • this() : 자신이 속한 클래스에서 다른 생성자 호출
  • 사용 조건
    1. 생성자 내부에서만 사용 가능
    2. 생성자 블록 첫 줄에서만 호출 가능

this

  • 인스턴스 자신을 가리킴
  • 매개변수 이름과 필드 멤버 이름이 같을 때 구분해주기 위한 용도
    (인스턴스의 필드 이름이 지역 변수에 가려질거 방지)
//사용 예시
class Student{
	private double id;
    public Student(){
    	System.out.println("학생 생성!");
    }
    public Student(double id){
    	this(); //다른 생성자 호출
        this.id = id; //클래스의 id 속성 값을 지역 변수 id로 초기화
    }
}



내부 클래스(Inner Class)

  • 말 그대로 클래스 안의 클래스
class Outer { // 외부 클래스
	
	class Inner {
		// 인스턴스 내부 클래스	
	}
	
	static class StaticInner {
		// 정적 내부 클래스
	}

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

=> 정적 내부 클래스만 static 이라서 외부전역 변수에만 접근 가능
(인스턴스 변수 접근 ❌)
=> 나머지 클래스들은 외부 인스턴스 변수, 외부 전역 변수 모두 접근 가능

멤버 내부 클래스: 인스턴스 내부 클래스, 정적 내부 클래스
지역 내부 클래스: 클래스 메서드 내에 정의되는 클래스

  • 클래스 메서드 안에서는 this() 호출 불가능! (this는 인스턴스 자기 자신 가리키는 거니까)

  • 정적 내부 클래스는 외부 클래스의 존재와 무관하게 정적 변수 사용 가능

//정적 이너 클래스의 객체 생성
Outer.StaticInClass a = new Outer.StaticInClass(); 
a.test();
  • 지역 내부 클래스는 메서드 내에서 선언 하고 바로 객체 생성해서 사용

0개의 댓글