원본 텍스트

Java - Custom Exception

Hello there, future Java wizards! Today, we're going to dive into the magical world of Custom Exceptions in Java. Don't worry if you're new to programming; I'll guide you through this journey step by step, just like I've done for countless students over my years of teaching. So, grab your virtual wands (keyboards), and let's cast some exception spells!

Java - Custom Exception

What Are Exceptions?

Before we delve into custom exceptions, let's quickly recap what exceptions are in Java. Imagine you're cooking a delicious meal, but suddenly you realize you're out of a crucial ingredient. That's similar to an exception in programming – it's an unexpected event that disrupts the normal flow of your program.

Java provides many built-in exceptions, but sometimes, we need to create our own. That's where custom exceptions come in handy!

Need for Java Custom Exceptions

You might wonder, "Why do we need custom exceptions when Java already has so many?" Well, let me explain with a fun analogy.

Imagine you're playing a game of "Catch the Exception." Java's built-in exceptions are like standard balls, but sometimes you need a special ball that fits perfectly in your hand. That's what custom exceptions are – tailored to fit your specific program needs!

Custom exceptions allow us to:

  1. Create more meaningful error messages
  2. Group related exceptions
  3. Add additional properties to exceptions

Creating a Custom Exception in Java

Now, let's roll up our sleeves and create our first custom exception! It's easier than you might think.

Here's the basic structure:

public class MyCustomException extends Exception {
public MyCustomException(String message) {
super(message);
}
}

Let's break this down:

  1. We create a new class and name it (in this case, MyCustomException).
  2. We extend the Exception class (or RuntimeException if we want an unchecked exception).
  3. We create a constructor that takes a String message.
  4. We call the superclass constructor using super(message).

Java Custom Exception Example

Let's create a more practical example. Imagine we're creating a banking application, and we want to create a custom exception for when someone tries to withdraw more money than they have in their account.

public class InsufficientFundsException extends Exception {
private double amount;

public InsufficientFundsException(double amount) {
super("Sorry, insufficient funds. You need " + amount + " more.");
this.amount = amount;
}

public double getAmount() {
return amount;
}
}

Now, let's see how we can use this exception in our BankAccount class:

public class BankAccount {
private double balance;

public BankAccount(double initialBalance) {
this.balance = initialBalance;
}

public void withdraw(double amount) throws InsufficientFundsException {
if (amount > balance) {
double needs = amount - balance;
throw new InsufficientFundsException(needs);
}
balance -= amount;
System.out.println("Withdrawal successful. New balance: " + balance);
}
}

And here's how we might use it in our main program:

public class BankingApp {
public static void main(String[] args) {
BankAccount account = new BankAccount(100);
try {
account.withdraw(150);
} catch (InsufficientFundsException e) {
System.out.println(e.getMessage());
System.out.println("You need to deposit at least: " + e.getAmount());
}
}
}

When you run this program, it will output:

Sorry, insufficient funds. You need 50.0 more.
You need to deposit at least: 50.0

Isn't that neat? We've created a custom exception that not only tells us there's an error but also provides useful information about how much more money is needed!

Example: Creating a Custom Class by Extending RuntimeException

Sometimes, you might want to create an unchecked exception. In that case, you'd extend RuntimeException instead of Exception. Here's an example:

public class InvalidAgeException extends RuntimeException {
public InvalidAgeException(String message) {
super(message);
}
}

And here's how you might use it:

public class Person {
private int age;

public void setAge(int age) {
if (age < 0 || age > 150) {
throw new InvalidAgeException("Age must be between 0 and 150");
}
this.age = age;
}
}

In this case, we don't need to declare the exception in the method signature or catch it explicitly (although it's often a good idea to do so).

Conclusion

And there you have it, folks! You've just learned how to create and use custom exceptions in Java. Remember, custom exceptions are like your personal Swiss Army knife in the coding world – they help you handle errors more effectively and make your code more readable and maintainable.

As you continue your Java journey, you'll find more and more uses for custom exceptions. They're a powerful tool in your programming toolkit, helping you create robust and user-friendly applications.

Keep practicing, keep coding, and most importantly, have fun! After all, as I always tell my students, programming is like magic – you're creating something out of nothing. And now, you can even control how your program behaves when things go wrong. How cool is that?

Until next time, happy coding!

한글 번역

Java - 사용자 정의 예외

안녕하세요, 미래의 Java 마법사 여러분! 오늘 우리는 Java에서 사용자 정의 예외의 마법적인 세계로 뛰어들어 볼 거예요. 프로그래밍 초보자라도 걱정하지 마세요; 저는 이 여정을 단계별로 안내해 드릴게요. 저는 수년 동안 수많은 학생들에게 가르쳐온 경험을 바탕으로 이를 설명해 드릴게요. 그럼 가상의魔杖(키보드)을 손에 들고, 예외의 마법을 쓰러보겠습니다!

예외란 무엇인가요?

사용자 정의 예외에 들어가기 전에, 잠시 Java에서 예외가 무엇인지 다시 한 번 정리해보겠습니다. 맛있는 요리를 하다가 갑자기 중요한 재료가 떨어졌다는 상상해보세요. 이는 프로그래밍에서의 예외와 비슷합니다. 예외는 프로그램의 정상적인 흐름을 방해하는 예상치 못한 이벤트입니다.

Java는 많은 내장된 예외를 제공하지만, 때로는 우리가 직접 만들 필요가 있습니다. 이때 사용자 정의 예외가 유용하게 쓰입니다!

Java 사용자 정의 예외의 필요성

"Java는 이미 많은 예외를 제공하고 있잖아. 왜 사용자 정의 예외가 필요한 거야?"라고 고개를 갸우뚱이시겠군요. 재미있는 비유로 설명해드릴게요.

상상해보세요, "예외를 잡는 게임"을 하고 있다면, Java의 내장된 예외는 표준 공이고, 때로는 손에 딱 맞는 특별한 공이 필요할 거예요. 그게 바로 사용자 정의 예외입니다. 프로그램의 특정 요구에 맞춰 맞춤형으로 만들어진 것입니다!

사용자 정의 예외는 다음과 같은 기능을 제공합니다:

  1. 더 의미 있는 오류 메시지를 생성합니다.
  2. 관련된 예외를 그룹화할 수 있습니다.
  3. 예외에 추가 속성을 추가할 수 있습니다.

Java에서 사용자 정의 예외 생성하기

이제 손을 dirtup하고 우리의 첫 번째 사용자 정의 예외를 만들어보겠습니다! 생각보다 간단합니다.

기본 구조는 다음과 같습니다:

public class MyCustomException extends Exception {
public MyCustomException(String message) {
super(message);
}
}

이를 설명해보겠습니다:

  1. 새로운 클래스를 만들고 이름을 지정합니다 (이 경우 MyCustomException).
  2. Exception 클래스를 확장합니다 (또는 비검사 예외를 원하면 RuntimeException을 확장합니다).
  3. String 메시지를 받는 생성자를 만듭니다.
  4. 슈퍼클래스 생성자를 호출합니다 (super(message)).

Java 사용자 정의 예외 예제

이제 더 실용적인 예제를 만들어보겠습니다. 상상해보세요, 우리는 은행 애플리케이션을 만들고 있고, 누군가가 계정에 있는 돈보다 더 많은 돈을 인출하려고 할 때 사용자 정의 예외를 만들고 싶습니다.

public class InsufficientFundsException extends Exception {
private double amount;

public InsufficientFundsException(double amount) {
super("죄송합니다, 부족한 자금입니다. " + amount + " 더 필요합니다.");
this.amount = amount;
}

public double getAmount() {
return amount;
}
}

이제 이 예외를 BankAccount 클래스에서 어떻게 사용할 수 있는지 보겠습니다:

public class BankAccount {
private double balance;

public BankAccount(double initialBalance) {
this.balance = initialBalance;
}

public void withdraw(double amount) throws InsufficientFundsException {
if (amount > balance) {
double needs = amount - balance;
throw new InsufficientFundsException(needs);
}
balance -= amount;
System.out.println("인출 성공. 새로운 잔액: " + balance);
}
}

그리고 메인 프로그램에서 어떻게 사용할 수 있는지 보겠습니다:

public class BankingApp {
public static void main(String[] args) {
BankAccount account = new BankAccount(100);
try {
account.withdraw(150);
} catch (InsufficientFundsException e) {
System.out.println(e.getMessage());
System.out.println("적어도 이 금액을 예치해야 합니다: " + e.getAmount());
}
}
}

이 프로그램을 실행하면 다음과 같은 출력이 나타납니다:

죄송합니다, 부족한 자금입니다. 50.0 더 필요합니다.
적어도 이 금액을 예치해야 합니다: 50.0

이게 멋지지 않나요? 우리는 오류가 발생했음을 알려주는 것뿐만 아니라, 필요한 추가 돈에 대한 유용한 정보를 제공하는 사용자 정의 예외를 만들었습니다!

RuntimeException을 확장하여 사용자 정의 클래스 만들기 예제

때로는 비검사 예외를 만들고 싶을 때가 있습니다. 그런 경우 RuntimeException을 확장합니다. 다음은 그 예제입니다:

public class InvalidAgeException extends RuntimeException {
public InvalidAgeException(String message) {
super(message);
}
}

그리고 이를 어떻게 사용할 수 있는지 보겠습니다:

public class Person {
private int age;

public void setAge(int age) {
if (age < 0 || age > 150) {
throw new InvalidAgeException("나이는 0에서 150 사이여야 합니다.");
}
this.age = age;
}
}

이 경우, 예외를 메서드 서명에 선언하거나 명시적으로 잡을 필요는 없습니다 (하지만 종종 이를 하는 것이 좋습니다).

결론

이제 여러분은 Java에서 사용자 정의 예외를 만들고 사용하는 방법을 배웠습니다. 기억해 두세요, 사용자 정의 예외는 프로그래밍 세계에서 당신의 개인적인 스위스 아ーノ이 도구입니다. 이는 오류를 더 효과적으로 처리하고, 코드를 더 읽기 쉽고 유지보수하기 쉽게 만들어줍니다.

Java 여정을 계속하면서, 사용자 정의 예외의 더 많은 용도를 발견하게 될 것입니다. 이는 당신의 프로그래밍 도구箱에서 강력한 도구로, 견고하고 사용자 친화적인 애플리케이션을 만드는 데 도움이 됩니다.

계속 연습하고, 코딩을 계속하며, 가장 중요한 것은 즐거워하세요! 결국, 저는 제 학생들에게 이야기하는 것처럼, 프로그래밍은 마법과 같습니다 - 아무 것도 없는 것에서 무언가를 만들어냅니다. 이제 당신은 프로그램이 잘못되었을 때 어떻게 행동할지 조절할 수 있습니다. 이게 얼마나 멋진 일인가요?

다음에 다시 만날 때까지, 행복하게 코딩하세요!

Credits: Image by storyset