일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- two pointers
- sorting
- 코테
- implement
- geometry
- Stack
- Counting
- database
- Tree
- Data Structure
- Binary Search
- simulation
- Math
- Method
- dynamic programming
- Binary Tree
- array
- string
- 자바
- java
- Number Theory
- SQL
- 코딩테스트
- 파이썬
- greedy
- hash table
- Class
- bit manipulation
- 구현
- Matrix
- Today
- Total
목록자바 (584)
코린이의 소소한 공부노트

프로그램을 실행하는 과정에서 발생하는 미약한 오류를 예외라고 한다. 1. 예외는 사용자의 실수 등 프로그램 외적인 요소에 의해 발생하는 것으로, try-catch문을 이용해 발생한 예외를 처리한다. 2. 한 예외가 다른 예외를 발생시킬 수 있다. 예외 A가 예외 B를 발생시키면 A는 B의 원인 예외(cause exception)가 된다. Throwable initCause(Throwable A) // A를 원인 예외로 등록 Throwable getCause() // 원인 예외를 반환 // Throwable 클래스 코드 살펴보기 public class Throwable implements Serializable{ // ... // 원인 예외를 저장하기 위한 iv private Throwable cause ..

[사용자 정의 예외 만들기] 1. 조상은 Exception과 RuntimeException 중에서 선택한다. - 필요한 경우에만 Exception 클래스를 상속받아 체크드 예외로 만들자. - 예외를 선택 처리하는 RuntimeException을 상속받아 언체크드 예외로 만드는 것이 편하다. 2. 보통 예외 메시지가 다 있기 때문에 문자열을 매개변수로 받는 생성자가 필요하다. // 예시1. 사용자 정의 예외의 기본 틀 class MyException extends Exception{ // 체크드 예외 -> try-catch 필수 MyException(String msg){ // 문자열을 매개변수로 받는 생성자 super(msg);// 조상인 Exception 클래스의 생성자 호출 } } // 예시2. 기본..

예외를 처리하는 방법에는 크게 3가지 정도가 있다. 1. try-catch문: 예외가 발생한 곳에서 직접 처리하는 방법 - 2022.05.19 - [Java] - 프로그램 오류의 종류와 예외 처리 2. 예외 선언하기: 예외를 다른 곳에 떠넘기는(알리는) 방법 3. 은폐: 빈 catch 블록을 선언해 예외를 덮거나 무시하는 방법 - 사용하지 않는 것을 원칙으로 하고 있으나 - 빅데이터 처리 등 이상한 정보를 처리하지 않아야 할 때 사용 이번 글에서 볼 것은 예외 선언하기이다. 메서드에 예외를 선언한다는 것은 메서드 호출 시 발생 가능한 예외를 호출하는 쪽에 알리는 것을 말한다. 1. 선언 방법 void method() throws Exception1, Exception2, ..., ExceptionN{ /..

간단하게 프로그램 오류를 나눠보면 다음과 같다. 1. 컴파일 에러 - 컴파일 단계에서 발생 2. 런타임 에러 - 실행 단계에서 발생 1) 에러 - 심각한 오류 2) 예외 - 미약한 오류 3. 논리적 에러 - 작성 의도와 맞지 않는 경우 이 중 예외가 컴파일러 기준으로 다시 2가지로 나뉘게 된다. 1. 체크드(checked) 예외 - 컴파일러가 컴파일 단계에서 예외 처리 여부를 체크하는 예외로 - 예외 처리(try-catch)문이 필수적이다. - Exception 클래스와 그 자손 클래스에 해당한다. 아래 코드는 throw를 이용해 Exception을 발생시키고 예외 처리 문을 작성하지 않은 것이다. class Test { public static void main(String[] args) { throw..

코드를 작성해서 돌리면 1. 컴파일 에러가 나거나 2. 런타임 에러가 나거나 3. 논리적 에러가 나거나 4. 내 멘탈이 나가거나 정상 작동하는 상황을 만날 수 있다. 대부분의 사람들은 예외든 에러든 별로 만나고 싶어 하지 않는다. 일단 고치는 게 귀찮고 퇴근이 늦어지기 때문이다. 그래서 달갑지 않겠지만, 이 글에서 오늘 할 일은 예외를 고의적으로 발생시키는 일이다. 예외를 발생시키는 방법은 1. new 연산자를 이용해서 발생시키려는 예외 클래스의 객체를 만든 다음 Exception e = new Exception("고의로 발생시킨 예외"); 2. throw 키워드를 이용해 예외를 발생시키면 된다. throw e; throw에서 예외를 던졌으니, 예외를 받아주는 곳도 필요하다. 그것이 catch 블록이다...

멀티 catch 블록은 1. 예외 타입은 다르지만 내용이 같은 catch 블록을 하나로 합친 것으로 (jdk 1.7부터 가능) 2. 코드의 중복 제거를 지원하는 기능이 있다. 3. OR 연산에 쓰이는 기호 |(shift + \)를 이용해 합칠 수 있다. try{ // .. } catch(ExceptionA e){ e.printStackTrace(); } catch(ExceptionB e){ e.printStackTrace(); } // 멀티 catch 블록으로 바꾸면 try{ // .. } catch(ExceptionA | ExceptionB e){ e.printStackTrace(); } 4. 주의사항 1) 멀티 catch 블록에 쓰일 예외 클래스에 부모-자식관계는 사용할 수 없다. try{ // ....

try 블록을 실행하다가 예외가 발생하게 되면 해당 예외 타입의 객체가 발생하게 된다. 이때 이 객체에는 여러 가지 정보가 들어있는데, 그중 이번에 볼 것은 메서드 2가지이다. 1. printStackTrace() - 예외 발생 당시의 호출 스택(call stack)에 있었던 메서드 정보와 예외 메시지를 화면에 출력한다. 2. getMessage() - 발생한 예외 클래스의 인스턴스에 저장된 메시지를 얻는다. 0으로 나누는 산술 예외를 발생시켜서 어떤 메시지를 얻을 수 있는지 살펴보자. class Test{ public static void main(String args[]) { System.out.println(1); try { System.out.println(2); System.out.println..

코딩을 하다 보면 오류를 가끔(아니고 매번) 마주치게 된다. 오류의 종류는 크게 3가지로 나눌 수 있다. 1. 컴파일 에러(compile-time error) // 구문체크 - 문법에 맞는지 확인 system.out.println(); // 맨 앞 s가 소문자 // Exception in thread "main" // java.lang.Error: Unresolved compilation problem: // system cannot be resolved System.out.println(); // OK // 최적화 int i = 3+5; // 우리가 이렇게 써놓으면 // int i = 8; // 컴파일러가 자동으로 8로 계산해 i에 대입해줌 // 생략된 코드 추가 예시 - 기본 생성자 추가 class ..

일반적으로 객체는 클래스를 만든 다음 new를 이용해 생성하게 된다. class Test { } // 클래스 정의 Test t = new Test(); // 객체 생성 이번에 볼 익명 클래스는 일반 클래스와는 다르게 선언한다. 1. 이름이 없는 일회용 클래스이다. - 선언을 할 때 자기 이름이 없기 때문에, 조상 클래스의 이름을 빌려오거나 자기가 구현한 인터페이스의 이름을 빌려오게 된다. 2. 클래스 정의와 생성을 동시에 한다. - 그래서 클래스 선언인데도 new 키워드를 이용한다. new 조상클래스이름(){ // 클래스 내용 - 멤버 선언 } new 구현인터페이스이름(){ // 클래스 내용 - 멤버 선언 } Test 클래스 내부에서 익명 클래스를 한번 만들어보았다. class Test{ // 1) Ob..

내부 클래스는 클래스 안의 클래스이다. // 1) 일반적인 클래스 class A { } class B { } class C { } // 2) 내부 클래스 class A{// B의 외부 클래스 class B { }// A의 내부 클래스 } class C { } 내부 클래스를 이용하면 다음과 같은 장점이 있다. 1. 내부 클래스에서 외부 클래스의 멤버들에 쉽게 접근할 수 있다. - 1)의 경우 B에서 A의 멤버를 이용하려면 A 객체를 생성 후 접근해야 한다. - 2)의 경우 B에서 A의 멤버를 이용할 때 객체 생성 없이도 접근이 가능하다. 2. 코드의 복잡성을 줄일 수 있다. (일종의 캡슐화) 클래스 B를 클래스 A에서만 쓴다고 해보자. 1)의 경우 - 클래스 A: 나만 B를 쓰는데 굳이 밖에 둘 이유가 있..