제네릭 다양한 타입의 객체를 다루는 메서드나 클래스에 컴파일 시의 타입체크를 해주는 기능 컴파일러가 타입체크 해주기 때문에 type-safe한 프로그래밍 가능 e.g. List list = new ArrayList(); 로 선언하면 list에 integer가 들어가는 코드를 방지할 수 있음. 객체의 타입을 미리 명시해줌으로써 번거로운 형변환을 생략할 수 있음 제네릭 이전에는 다양한 종류의 타입을 다루는 메소드의 매개변수, 리턴타입으로 Object 타입의 참조변수를 사용한 뒤 형변환하는 방식을 활용. //제네릭 이전 class Box { Object item; void setItem(Object item) { this.item = item; } public Object getItem() { return i..
애노테이션 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것 주석과 마찬가지로 프로그래밍 언어에 영향을 미치지 않으면서도 다른 프로그램에게 유용한 정보 제공 표준 애노테이션 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..
인터페이스 일종의 추상 클래스 추상클래스와 달리 일반 메서드를 멤버로 가질 수 없음. -JDK1.8부터 등장한 static 메서드, default 메서드는 예외 인터페이스 정의하는 방법 interface 인터페이스이름 { public static final 타입 상수이름 = 값; public abstract 메서드이름(파라미터목록); } 모든 멤버변수는 public static final 로 선언. (생략 가능) 모든 메서드는 public abstract 로 선언. (생략 가능) JDK1.8부터 등장한 static 메서드, default 메서드는 예외 인터페이스 구현하는 방법 인터페이스는 추상클래스와 마찬가지로 그 자체로 인스턴스를 생성할 수 없음 자신이 정의한 추상메서드의 body를 만들어주는 클래스를..
자바 상속의 특징 상속 기존 클래스를 재사용해서 새로운 클래스를 작성하는 것. extends : 조상 클래스를 “확장” 한다. 조상 클래스가 변경되면 자손 클래스는 자동적으로 영향을 받지만 자손 클래스가 변경되는 것은 조상 클래스에 아무런 영향을 주지 못한다. 생성자와 초기화 블록은 상속되지 않는다. 멤버만 상속된다. C++ 와 달리, 단일 상속만 가능하다. 다중 상속 시, 클래스간 관계가 매우 복잡해짐. 서로 다른 클래스로부터 상속 받은 멤버의 이름이 같을 경우, 구별할 수 있는 방법이 없음. 포함관계를 이용해서 다중상속과 유사한 효과를 낼 수 있음. super 키워드 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조할 때 사용되는 참조변수. 일반적으로, 조상 클래스로부터 상속 받은 멤버 또한 자..
클래스 클래스 정의하는 방법 클래스 : 객체 != 붕어빵틀 : 붕어빵 흔히 클래스와 객체 간 관계를 붕어빵틀 - 붕어빵 에 비유한다. 하지만 이는 적절한 비유가 아니다. 붕어빵틀 붕어빵 = new 붕어빵틀(); 붕어빵 틀을 하나 만들었더니 붕어빵이 되었다? 뭔가 이상하다. 클래스는 ‘분류’를 위한 개념으로 이해하는 것이 적절하다. 사람 김연아 = new 사람(); 클래스는 같은 특성을 지닌 여러 객체를 총칭하는 집합의 개념이다. 클래스 정의 방법 속성 : 객체들이 가진 공통된 특성 중, 명사로 표현되는 특성. 메서드 : 객체들이 가진 공통된 특성 중, 동사로 표현되는 특성. modifiers private default (접근 지시자를 명시하지 않는 경우) : 동일한 패키지 내에서만 객체 생성 가능 pr..
선택문 (조건문) if문 if (조건식){ //조건식이 참일 때 수행할 코드 } 자바에서 조건식의 결과는 반드시 boolean 이어야 함을 기억하자. switch문 if문은 경우의 수가 많아지면 그만큼 if-else문과 조건식이 늘어나서 코드가 복잡해진다. switch문을 사용하면 이런 문제를 해결할 수 있다. switch(조건식) { case 값1 : // code break; case 값2 : // code break; default : //code } break 를 생략하면 다른 break문을 만나거나 switch문의 ‘}’ block을 만날 때까지 있는 코드를 모두 수행한다는 점을 주의하자. -> 이런 human fault를 방지하기 위해 Java 12 부터 switch operator를 제공한다..
산술 연산자 사칙 연산 (+,-,*,/) 타입에 유의하자 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
- 서비스추상화
- c++
- ec2
- java
- 코딩테스트
- 프록시
- 코테
- 백기선
- 객체지향
- AOP
- BOJ
- 메서드레퍼런스
- OOP
- 데코레이터패턴
- 카카오
- 자바스터디
- provider
- 프로그래머스
- 토비의스프링
- gracefulshutdown
- 디자인패턴
- 스프링
- 토비의봄TV
- 예외처리
- 템플릿콜백
- 토비
- 프록시패턴
- 김영한
- 자바
- SOLID
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |