본문 바로가기

개발/Java4

[리팩토링] 함수형 인터페이스와 lambda 람다 익명 함수 함수를 하나의 식으로 표현한 것이다. 불필요한 코드를 줄이고 가독성을 높일 수 있다. // 람다 방식 (매개변수, ... ) -> { 실행문 ... } // 예시 () -> "Hello World!"; 함수형 인터페이스 1개의 추상 메서드를 갖는 인터페이스를 의미한다. java 8부터는 인터페이스에 구현체가 있는 default method, static method를 추가할 수 있는데, 여러 default method, static method가 있더라도 추상 메서드가 오직 하나인 경우를 함수형 인터페이스라고 한다. lambda 표현식은 함수형 인터페이스로만 사용 가능하다. @FunctionalInterface 애노테이션은 해당 인터페이스가 함수형 인터페이스 조건에 맞는지 검사한다. @F.. 2023. 8. 16.
[리팩토링] Optional과 orElseGet 그리고 함수형 인터페이스 다음과 같은 코드가 있었다. private User getUser(OAuthAttributes attributes, PlatformType platformType){ User findUser = userRepository.findByUserPlatformAndUserSocialId(platformType, attributes.getOauth2UserInfo().getId()).orElse(null); if(findUser == null){ return saveUser(attributes, platformType); } return findUser; } userRepository의 메서드는 Optional 타입이었다. public interface UserRepository extends JpaReposi.. 2023. 8. 16.
String, StringBuilder, StringBuffer, CharSequence 이해하기 String str = new String(); str += "asdf"; --- (1) str += "asdf"; --- (2) str += "qwer"; --- (3) ... 을 계속 반복하면 (메모리 주소: 100) str = "asdf" 메모리 주소 100은 쓰레기가 된다.(GC의 대상) (메모리 주소: 200) str = "asdfasdf" 메모리 주소 200은 쓰레기가 된다. (GC의 대상) (메모리 주소: 300) str = "asdfasdfqwer" 이런 반복 작업이 계속 되면 GC를 계속 하게 되고, 시스템의 CPU을 사용하게 되고 시간도 많이 소요된다. StringBuilder나 StringBuffer를 사용하면 새로운 객체를 생성하는 것이 아니라, 기존 객체에 덧붙여 사용하게 된다. .. 2023. 8. 6.
Wrapper Class: int와 Integer SpringBoot 프로젝트 진행 중 JPA Entity를 설계할 때 int가 아닌 Integer로 하는 것을 보고 그 차이가 정확히 무엇인지, 왜 쓰는지, 어떤 경우에 어떤 것을 쓰는게 좋은지 정리해보고자 한다. 자바의 데이터 타입 1) primitive type - 정수, 실수, 문자, 논리형의 실제 데이터 값 저장 - boolean, byte, short, int, long, float, double, char - 실제 값만 저장하기 때문에 스택 메모리에 저장된다. - 기본값이 설정되어있기에(boolean -> false, int -> 0,,,) Null로 초기화할 수 없다. 2) reference type - Array, Enum, Class, Interface - 객체의 주소를 저장. 메모리 번.. 2023. 7. 9.