
네이티브 메서드가 성능을 개선해주는 일은 많지 않다. 🔎 자바 네이티브 인터페이스 (Java Native Interface, JNI) 네이티브 메서드란 C나 C++ 같은 네이티브 프로그래밍 언어로 작성한 메서드를 말한다. JNI는 이렇게 Java 이외의 언어로 만들어진 네이티브 메서드를 Java와 상호작용할 수 있도록 연결해주는 인터페이스를 말한다. 즉, 자바 프로그램에서 네이티브 메서드(다른 언어로 작성된 메서드)를 호출하는 기술을 JNI라고 한다. ✔ 네이티브 메서드의 주요 쓰임 1. 레지스트리 같은 플랫폼 특화 기능을 사용한다. 2. 네이티브 코드로 작성된 기존 라이브러리를 사용한다. 3. 성능개선을 목적으로 성능에 결정적인 영향을 주는 영역만 따로 네이티브 언어로 작성한다. 4. 대체할 만한 자바..

리플렉션은 복잡한 특수 시스템을 개발할 때 필요한 강력한 기능이지만, 단점도 많다. 따라서 인스턴스 생성에만 쓰고, 이렇게 만든 인스턴스는 인터페이스나 상위 클래스로 참조해 사용하자. 🔎 리플렉션? 리플렉션이란, 구체적인 클래스 타입을 알지 못해도 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API이다. 즉, 구체적인 클래스 타입을 모를때 사용하는 방법을 리플렉션이라고 한다. 그런데, 내가 짠 코든데 내가 만든 클래스의 이름을 모르는 게 말이 되는 일인가? 의문이 들 수 있다. 하지만 가끔 어떤 타입의 클래스나 변수, 혹은 메소드를 사용해야 할지 모르는 경우가 생긴다. 예를 들어 변수의 값을 조건에 따라서 다르게 사용해야하는 경우라던가, 애플리케이션이 실행되고 나서 생성되는 클래스..

주어진 객체를 표현할 적절한 인터페이스가 있는지 찾아서 그 인터페이스로 참조하면 더 유연하고 세련된 프로그램을 만들 수 있다. 🔎 인터페이스 타입 선언 vs 클래스 타입 선언 앞서, 아이템 51에서 매개변수의 타입으로는 클래스보다 인터페이스가 더 낫다고 했다. 매개변수로 적합한 인터페이스가 있다면 이를 구현한 클래스가 아닌 그 인터페이스를 직접 사용한다. 여기서 더하여, 적합한 인터페이스만 있다면 매개변수뿐만 아니라 반환 값, 변수, 필드를 전부 인터페이스 타입으로 선언하는 것이 좋다. 객체의 실제 클래스를 사용해야 할 상황은 오직 생성자로 생성할 때뿐이다. 예를 들어, LinkedHashSet을 선언하는 두 가지 방법이 있다. /* 좋은 예 : 인터페이스를 타입으로 사용 */ Set sonSet = n..

작고 크기가 고정된 객체의 문자열은 문자열 연결 연산자(+)를 사용해도 되지만, 많은 문자열을 연결할 때는 StringBuilder를 사용하자 🔎 문자열 연결 연산자(+) vs StringBuilder, append() 문자열 연결 연산자(+)는 여러 문자열을 하나로 합쳐주는 편리한 수단이다. 한 줄짜리 출력 값이나 작고 크기가 고정된 객체의 문자열 표현을 만들 땐 편리하고 좋지만, 문자열 연결 연산자로 문자열 n개를 잇는 시간은 n^2에 비례한다. 즉, 엄청엄청엄청엄청 느리다,,,,,, 예를 들어, 다음과 같이 청구서의 품목(item)을 전부 하나의 문자열로 연결하는 코드를 작성해보자. /* 문자열 연결 연산자(+) 사용 */ public String statement() { String result ..

문자열은 잘못 사용하면 번거롭고, 덜 유연하고, 느리고, 오류 가능성도 크다. 문자열은 워낙 흔하고, 자바가 잘 지원해주어 쉽게 쓸 수 있지만, 원래 의도하지 않은 용도로 쓰이는 경향이 있다. 🚫 문자열을 쓰지 않아야 하는 사례 기본 타입이든 참조 타입이든 적절한 값 타입이 있다면 그것을 사용하고, 없다면 새로 하나 작성하라. 문자열은 다른 값 타입을 대신하기에 적합하지 않다. 따라서 입력받을 데이터가 진짜! 문자열일 때만 문자열로 받는다. 받은 데이터가 수치형이라면 -> int, float, BigInteger 예/아니오 질문의 답이라면 -> boolean이나 적절한 열거 타입 문자열은 열거 타입을 대신하기에 적합하지 않다. 상수를 열거할 때는 문자열보다 열거 타입이 월등히 낫다. 문자열은 혼합 타입을..
- Total
- Today
- Yesterday
- subset
- 완전탐색
- EffectiveJava
- 완탐
- 알고리즘
- dp
- IMAGE
- dfs
- 아이템60
- OS
- 아이템59
- 토큰기반인증
- 아이템61
- 그래프탐색
- Container
- springboot
- BFS
- cicd
- bruteforce
- docker
- 순열
- 운영체제
- 조합
- 백준
- Java
- 이펙티브자바
- docker-compose
- DevOps
- BOJ
- Retrofit2
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |