목차
[TIL] Day 10 — Java 상속 심화 + 싱글턴 패턴
날짜: 2025-10-31
기술 스택: Java OOP Inheritance Singleton super
부트캠프: 풀스택 개발자 부트캠프 2주차
상속 (Inheritance)
class Animal {
String name;
void eat() { System.out.println(name + " 먹는 중"); }
}
class Dog extends Animal { // extends 키워드
void bark() { System.out.println("멍멍"); }
}
Dog d = new Dog();
d.name = "하루"; // 부모 필드 상속
d.eat(); // 부모 메서드 상속
d.bark(); // 자식 메서드
- 자바는 단일 상속만 지원 (1개의 부모 클래스만)
private멤버는 상속 관계에서 직접 접근 불가, getter/setter 통해 접근
super 키워드
class Person {
String name;
Person(String name) { this.name = name; }
void introduce() { System.out.println("이름: " + name); }
}
class Student extends Person {
int grade;
Student(String name, int grade) {
super(name); // 부모 생성자 호출 — 첫 줄에 위치
this.grade = grade;
}
@Override
void introduce() {
super.introduce(); // 부모 메서드 호출
System.out.println("학년: " + grade);
}
}
| 키워드 | 역할 |
|---|---|
this |
현재 객체 참조 / this()로 같은 클래스 다른 생성자 호출 |
super |
부모 클래스 참조 / super()로 부모 생성자 호출 |
toString() / equals() 오버라이딩
class Point {
int x, y;
Point(int x, int y) { this.x = x; this.y = y; }
@Override
public String toString() {
return "Point(" + x + ", " + y + ")";
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Point)) return false;
Point p = (Point) obj;
return this.x == p.x && this.y == p.y;
}
}
Point p1 = new Point(1, 2);
System.out.println(p1); // toString() 자동 호출 → "Point(1, 2)"
p1.equals(new Point(1, 2)); // true
제어자(Modifier) 정리
| 제어자 | 사용 가능한 곳 | 특징 |
|---|---|---|
static |
멤버변수, 메서드, 초기화 블록 | 객체 없이 사용 |
final |
클래스, 메서드, 변수 | 클래스: 상속 불가, 메서드: 오버라이딩 불가, 변수: 수정 불가 |
abstract |
클래스, 메서드 | 추상 클래스 선언, 자식이 반드시 구현 |
싱글턴 패턴 (Singleton Pattern)
public class DatabaseConnection {
private static DatabaseConnection instance; // 유일 객체
private DatabaseConnection() {} // 외부 생성 차단
public static DatabaseConnection getInstance() {
if (instance == null) {
instance = new DatabaseConnection();
}
return instance;
}
}
// 사용 — 둘 다 같은 객체
DatabaseConnection c1 = DatabaseConnection.getInstance();
DatabaseConnection c2 = DatabaseConnection.getInstance();
System.out.println(c1 == c2); // true
싱글턴 활용 사례: DB 커넥션 풀, 로그 매니저, 환경 설정 객체, 스레드 풀
트러블슈팅
super() 위치 오류
super()는 자식 생성자 첫 줄에 있어야 함. 두 번째 줄에 위치 시 컴파일 오류
Singleton 스레드 안전 문제
- 위의 코드는 단일 스레드에서는 정상, 멀티스레드 환경에서는 race condition 발생 가능
- 해결:
synchronized키워드 또는 이너 클래스 홀더 패턴(Initialization-on-demand holder) 사용
더 알아볼 것
-
abstract classvsinterface차이 -
final+ 상속 제한 실제 사용 사례 - Singleton 스레드 안전 구현 (
double-checked locking) -
Object.hashCode()vsequals()관계 원칙 - 자바 코딩 컨벤션: 패키지 이름 스타일 (
com.company.project)
'⏳ Time Log > 1. One Day (Daily · TIL)' 카테고리의 다른 글
| [TIL] Day 12 — Java 다형성 + 추상클래스 + 인터페이스 (0) | 2026.02.19 |
|---|---|
| [TIL] Day 11 — Java 클래스 구조 심화 + 다형성 개념 (0) | 2026.02.18 |
| [TIL] Day 09 — Java 생성자/오버라이딩/다형성, CSS float 원리 (0) | 2026.02.18 |
| [TIL] Day 08 — Java 접근 제어자와 캡슐화, static (0) | 2026.02.18 |