스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O 스트림 데이터를 운반하는데 사용하는 연결통로 단방향 통신만 가능 입력, 출력을 동시에 하려면 입력스트림, 출력스트림 총 2개의 스트림이 필요 먼저 보낸 데이터를 먼저 받음 (First In First Out) 버퍼 스트림의 입출력 효율을 높이기 위해 사용 한 바이트씩 입출력하는 것보다 한 번에 여러 바이트를 입출력하는 것이 빠름 BufferedInputStream read() 호출 시 입력소스로부터 버퍼 크기만큼 데이터를 읽어다 자신 내부 버퍼에 저장. 외부 입력소스로부터 읽는 것보다 내부 버퍼로 부터 읽는 것이 훨씬 빠름 BufferedOutputStream write() 호출시 내부 버퍼에 출력할 내용을 저장. ..
애노테이션 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것 주석과 마찬가지로 프로그래밍 언어에 영향을 미치지 않으면서도 다른 프로그램에게 유용한 정보 제공 표준 애노테이션 JDK에서 제공 주로 컴파일러를 위한 것 @Override 메서드 앞에만 붙일 수 있음 조상 클래스의 메소드를 오버라이딩한다는 것을 컴파일러에게 알려줌 오버라이딩 할 때 메소드 이름을 잘못 적는 휴먼폴트를 방지할 수 있음 @Deprecated 더 이상 사용되지 않는 필드나 메서드에 붙임 다른 것으로 대체되었으니 사용하지 않을 것을 권함 컴파일시 deprecated된 대상을 사용하고 있다고 에러메시지 띄움 @FunctionalInterface 함수형 인터페이스를 올바르게 선언했는지 즉, 추상메서드가..
enum 관련 있는 상수를 편리하게 선언하기 위한 것. 상수 정의할 때 유용 typesafe enum : 값이 같더라도 타입이 다르면 컴파일 에러 발생 enum 정의하는 방법 enum 열거형이름 { 상수명1, 상수명2, ... } 사용 방법 열거형이름.상수명 ‘==‘ 사용 가능 비교 연산자 사용불가. compareTo() 로 비교 switch문 조건식에 사용 가능 enum이 제공하는 메소드 (values()와 valueOf()) values() : 열거형의 모든 상수를 배열에 담아 반환 Direction[] directions = Direction.values(); for (Direction direction : directions) { System.out.printf("%s=%d%n", directio..
자바에서 예외 처리 방법 (try, catch, throw, throws, finally) 예외처리 목적 프로그램의 비정상적인 종료를 막고, 정상적인 실행상태 유지 try-catch try{ //예외 발생 가능한 코드 } catch (Exception1 e1) { //Exception1 발생시 처리 코드 } catch (Exception2 e2) { } catch (ExceptionN eN) { } public class ExceptionEx5 { public static void main(String[] args) { System.out.println(1); System.out.println(2); try { System.out.println(3); System.out.println(0 / 0); Sy..
자바 상속의 특징 상속 기존 클래스를 재사용해서 새로운 클래스를 작성하는 것. extends : 조상 클래스를 “확장” 한다. 조상 클래스가 변경되면 자손 클래스는 자동적으로 영향을 받지만 자손 클래스가 변경되는 것은 조상 클래스에 아무런 영향을 주지 못한다. 생성자와 초기화 블록은 상속되지 않는다. 멤버만 상속된다. C++ 와 달리, 단일 상속만 가능하다. 다중 상속 시, 클래스간 관계가 매우 복잡해짐. 서로 다른 클래스로부터 상속 받은 멤버의 이름이 같을 경우, 구별할 수 있는 방법이 없음. 포함관계를 이용해서 다중상속과 유사한 효과를 낼 수 있음. super 키워드 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조할 때 사용되는 참조변수. 일반적으로, 조상 클래스로부터 상속 받은 멤버 또한 자..
산술 연산자 사칙 연산 (+,-,*,/) 타입에 유의하자 int a = 1_000_000; int b = 2_000_000; long c = a * b; System.out.println("c = " + c); //c = -1454759936 a*b 를 수행하는 과정에서 이미 overflow가 발생하기 때문에 예상과 달리 음수값이 나온다. int a = 1_000_000; int b = 2_000_000; long c = (long)a * b; System.out.println("c = " + c); //c = 2000000000000 해결방법은, 한 쪽에 casting을 걸어서 연산 과정 중에 자동 형변환이 이루어지도록 하면 된다. 리터럴 연산은 연산 중간에 형변환되지 않는다. char c1 = ..
- Total
- Today
- Yesterday
- SOLID
- 코딩테스트
- 객체지향
- 데코레이터패턴
- AOP
- 프로그래머스
- 디자인패턴
- ec2
- 프록시패턴
- gracefulshutdown
- provider
- 코테
- 자바
- 프록시
- BOJ
- 백기선
- 템플릿콜백
- 스프링
- c++
- java
- 메서드레퍼런스
- 자바스터디
- 토비의스프링
- 카카오
- 김영한
- 토비의봄TV
- 서비스추상화
- 예외처리
- OOP
- 토비
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |