제네릭은 컬렉션과 단일 원소 컨테이너에서도 흔히 쓰인다. - 컬렉션의 예시: Set, Map - 단일 원소 컨테이너의 예시: ThreadLocal, AtomicReference 위에서 매개변수화되는 대상은 컨테이너 자신이다. 따라서 하나의 컨테이너에서 매개변수화할 수 있는 타입의 수가 Set은 1개, Map은 2개로 제한된다. 하지만 더 유연한 수단이 필요할 때도 종종 있다. 가령 데이터베이스의 행은 여러 개의 다양한 타입의 열을 가질 수 있는데, 모두 열을 타입 안전하게 이용할 수 있도록 만들고 싶다고 가정해보자. 이럴 때 사용할 수 있는 해법이 바로 타입 이종 컨테이너 패턴이다. 타입 이종 컨테이너 패턴 컨테이너 대신 키를 매개변수화한 다음, 컨테이너에 값을 넣거나 뺄 때 매개변수화한 키를 함께 제공..
람다식이란 람다식 또는 람다 함수란 메서드로 전달할 수 있는 익명 함수를 단순화한 것입니다. 람다식을 이용하면 코드가 간결해지고, Lazy Initialization을 통해 성능을 향상시킬 수 있습니다. 자바에서 함수형 프로그래밍 기법을 위해 제공하는 기능 중 하나로 함수를 일급 객체로 다룰 수 있도록 하여 매개 변수로 함수 자체를 전달할 수 있습니다. 람다식의 생김새는 다음과 같습니다. (람다 파라미터) -> { 람다 바디 } 람다식을 사용하면 함수의 선언을 아래처럼 한 줄로 작성할 수 있습니다. // 일반적인 메소드 선언 public int add(int a, int b) { return a+b; } // 람다식 (a, b) -> a + b; 람다식의 특징 1. 익명: 보통의 메서드와 달리 이름이 없..
함수형 프로그래밍이란함수형 프로그래밍은 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다. - 위키페디아 보통은 프로그래밍 언어에서 Java, Python과 같은 객체 지향 언어와 C언어와 같은 절차 지향 언어가 친숙하겠지만 수학 함수처럼 코드를 작성할 수 있는 함수형 프로그래밍 언어도 존재합니다. 함수형 프로그래밍 언어를 사용하면 순수한 함수들을 조합하여 프로그램을 만들 수 있습니다. 가령 클로저, 스칼라 등이 있습니다. 함수형 프로그래밍은 이해하기 쉽다. 그리고 객체 지향 언어였던 Java도 버전 8부터 유연성을 위해 함수형 프로그래밍 개념을 도입하기 시작했습니다. 객체 지향은 개발자가 더 원활히 유지 보수를 할 수 있도록 도와주지만 대신 더 복..
배열 ↔ 제네릭 1. 배열은 공변, 제네릭은 불공변이다. 배열은 공변이다. 즉, Sub 클래스가 Super 클래스의 하위 타입이면, 배열 Sub[]은 배열 Super[]의 하위 타입이 된다. Object[] objectArray = new Long[1]; objectARray[0] = "타입이 달라 넣을 수 없다.";// ArrayStoreException을 던진다. 그러므로 이 코드는 컴파일은 성공하지만 런타임 시점에 실패한다. 제네릭은 불공변이다. 서로 다른 타입 Type1과 Type2이 있을 때, List과 List는 상위 타입도, 하위 타입도 아니다. List ol = new ArrayList();// 호환되지 않는 타입 ol.add("타입이 달라 넣을 수 없다."); 이 코드는 컴파일이 아예 되..
추상 클래스의 단점 추상 클래스를 구현하는 클래스는 반드시 추상 클래스의 하위 클래스가 되어야 한다. 그래서 기존 클래스에 추상 클래스를 새롭게 끼워넣기는 어려운 게 일반적이다. 인터페이스의 장점 추상 클래스와 달리 인터페이스는 인터페이스의 규약만 잘 지키면 다른 어떤 클래스를 상속해도 같은 타입으로 취급되므로 추상 클래스보다 훨씬 확장에 유연한 구조를 갖출 수 있다. 인터페이스를 사용할 때 얻을 수 있는 이점을 더 살펴보자. 1. 기존 클래스에도 손쉽게 새로운 인터페이스를 구현해넣을 수 있다. 인터페이스가 요구하는 메서드를 추가하고, 클래스 선언에 implements 구문만 추가하면 끝이다. 2. 인터페이스는 믹스인(mixin) 정의에 안성맞춤이다. 믹스인이란 클래스가 구현할 수 있는 타입을 말한다. ..
가비지 컬렉션에 앞서, 간단히 JVM 구조를 톺아보자. HotSpot JVM Architecture HotSpot JVM은 가장 일반적으로 사용되는 JVM으로 JIT 컴파일러가 자바 프로그램 실행 중에도 동적으로 최적화를 제공하고, 멀티 스레드 환경에서도 GC가 동작하는 등 다양한 방식으로 높은 성능과 가용성을 보장한다. HotSpot JVM의 구조는 다음과 같다. 여기서 Heap은 객체 데이터가 저장되는 공간이자 Garbage Collector에 의해 메모리가 관리되는 공간이다. 사용하는 Garbage Collector의 타입에 따라 다른 방식으로 메모리가 최적화된다. Garbage Collection 이란? 자바는 다른 언어와 달리 JVM에 탑재되어 있는 Garbage Collector가 힙의 메모리..
- Total
- Today
- Yesterday
- GitHubAPIforJava
- atq
- 버추억박스에러
- 버추억박스오류
- api문서
- cat
- 백준
- cron시스템
- Baekjoon27211
- 백준27211
- virtualbox
- 사용자ID
- Baekjoon27219
- 쇼미더코드
- awk프로그램
- whatis
- Linux
- GithubAPI
- baekjoon
- linuxtouch
- OnActivityForResult
- linuxgedit
- SELECT #SELECTFROM #WHERE #ORDERBY #GROUPBY #HAVING #EXISTS #NOTEXISTS #UNION #MINUS #INTERSECTION #SQL #SQLPLUS
- 코테
- 리눅스cron
- linuxawk
- E_FAIL
- 백준27219
- linux파일
- 리눅스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |