리플렉션은 복잡한 특수 시스템을 개발할 때 필요한 강력한 기능이지만, 단점도 많다. 따라서 인스턴스 생성에만 쓰고, 이렇게 만든 인스턴스는 인터페이스나 상위 클래스로 참조해 사용하자. 🔎 리플렉션? 리플렉션이란, 구체적인 클래스 타입을 알지 못해도 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 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
- 완탐
- dp
- 아이템60
- IMAGE
- 알고리즘
- 조합
- docker
- Retrofit2
- 정처기
- 백준
- EffectiveJava
- 토큰기반인증
- 순열
- Java
- 이펙티브자바
- 아이템59
- OS
- springboot
- BFS
- Container
- BOJ
- 운영체제
- docker-compose
- 아이템61
- 완전탐색
- dfs
- 그래프탐색
- bruteforce
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |