일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Number Theory
- Math
- Method
- Tree
- database
- sorting
- geometry
- string
- 파이썬
- hash table
- Class
- Stack
- greedy
- 코테
- Binary Search
- bit manipulation
- array
- Matrix
- two pointers
- Binary Tree
- 구현
- dynamic programming
- 자바
- implement
- SQL
- 코딩테스트
- simulation
- java
- Counting
- Data Structure
- Today
- Total
목록Java (109)
코린이의 소소한 공부노트

멀티 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를 쓰는데 굳이 밖에 둘 이유가 있..

인터페이스는 1. 추상 메서드의 집합으로, 2. 부수적으로 상수, 디폴트 메서드, 스태틱 메서드를 선언할 수 있다.(jdk 1.8부터 적용) interface A { void method1(); void method2(); } class B implements A{ public void method1() { } public void method2() { } } abstract class C implements A{ public void method2() { } } - 어떤 클래스(B)가 인터페이스(A)를 구현할 경우, A에 선언된 모든 추상 메서드를 구현해야 한다. 만약 모든 메서드를 구현하지 않는다고 하면 추상 클래스(C)로 만들어야 한다. - 이 상태에서 인터페이스(A)에 새로운 추상 메서드를 추가하..

1. 두 대상(객체) 간의 연결을 돕는 중간 역할을 한다. - 사람은 인간의 언어를 사용하고, 컴퓨터는 기계어를 사용한다. 서로의 말을 이해하지 못하지만, 우리는 컴퓨터를 쉽게 사용한다. 여기서 인터페이스(껍데기)는 GUI(Graphic User Interface)이다. GUI가 화면에 띄운 아이콘을 누르거나 키보드로 입력을 함으로써 컴퓨터 언어, 내부(알맹이)를 몰라도 사람이 컴퓨터를 사용할 수 있게끔 해 준다. 2. 변경에 유리한 설계를 하게 해 준다. - 그래픽 카드를 바꾸거나 RAM카드를 바꾸는 등 컴퓨터 내부(알맹이)의 변화가 생겨도 GUI(껍데기)를 이용해 얼마든 사용할 수 있기 때문에 사용자는 컴퓨터 내부 변화에 크게 영향받지 않는다. 3. 선언(설계)과 구현을 분리시킬 수 있게 한다. 1)..

시간을 나타내는 Time 클래스가 아래 코드와 같고, Time 객체를 2개 만들었다고 해보자. class Time{ private int hour; // 0시 ~ 23시 private int minute; // 0초 ~ 59분 private int second; // 0초 ~ 59초 public int getHour() { return hour; } // 이하 생략 } 이때 한 객체에서 다른 객체의 hour값을 가지고 올 때, 메서드를 통해서 iv에 접근해야 한다. t.hour; // No t.getHour(); // OK 캡슐화를 하는 이유는 데이터를 보호하기 위함이다. 그래서 위 코드의 첫 줄같이 직접 iv에 접근하는 것이 아닌 메서드를 통해 접근해야 한다. 이때 객체의 가장 바깥 껍데기(메서드를 감..

추상 클래스를 만드는 방법은 1. 여러 클래스에 공통적으로 사용될 수 있는 메서드, 변수를 이용해 추상 클래스를 바로 작성하거나 2. 기존 클래스의 공통부분을 뽑아 추상 클래스를 만든다. 예시를 보는 게 가장 빨리 이해가 될 것이다. class Infantry { // 보병 int x, y; void move(int x, int y) { } void stop() { } void stimPack() { } } class Tank{ // 탱크 int x, y; void move(int x, int y) { } void stop() { } void changeMode() { } } class Dropship{ // 수송선 int x, y; void move(int x, int y) { } void stop()..

앞서 클래스를 객체를 만드는 설계도로 표현했었다. 이번에 공부할 추상 클래스는 미완성 설계도로 표현할 수 있다. [추상 클래스] 1. 미완성 메서드를 갖고 있는 클래스다. abstract class Person{// 제어자를 붙여 추상 클래스임을 알려준다. abstract void eat(String s);// 추상 메서드 abstract void introduce();// 추상 메서드 } Person 안에 선언된 메서드들은 제어자 abstract가 있고 구현부가 없다. 이렇게 구현부가 없는 메서드를 추상 메서드라고 한다. 그리고 이런 추상 메서드를 갖고 있는 클래스를 추상 클래스라고 한다. 2. 다른 클래스 작성에 도움을 주기 위한 클래스로, 인스턴스를 생성할 수 없다. Person p = new Pe..