* 해당 글은 백엔드 자바 강의이후 회고 글입니다.
https://bootcamp.likelion.net/school/kdt-backendj-21th
백엔드 부트캠프 21기: Java : 멋사 부트캠프
실전 스킬 기반 백엔드 개발자 취업 완벽 대비 교육
bootcamp.likelion.net
Object 클래스에 대한 간단한 정리
Object 는 모든 클래스에 대한 슈퍼 클래스의 역할을 한다.
아래는 Object 클래스에서 제공해주는 각종 메서드들이다.

위의 메서드들을 간단하게 정리해보자면 다음과 같다.
- clone() : 이 메서드를 통해 카피한 객체(부모 클래스 객체) 를 생성해서 반환해주는 기능을 제공한다.
- finalize() : Gargage Collection 에서 이 객체가 더 이상 참조되지 않는것으로 판단했을 경우 이 객체에 대해 GC 를 호출하는 메서드이다.
- equals(Object obj) : obj 객체와 해당 메서드가 호출된 객체가 서로 동일한지 비교하여 결과로 true 또는 false 를 반환해주는 메서드이다.
- getClass() : 이 메서드를 호출한 객체의 클래스 정보를 반환해주는 메서드이다.
- hashCode() : 이 메서드를 호출한 객체의 해시코드값을 반환해주는 메서드이다. 정확하게는 JVM 메모리 상에서 이 객체를 관리하기 위해 생성한 해시코드 값을 반환해주는 메서드이다.
- toString() : 이 메서드를 호출한 객체에 대한 정보를 문자열로 반환해주는 메서드이다.
notify(), notifyAll(), wait(), wait(long timeout), wait(long timeout, int nanos) 이 메서드들은 스레드 사용 시 활용할 수 있는 메서드들인데 이 부분은 일단 넘어가도록 하자.
+ getClass() 메서드의 경우 해당 객체에 대한 클래스 정보를 받아올 수 있는데 기본적으로 java.lang.Class<T> 클래스에서 제공해주는 각종 메서드들을 함께 사용가능하다.
그에따라 아래와 같이 Class 클래스에서 제공해주는 getSimpleName() 과 같은 메서드를 마치 체이닝을 하듯이 연달아 사용할 수 있다.
((Object)obj).getClass().getSimpleName();
자료형에 관해서는 생략
메서드 오버로딩 관련 정리
오버로드(Overloading) 란 단일 클래스에 같은 이름의 메서드를 매개변수의 타입과 개수를 다르게 하여 여러개 정의하는것을 의미한다.
지역변수와 같은 차이점으로 서로 구분하여 같은 이름의 메서드를 여러개 정의할 수 있다.
객체지향에서 다형성이 필요한 이유는 같은 기능을 다양한 매개변수 형태로 제공하거나 설계해서 사용성을 높일 수 있기 때문인데 이를 메서드 오버로딩과 같은 기능을 통해 확보할 수 있다.
좀 더 딥하게 들어가면 SOLID 원칙에서 OCP(개방, 폐쇄원칙) 원칙에 따라 새로운 기능을 쉽게 추가할 수 있도록 설계하기 위해 사용되기 좋다.
- 개방, 폐쇄에서 개방은 기능 추가에 개방적으로 설계하고 기능 변화에 있어서는 폐쇄적이게 설계하라는 뜻인데 예전에 공부를 하긴 했다만 아직 폐쇄에 대한 부분은 어떻게 했는지 잘 기억나지 않는다. 스프링 관련해서 또 예전에 공부하면서 블로그에 정리했던 글들을 뒤적거려 봐야 할것 같다.
메서드 오버로드 VS 메서드 오버라이드
강의에서는 강사님께서 다루지 않았지만(아직 클래스 상속 개념은 강사님이 다루지 않으셔서) 이 둘의 차이점은 면접에서 나오기 좋은 기초적인 지식에 대한 질문이기 때문에 한번 짧막하게 정리해보자.
- 메서드 오버로드는 앞에서 다뤘듯 같은 이름의 메서드를 지역변수의 자료형, 또는 갯수를 서로 다르게 하여 같은 이름임에도 불구하고 서로 다른 기능을 동작시키는 것을 말한다. 이를 통해 기능의 확장은 쉬우면서도 메서드들이 같은 이름이기에 코드를 깔끔하게 유지보수하기에도 좋다.
- 메서드 오버라이드(Override) 는 어떠한 클래스가 부모 클래스로부터 상속을 받을때 부모 클래스에 있는 메서드를 재정의하는 것으로 이 경우 메서드의 이름과 지역변수를 부모 클래스에 정의되어 있는것과 똑같이 사용하게 된다.
- 대신 자식 클래스에서 부모 클래스로부터 상속받아 오버라이드 한 메서드의 내용을 현재 클래스에 맞게 새로운 기능으로 재정의 할 수 있다. 이것이 바로 오버로드와 오버라이드의 결정적인 차이점이다.
- 메서드 오버로드는 지역변수의 갯수 또는 자료형에 차이를 두어 똑같은 이름의 메서드를 여러개 만들어 제각각의 기능을 사용하는 것이고, 메서드 오버라이드는 부모 클래스에 정의되어 있는 메서드의 이름과 지역변수까지 똑같이 활용하지만 동작하는 기능은 다르게 만들어줄 수 있는것이다.
- 아마도 같은 이름의 메서드인데 기능을 서로 다르게 정의하는 부분은 같으나 지역변수를 그대로 사용해야 하느냐 그렇지 않느냐가 가장 큰 차이라고 볼 수 있겠다.
- 지역변수를 다르게 할 수 있다면 같은 이름의 메서드를 한 클래스 안에서 여러개 만들 수 있는데 반해, 지역변수를 다르게 할 수 없다면 메서드 오버라이드로 받아온 메서드는 한 클래스 안에 단 하나밖에 존재할 수 없게된다. 이로인해 같은 이름의 메서드를 한 클래스 안에서 여러개 만들 수 있느냐 그럴수 없느냐가 갈라지게 된다.
static 메서드와 지역변수 관련은 생략, 어차피 static 메서드가 호출되면 JVM 에서 static&stack 영역에 호출된 메서드와 지역변수가 함께 저장된다는 것은 이미 알고있다.
클래스를 static 으로 import 하는 경우
아래와 같은 클래스를 static 으로 import 해온다고 해보자.
import static java.util.Calendar.*;
이렇게 특정 클래스를 static 으로 import 하고 뒤에 * 를 붙였다면 import 로 참조하는 클래스의 모든 static 메서드 및 필드들을 패키지 명 없이 호출할 수 있게된다.
아래의 코드를 보면 쉽게 이해가 될 것이다.
Calendar c1 = Calendar.getInstance();
Calendar c1 = getInstance();
int year = c1.get(Calendar.YEAR);
int year = c1.get(YEAR);
위의 코드에서 각각은 모두 정확히 똑같은 동작을 수행한다. 단지 getInstance() 메서드가 Calendar 클래스에서 제공해주는 static 메서드이기 때문에 앞의 Calendar 와 같은 클래스 호출을 생략 가능한것이다.
YEAR 또한 Calendar 클래스에서 제공해주는 static 상수이기 때문에 클래스 호출을 생략하고 사용가능하다.
만약 import 를 할 때 Calendar.YEAR 또는 Calendar.getInstacne 와 같이 사용했다면 그외 다른 기능들을 사용하려면 추가로 더 import 를 해야했겠지만 Calendar.* 와 같이 * (all, 모든것을 가져올것) 을 사용했기 때문에 Calendar 클래스에서 제공해주는 모든 static 메서드와 필드들을 별도의 클래스 명이나 패키지 명을 생략하고 사용할 수 있다.
printf 로 데이터 출력하는것 관련은 생략, 너무 기본이다.
'부트캠프 > 후기 챌린지' 카테고리의 다른 글
| [멋쟁이사자처럼부트캠] 백엔드 자바 21기 (2026.01.13) (1) | 2026.01.22 |
|---|---|
| [멋쟁이사자처럼부트캠] 백엔드 자바 21기 (2026.01.09) (0) | 2026.01.09 |
| [멋쟁이사자처럼부트캠] 백엔드 자바 21기 (2026.01.07) (0) | 2026.01.07 |
| [멋쟁이사자처럼부트캠] 백엔드 자바 21기 (2026.01.06) (1) | 2026.01.06 |
| [멋쟁이사자처럼부트캠] 백엔드 자바 21기 (2026.01.05) (0) | 2026.01.05 |