프로그래밍을 하다 보면 어느 날 갑자기 이런 에러 메시지들을 만나게 됩니다.java.lang.NullPointerExceptionjava.lang.OutOfMemoryError둘 다 뭔가 문제가 있다는 건 알겠는데…Error? Exception?이게 뭐가 다른 걸까요? 이번 글에서는 자바에서 Error와 Exception이 각각 무엇인지, 그리고 이 둘의 차이점과 처리 방법에 대해 쉽게 설명해 드릴게요! 공통점Error와 Exception 모두 자바에서 문제가 발생했을 때 사용하는 Throwable 클래스의 자식 클래스입니다.java.lang.Throwable ├── java.lang.Error └── java.lang.Exception즉, 둘 다 "문제가 생겼어!" 라는 신호를 보내는 존재들입니다. ..
전체 글
개발 여행에 대한 기록내부 클래스란? ✅ "클래스 안에 정의된 또 다른 클래스"를 말합니다. 보통 클래스는 하나의 파일에 하나씩 정의하는 것이 일반적이지만,B 클래스가 A 클래스의 논리적 일부이거나, 그 안에서만 사용될 필요가 있을 때,내부 클래스로 선언합니다. 예를 들어,우리가 자동차라는 클래스를 만든다고 해보겠습니다.그 안에 들어가는 ‘엔진’이라는 부품도 뭔가 복잡한 구조를 가질 수 있습니다.그런데 이 엔진은 자동차 안에서만 쓰이고, 밖에선 따로 필요가 없습니다. 그러면 어떻게 할까요?✅ "아예 자동차 안에 엔진 설계도도 같이 넣자!"➡ 이게 바로 내부 클래스입니다! 내부 클래스를 사용하는 이유항목설명논리적 관계 표현외부 클래스와 강하게 연관된 클래스를 내부로 묶어줌캡슐화 강화불필요하게 외부로 노출되는 것을 막음외부 클..
자바에서 추상 클래스(Abstract Class)와 인터페이스(Interface)는모두 “설계도”처럼 동작합니다.하지만 목적과 사용 방법은 다릅니다.이번 글에서는 두 개념의 차이를 비교 중심으로 쉽게 정리해보겠습니다! 추상 클래스와 인터페이스란?자바에서 코드를 설계할 때,공통된 기능이나 규칙을 미리 정해두고 싶을 때 사용하는 것이 바로✅ 추상 클래스와 인터페이스입니다.둘 다 객체를 만들 수는 없지만,“어떤 기능이 필요하다”는 규칙을 미리 정해주는 역할을 합니다.추상 클래스는 "일부 기능을 직접 제공하면서 나머지는 자식에게 맡기고 싶을 때"인터페이스는 "**기능 이름만 약속하고, 구현은 전적으로 자식에게 맡기고 싶을 때" 👇 자세한 내용은 아래 글을 확인해주세요! 추상 클래스 [Java] 28. 추상..
인터페이스란? 클래스가 어떤 기능을 반드시 구현해야 하는지 정해놓은 설계도입니다.메서드의 형태(이름, 매개변수, 리턴 타입)만 정의하고, 구현은 하지 않음클래스가 인터페이스를 implements(구현) 하면, 그 안의 메서드를 무조건 오버라이딩 해야 합니다.쉽게 말하면,"이런 기능이 필요해! 하지만 어떻게 만들지는 네가 알아서 해"👉 이런식으로 필요한 클래스에게 강제로 만들게 하는거죠! 문법* 인터페이스 (설계도)interface 인터페이스명 { 반환타입 메서드이름(매개변수);}interface 키워드로 선언메서드의 "이름만" 정의하고, 실제 내용(구현)은 없음모든 메서드는 기본적으로 public abstract (생략해도 자동으로 붙음)클래스에게 "이 메서드는 꼭 만들어!" 라고 기능을 강제하..
추상 클래스란?하나 이상의 추상 메서드(몸체 없는 메서드)를 포함하고 있는 클래스직접 객체를 만들 수 없고, 상속을 통해서만 사용할 수 있는 클래스입니다.일부는 직접 구현하고, 일부는 자식 클래스에게 "이건 네가 직접 구현해!" 하고 강제하는 설계도 역할을 합니다. 선언 문법abstract class 클래스명 { // 추상 메서드 (몸체 없음) abstract void 메서드이름(); // 일반 메서드 (몸체 있음) void 일반메서드() { System.out.println("일반 메서드 실행"); }} 특징특징설명 abstract 키워드 사용 클래스 또는 메서드에 붙임객체 생성 불가 ❌ 직접 생성 불가 (new로 객체 생성할 수 없음)상속✅ 자식 클래스가 상..
추상 메서드란? 메서드의 선언만 있고, 몸체(구현부)가 없는 메서드자식 클래스에서 반드시 오버라이딩(재정의) 해야합니다. 선언 문법abstract 반환타입 메서드이름(매개변수);예시abstract void sound(); abstract 키워드를 사용중괄호 {} 없이 세미콜론 ; 으로 끝남반드시 추상 클래스나 인터페이스 안에서만 선언 가능💡 추상 클래스, 인터페이스는 추후에 다룰 내용입니다! 특징특징설명구현이 없음메서드 몸체가 존재하지 않음 자식 클래스 필수 구현 오버라이딩 강제됨 클래스도 추상이어야 함 추상 메서드가 있는 클래스는 abstract로 선언해야 함 인터페이스에도 사용 인터페이스의 모든 메서드는 기본적으로 추상 메서드 (Java 8 이전까지) 사용 예시* Animal 클래스 (추상..
다형성을 이해했다면, 다음으로 꼭 짚고 넘어가야 할 개념이 있습니다.바로 업캐스팅, 다운캐스팅, 그리고 instanceof 연산자입니다.이들은 다형성이 실제로 코드에서 어떻게 동작하는지를 결정짓는 핵심 키워드들입니다. 업캐스팅 (Upcasting) 자식 클래스의 객체를 부모 클래스 타입으로 참조하는 것입니다.자동으로 형변환되며, 명시적인 캐스팅 없이도 가능합니다. 예시 코드* Animal 클래스 (부모 클래스)class Animal { public void sound() { System.out.println("동물이 소리를 냅니다."); }}* Dog 클래스 (자식 클래스)class Dog extends Animal { @Override public void soun..
배수란? 어떤 정수 A에 1, 2, 3, ... 과 같은 자연수를 곱해 만든 수를 A의 배수라고 합니다. 즉, A × 자연수 = A의 배수 예를 들어,3의 배수는?👉 3×1=3, 3×2=6, 3×3=9, …3, 6, 9, 12, 15, ... 이 모두가 3의 배수입니다. 예시숫자배수 예시22, 4, 6, 8, 10, ...55, 10, 15, 20, ...1010, 20, 30, 40, ...❗ 배수는 무한히 많습니다. 계속 곱하기만 하면 되니까요. 특징모든 자연수는 자기 자신이 가장 작은 배수입니다.A의 배수는 A로 나누어 떨어지는 수입니다.A의 배수라면, A는 그 수의 약수가 됩니다.공배수는 두 수의 공통 배수를 의미합니다.최소공배수(LCM)는 가장 작은 공배수를 의미합니다. 약수와 배수의 차..
약수란?어떤 정수 A를 나누어 떨어지게 하는 수 B가 있을 때, B는 A의 약수라고 합니다. 예를 들어,12 ÷ 3 = 4 → 나누어 떨어지죠?👉 따라서 3은 12의 약수입니다. 예시숫자 12의 약수를 모두 구해볼까요?12를 나눴을 때 나머지가 0이 되는 숫자를 찾으면 됩니다:1 (12 ÷ 1 = 12)2 (12 ÷ 2 = 6)3 (12 ÷ 3 = 4)4 (12 ÷ 4 = 3)6 (12 ÷ 6 = 2)12 (12 ÷ 12 = 1)👉 12의 약수 = {1, 2, 3, 4, 6, 12} 특징특징설명1모든 자연수의 약수는 항상 1과 자기 자신이 포함됩니다.짝수2를 약수로 갖습니다.홀수2로 나눠지지 않기 때문에 2는 약수가 아닙니다.소수약수가 1과 자기 자신밖에 없습니다.약수의 개수어떤 수를 소인수분해하..
다형성이란?✅ 하나의 부모 클래스(또는 인터페이스)로 여러 형태의 자식 객체를 다룰 수 있는 것 즉, 같은 메서드 호출이지만, 객체에 따라 서로 다른 방식으로 동작하는 것을 말합니다. 다형성의 조건상속 (Inheritance) : 부모 클래스를 자식 클래스가 상속받아야 함오버라이딩 (Overriding) : 자식 클래스가 부모의 메서드를 자신에게 맞게 재정의업캐스팅 (Upcasting) : 자식 객체를 부모 타입으로 다룸 다형성의 필요성필요성예시 코드의 재사용성 증가 같은 타입으로 다양한 객체 처리 가능유지보수 쉬움객체만 바꿔치기 해도 동작 변경 가능확장성이 뛰어남새로운 클래스가 추가되어도 기존 코드 수정 거의 없음인터페이스 기반 설계 가능전략 패턴, 의존성 주입, 프레임워크 적용 등 실무 핵심에 사..