본문 바로가기
728x90

Language/자바24

자바 if else 와 swtich case 를 비교해보았다.. 선 결론: 유의미한 차이를 느끼지 못했고, 가독성과 스타일에 따라 그때그때 다르다.요즘 컴파일러가 알아서 잘 해주기 때문에 성능보다는 가독성으로 잘 정리하면 되지않을까..!? (물론 자체 테스트기 떄문에, 틀릴 수 있음) 요즘 컴파일러 최적화가 잘되어있는지, 생각보다 차이가 날거라 생각했는데, 테스트코드를 잘못 만든것인가...좀 차이를 볼려고 횟수를 상당히 많이 늘리지않는이상은 유의미한 차이를 못느끼겠다. jdk7 버전부터 String 비교가 가능한 것으로 알고있었는데, 이는 String 클래스에서 hasCode 를 오버라이딩 하여 컴파일러가 컴파일 할때 해당 hasCode를 순서대로 처리하는것으로 알고있어서 String 으로 비교, 숫자로 비교해도 차이가 날까 궁금했는데, 이는 생각해보니 컴파일러가 최.. 2023. 2. 11.
자바 람다 Supplier example Supplier => T get() => 매개변수는 없고 반환값만 있음. (공급자) import java.util.function.Supplier; public class SupplierExample { public static void main(String[] args) { printValid(0, getVeryExpensiveValue()); printValid(-1, getVeryExpensiveValue()); printValid(-2, getVeryExpensiveValue()); System.out.println("================"); printIfValidIndex(0, () -> getVeryExpensiveValue()); printIfValidIndex(-1, () -> .. 2023. 2. 2.
자바 접근지시자 자바의 접근 지시자는 클래스, 변수, 메서드 등의 접근 범위를 지정하는 키워드 이다. 접근 지시자를 사용하면 클래스의 캡슐화를 강화할 수 있다. public 가장 높은 공개수준, 어디에서는 자유롭게 접근 가능 다른 패키지에 있는 클래스도 접근 가능하다. protected 같은 패키지 내에서 접근 가능, 상속을 받은 클래스 내부에서도 사용 가능. 다른 패키지에 있는 클래스에서는 접근 불가능 pakage-private(default) 같은 패키지 내에서만 접근 가능. 접근지시자가 없을 경우 default 로 적용 됨. 다른 패키지에 있는 클래스에서는 접근 불가능. private 가장 낮은 공개수준, 클래스 내부에서만 접근 가능하다. 다른 패키지에 있는 클래스에서는 접근 불가능 패키지? 자바에서 관련된 클래스.. 2023. 1. 29.
자바 오토박싱 & 언박싱 기억나는대로 간략히 적음. 오토박싱 int -> Integer 로 변경해주는것(기본형을 래퍼클래스로) 근데 이를 자동으로 해주는 것 언박싱 Integer -> int 형으로 변경해주는것.(래퍼클래스를 기본형으로) 근데 이를 자동으로 해주는 것 JDK 1.5 버전부터 나옴. 기본형 + 참조형을 실행하면 컴파일되면서 코드를 알아서 변경해준다. 간단한 예제.(모던 자바 인 액션) List list = new ArrayList(); for (int i = 300; i < 400; i++) { list.add(i); //이 부분 오토박싱됨. //list.add(new Integer(i)); } int integer = list.get(0); //오토언박싱 //Integer integer = list.get(0);.. 2023. 1. 29.
자바 @FunctionalInterface 는 무엇인가? @FunctionalInterface 는 함수형 인터페이스임을 가르키는 어노테이션이다. @FunctionalInterface 로 인터페이스를 선언했지만 실제로 함수형 인터페이스가 아니면 컴파일러가 에러를 발생시킨다. 추상 메서드가 1개가 아닐시 "Multiple nonoverriding abstract methods found in interface Foo(인터페이스 Foo에 오버라이드 하지 않은 여러 추상 메서드가 있음) 같은 에러가 발생할 수 있음. 2023. 1. 29.
자바 시그니처? 생각난 김에 적어본다.. 자바 시그니처 메소드 이름과 매개변수 타입, 리턴 타입으로 이루어진 것을 말한다. 같은 이름의 메소드를 여러개 정의하는 것을 허용, 이는 오버로딩 이라 한다. 자바 컴파일러는 메서드 이름, 파라미터를 이용하여 구분함. 2023. 1. 29.
함수형 인터페이스 간략히 알아보자. 함수형 인터페이스 1개의 추상 메서드를 갖는 인터페이스 자바 8 버전 이후에는 Default 메서드 사용 가능 구현된 함수형 인터페이스는 @FunctionalInterface 를 표시하여 검증할 수 있다. 맞지 않는 경우 에러가 발생(필수로 명시하지 않아도 됨 => 의도 전달 목적 검증 목적) https://jeong0427.tistory.com/manage/posts/ Single Abstract Method(SAM) 이라고도 불림. 아래는 간단한 함수형 인터페이스를 이용한 람다문법. @FunctionalInterface interface Worker { void work(); } public class FITest { static void execute(Worker worker) { worker.wo.. 2023. 1. 29.
자바 프레디케이트란?예제코드와 함께..간단히 알아보자. 모던 자바 인 액션 공부하다 살펴 봄. 프레디케이트(predicate)란 무엇인지 간단히 알아봄. 함수형 인터페이스로 입력된 값을 확인하여 false, true 를 반한하는 메소드 test()를 가지고 있음 public class Ch01 { public static boolean isGreenApple(Apple apple) { return "green".equals(apple.getColor()); } public static boolean isHeavyApple(Apple apple) { return apple.getWeight() > 150; } public static List filterApples(List inventory, Predicate p) { List result = new Arra.. 2023. 1. 29.
자바 cpu 개수 구하기 cpu 개수구하기 => int availableProcessors = Runtime.getRuntime().availableProcessors(); System.out.println(availableProcessors); Executors.newCachedThreadPool 처럼 필요시 알아서 생성되는 스레드도 있으니 확인해보자. ExecutrService 를 통한 스레드 작업을 할때 이용해 봐야겠다. 참고하면 좋은 곳: https://m.blog.naver.com/mals93/220743747346 2023. 1. 28.
728x90