개발자 꼬부기의 성장일기
10일차 - Java 객체지향 기초(2) : 생성자, 내부클래스 본문
회고
객체지향 OOP 개념.. 이론으로 배웠던 것보다 실습해보면서 간단한 프로그램을 만들어보니.... 쉽지 않았다.
여태까지 개발하면서는 거의 순차적으로 개발을 해왔던것 같아서 늘 부족하다고 생각했던것 같다.
자바 개발자는 생각보다 쉽지 않은 길일것 같다.
생성자와 내부클래스
생성자
생성자는 클래스의 구성요소로서 인스턴스가 생성될때 호출되는 메서드이다.
new라는 연산자를 통해 생성자 함수가 호출된다.
생성자 함수는 클래스명과 같아야한다.
생성자는 리턴 타입이 없다. void 키워드도 사용하지 않는다.
class Constructor {
Constructor() { // (1) 생성자 오버로딩
System.out.println("1번 생성자");
}
Constructor(String str) { // (2)
System.out.println("2번 생성자");
}
Constructor(int a, int b) { // (3)
System.out.println("3번 생성자");
}
}
오버로딩을 활용하여 같은 이름을 가진 생성자 여러 개를 만들 수 있다.

this vs this()
this() 메서드는 자신이 속한 클래스에서 다른 생성자를 호출하는 경우에 사용
this() 메서드는 반드시 생성자의 내부에서만 사용할 수 있다.
this() 메서드는 반드시 생성자의 첫 줄에 위치해야 한다.
class Human {
private String name;
private int age;
}
Human human = new Human("다정", 30);
//=> 스택영역에 human이라는 주소값 변수를 쌓는다. 힙영역에 new를 이용해서 새 인스턴스 방을 만든다.
Human() 생성자 함수를 통해 값을 할당한다.
System.out.println(human.name);
//=> human의 주소값에 찾아가서 name 속성을 찾는다.
human = new Human("다정", 33);
//=> human의 주소값을 새로운 인스턴스와 연결되는 주소값으로 대체한다.
//=> 이전에 가리켰던 "다정", 30의 인스턴스는 연결이 끊어지고 찾을 수 없는 쓰레기값이 된다.
내부클래스
외부 클래스 내에 선언된 클래스 캡슐화에 용이, 코드의 복잡성을 줄임.
class Outer { // 외부 클래스
class Inner {
// 인스턴스 내부 클래스
}
static class StaticInner {
// 정적 내부 클래스
}
void run() {
class LocalInner {
// 지역 내부 클래스
}
}
}
멤버 내부 클래스
인스턴스 내부 클래스와 정적 내부클래스를 하나로 묶어 멤버 내부 클래스라고 한다.
인스턴스 내부 클래스
- 인스턴스 내부 클래스는 반드시 외부 클래스를 생성한 이후에 사용해야 한다.
- private 접근 제어자(해당 클래스 안에서만 접근 가능한 멤버에 사용)를 사용해도
- 내부에서 외부 클래스의 인스턴스 변수와 정적 변수에 각각 접근하여 해당 값을 사용할 수 있다.
- 클래스의 생성과 상관없이 사용할 수 있는 정적 변수와 정적 메서드는 인스턴스 내부 클래스에서 선언할 수 없다.
정적 내부 클래스
- 정적 내부 클래스는 인스턴스 내부 클래스와 동일하게 클래스의 멤버 변수 위치에 정의하지만,
- static 키워드를 사용한다는 점에서 차이가 있다.
'언어공부 > [코드스테이츠] 백엔드부트캠프' 카테고리의 다른 글
12일차 - Java 객체지향 심화(2) : 다형성, 추상화 (0) | 2023.04.26 |
---|---|
11일차 - Java 객체지향 심화(1) : 상속, 캡슐화 (0) | 2023.04.25 |
9일차 - Java 객체지향 기초(1) : 클래스와 객체, 필드와 메서드 (0) | 2023.04.21 |
8일차 - Java 기초(3) : 배열 (0) | 2023.04.20 |
7일차 - Java 기초(2) : 반복문 (0) | 2023.04.19 |