공공부하자개발 · 영어 학습 노트
자바
초급자바의 뼈대0/8 완료
  • 00개발 환경과 첫 프로그램
  • 01변수, 데이터 타입, 형변환
  • 02연산자와 제어문
  • 031차원 · 2차원 배열
  • 04클래스, 객체, 생성자, 오버로딩
  • 05접근 제어자와 캡슐화
  • 06메서드 활용 패턴 (초급)
  • 07enum, 패키지와 import, static 과 final
사이트 소개개인정보처리방침연락처
© 2026 공부하자
홈 › 초급 › 04 / 8

클래스, 객체, 생성자, 오버로딩

섹션 7진행 0 / 8
1왜 배우는가2핵심 원리3코드 예제4응용 변형 예제5자주 하는 실수 (Tip)6연습 문제7정리‹ 이전다음 ›

5. 자주 하는 실수 (Tip)

❌ 실수 1: 생성자에서 this 누락으로 필드가 초기화되지 않음

java
Person(String name, int age) {
    name = name;      // 매개변수를 자기 자신에게 대입. 필드는 null 그대로
    age = age;
}

컴파일 오류가 아니라서 찾기 어렵습니다. IDE가 경고를 띄웁니다.

✅ this.name = name; this.age = age;

❌ 실수 2: 생성자를 만든 뒤 기본 생성자를 기대

java
public class Order {
    Order(long id) { this.id = id; }
}
Order o = new Order();     // 컴파일 오류: constructor Order in class Order cannot be applied

생성자를 하나라도 쓰면 컴파일러가 기본 생성자를 만들지 않습니다.

✅ 필요하면 Order() {}를 직접 추가합니다.

❌ 실수 3: 생성자에 반환 타입을 씀

java
public class Order {
    void Order(long id) { this.id = id; }     // 생성자가 아니라 이름이 Order인 메서드!
}
Order o = new Order(5L);    // 컴파일 오류: 매개변수 있는 생성자 없음

✅ 반환 타입을 뺍니다: Order(long id) { ... }

❌ 실수 4: static 메서드에서 인스턴스 멤버 접근

java
public class App {
    int count = 0;
    public static void main(String[] args) {
        count++;         // 컴파일 오류: non-static variable count cannot be referenced from a static context
    }
}

main은 static이라 "어느 객체의 count"인지 알 수 없습니다. 초보자가 가장 자주 만나는 오류 중 하나입니다.

✅ 객체를 만들어 접근하거나(App app = new App(); app.count++;), 정말 공유 값이면 static int count.

❌ 실수 5: 메서드에서 객체를 재대입하고 원본이 바뀌길 기대

java
static void reset(Order o) {
    o = new Order();      // 호출자의 변수는 그대로
}

✅ 필드를 바꾸거나(o.amount = 0;), 새 객체를 return해서 호출자가 받게 합니다: order = reset(order);

❌ 실수 6: 반환 타입만 다른 오버로딩

java
int parse(String s) { ... }
double parse(String s) { ... }    // 컴파일 오류: method parse(String) is already defined

✅ 이름을 다르게 합니다: parseInt, parseDouble. (자바 표준 라이브러리도 이렇게 함)

❌ 실수 7: 객체 배열의 null 칸을 순회

java
Product[] items = new Product[10];
items[0] = new Product(...);
for (Product p : items) {
    System.out.println(p.name);     // 두 번째 칸부터 NullPointerException
}

✅ 실제로 채운 개수(count)까지만 돌거나, if (p == null) continue;. 또는 ArrayList를 씁니다.

자주 하는 실수 (Tip)
  • ❌ 실수 1: 생성자에서 this 누락으로 필드가 초기화되지 않음
  • ❌ 실수 2: 생성자를 만든 뒤 기본 생성자를 기대
  • ❌ 실수 3: 생성자에 반환 타입을 씀
  • ❌ 실수 4: static 메서드에서 인스턴스 멤버 접근
  • ❌ 실수 5: 메서드에서 객체를 재대입하고 원본이 바뀌길 기대
  • ❌ 실수 6: 반환 타입만 다른 오버로딩
  • ❌ 실수 7: 객체 배열의 null 칸을 순회
이전 섹션4 응용 변형 예제5 / 7다음 섹션6 연습 문제