TIL
-
Format클래스 및 잡다한 팁?TIL 2021. 2. 7. 23:27
MessageFormat 원래 result처럼 했었는데 MessageFormat 클래스를 이용하면 위처럼 바꿀 수 있다. 뭐가 더 좋은지는 사용자에 따라 다르겠지만 밑도 괜찮은 거 같다. 또 뭐 날짜 format도 있지만 그거는 사용할 때 마다 찾아보는 게 좋겠다. Arrays.binarySearch(배열, 찾고자 하는 값) 또 배열에서 원하는 값을 찾을 때 for문을 돌았었는데 다른 방법이 있다. 1차원 배열에서 가능하다. 먼저 sort를 한 후 binartSearch를 통해 해당 index를 얻을 수 있다. 문자열뿐 아니라 객체도 가능하다. 객체일 때는 key는 찾고자 하는 참조 변수가 들어간다. 값이 없으면 음수를 반환한다. Arrays.deepEquals(배열,배열2) 두 배열이 같은 주소들을 가..
-
서비스 로더 (service loader)사용하기TIL 2021. 2. 7. 15:37
서비스 로더 백기선님 study에서 얻은 정보 내가 interface만 알고 있는데 구현체를 알고 싶을 때 사용 가능 단 라이브러리에 있어야 한다. jar파일이 있어야 가능 실습을 해보자 구조는 SampleInterFace라는 프로젝트가 있고 여기에는 Hello라는 인터페이스가 있다. 메소드는 hello가 있다. 다른 프로젝트 SampleController에서 위의 jar파일을 라이브러리로 가지고 있고 Hello의 구현체를 정의했다. 여기에 META-INF 디렉터리와 인터페이스가 있는 경로를 이름으로 가지는 파일을 만들고 그 파일 내용은 구현체의 경로를 적는다. 다른 프로젝트 SampleService에서 SampleController의 jar파일 라이브러리로 갖고 서비스 로더를 통해 Hello의 구현체를..
-
객체를 런타임 시점에 동적으로 생성하기TIL 2021. 2. 7. 13:09
런타임 시점에 객체를 동적으로 생성할 수 있다. 물론 원하는 객체의 Class 의 FQCN(Fully Qualified Class Name)를 알아야 한다. 또 자바 8 버전 까진 Class클래스의 newInstance()를 사용했는데 9 버전부터 Deprecated 되어 .getDeclaredConstructor().newInstance();를 써야 한다. 예제로 넘어가자 예제는 Action을 구현하는 구현체 Sample1과 Sample2가 존재한다. 우리는 런타임 시점에 둘 중 하나를 선택해 객체를 만들고 Action의 메소드인 exce()를 실행시키려 한다. 다형성을 이용해 객체를 사용하면 된다. 사용할 Class와 다형성에 이용될 Interface public interface Action { v..
-
리플렉션을 이용해 private 필드 값 변경TIL 2021. 2. 7. 12:11
내가 이해한 리플렉션은 런타임 시점에 어떤 객체의 메소드나 필드가 몇 개인지 뭐 인지 등 값을 알 수 있고 사용도 가능하고 값도 변경이 가능하다. 내용물을 보려면 해당 클래스가 무엇인지를 알아야한다. 클래스를 알 수 있는 방법은 많으면 Class클래스의 forName()이나 getClass가 있다. getClass는 얻고자 하는 클래스의 객체에 사용하면 런타임 시점에 얻을 수 있다. forName은 객체를 생성하지 않고 Class.forName()으로 얻고자 하는 클래스의 풀 경로를 적어주면 얻을 수 있다. 근데 Class 말고 해당 클래스에서 얻는 방법도 있다. 클래스명.Class를 하면 얻을 수 있다. .getClass()와 .Class의 차이점이 궁금했다. 둘의 차이점은 무엇일까? 객체.getCla..
-
2021.02.07 기록장TIL 2021. 2. 6. 22:58
To Do 자바 Comparator공부 기본 api 보기 알고리즘 문제 풀기 http,tcp/ip 정리 ? cs 50 한번 보기? Done 서비스 로더와 리플렉션을 공부했다 알고리즘 문제를 1문제 풀었다. Bad 알고리즘을 조금 풀었다. http 정리를 하지 않았고 cs50도 보지 않았다. Good 그래도 블로그에 글을 3개 썼다. Feeling Pattern 클래스가 있다는 것을 알았다. 정규식을 통해 문자가 형식에 맞는지 검사할 수 있다. 배열에서 항목을 검색할 때 for문을 돌지 말고 sort한 후 Arrays.binarySearch() 메소드로 항목을 찾을 수 있다. -> 인덱스 반환 또 MessageFormat클래스도 알았다. 어제 서비스 로더와 리플렉션을 방송에서 보고 신기해서 오늘 일어나자마..
-
Comparable과 ComparatorTIL 2021. 2. 6. 21:50
Comparable 인터페이스 객체를 정렬하는 데 사용하는 인터페이스 자바에서 같은 타입의 인스턴스를 서로 비교 comparaTo() 메소드를 구현 Comparator 인터페이스 객체를 정렬하는 데 사용하는 인터페이스 compara() 메소드를 구현 둘의 차이점은 무엇인가? 나는 이렇게 생각한다. 일단 둘 다 목적은 정렬방법을 정의하는 거다. 다른 점은 객체를 정렬할 때 (Arrays.sort나 Collections.sort를 사용할 때) 기본적으로 사용할 것은 Comparable를 통해 정의가 되고 객체에서 정의한 것과는 다르게 정렬을 하고 싶을 때는 익명 구현 객체를 이용해 new Comparator하는 거다. 그니까 평소에 사용되는 sort 기준은 Comparable을 통해 정의하고 특정 상황에 다..
-
3항 연산자TIL 2021. 2. 6. 20:46
물론 알고는 있었지만 잘 쓰지는 않았다. if else가 더 익숙했으니까 근데 최근에 Comparator 를 공부하면서 본 활용이 너무 이뻐서 기록한다. int x=3; int y=2; String result= (x < y) ? "x가 작아" : ((x == y) ? "둘이 같아" : "x가 커"); System.out.println(result); Integer.compare 에서 가져왔다. 둘의 값을 비교하는 것, 거기다 같은지 까지 검사를 한다. 왜 나는 이런 생각을 하지 못하고 if문을 줄줄이 나열했을까 또 다른 예제 public class Main { public static void main(String[] args) { boolean isUser=true; boolean isAdult=tr..