본문 바로가기

BackEnd/Java&Spring

(14)
함수형 인터페이스 (Functional Interface) Java에서 함수형 인터페이스는 단일 추상 메서드(Single Abstract Method, SAM)를 가진 인터페이스다. Java 8 이상에서는 람다 표현식 및 함수형 인터페이스를 지원한다. 함수형 인터페이스의 추상 메서드 시그니처는 람다 표현식과 연관이 있다. (추상 메서드 시그니처는 해당 함수형 인터페이스가 나타내는 함수의 형태를 결정하는 것) java.util.function 패키지에는 다양한 함수형 인터페이스가 포함되어 있음. Consumer 인터페이스의 추상 메서드는 다음과 같다. @FunctionalInterface public interface Consumer { void accept(T t); } 여기서 accept가 추상 메서드이다. 이 메서드는 하나의 매개변수를 받고 반환값이 없츰. ..
NonNull 사랑...사...사...랑... 그냥 좋아합니다. @NonNull은 사용자에게 null 체크 잘하십쇼 하고 알려줄 수 있는 어노테이션입니다 보통 사용할 수 있는 용도는 아래와 같습니다 Record component / 함수의 파라미터 / 생성자의 파라미터 요렇게 쓸 수 있습니다 public void doSomething(@NonNull String input) { // input은 null일 수 없음 // 여기서 안전하게 input을 사용할 수 있음!! } @NonNull을 안 쓰면 아래와 같이 했겠쥬? 사실 씨쟁이는 아래의 코드가 더 익숙하지만 😒 파라미터만 보면 if 문 만들어야 직성이 풀리는 편. public void doSomething(String input) { // input은 null이면 아니된다.. if( input == null ) {..
Intellij) JUnit5 설정할 사람 괌 요즘 일하면서 내가 제일 신경 쓰고 있는 것은 히스토리를 잘 남기는 것이다 모든 일은 누구나 할 수 있다는 것을 깨달았지만 코드마다 있는 사연은... 그 사람밖에 알 수가 없다는 것이다 🥹 왜 그렇게 생각하게 됐냐구요? 저도 그러고 싶지 않았습니다 그래서!! 테스트 코드를 여느때와 다름없이 작성하던 중... 기존에는 JUnit4 버전으로 사용하고 있었는데 다른 담당자가 테스트 코드 실행 시 빠르게 내용을 파악하시면 좋겠다고 생각이 들었다 결론부터 먼저 말하자면.. 테스트 코드를 실행했을 때 아 이런 테스트~를 쉽게 파악하길 원했다 그러기 위해서는 @DisplayName 같은 어노테이션 사용이 필요했고, 이를 사용하기 위해서는 JUnit 버전을 업그레이드 해야했다 1. JUnit5 의존성 추가 (1) bu..
Error) java: class, interface, or enum expected 해결 File-Settings-Editor-File Encodings Path 추가해서 에러가 난 디렉터리 또는 파일에 Encoding 설정을 해주면 됩니다 그래도 안된다면 새로 파일을 추가하고 코드를 복붙하는게 가장 빠릅니다. 저 같은 경우에는 로그나 코드에 인코딩 설정을 바꿨는데, 저런 에러가 생기더라구요 한글이 깨지는 현상이 생겨서 해결하려다가 에러를 만나게 된; 원인은 BOM(Byte Order Mark) 이라는 것이 생겨서 그렇습니다. 유니코드의 인코딩 방식에는은 빅엔디안(BE)과 리틀엔디안(LE)이 있습니다. 둘의 차이는 바이트를 읽는 순서의 차이인데, 이 것을 파일에 명시하기 위해 앞에 인코딩별 BOM 값을 살짝 넣어 놓습니다.
🌸 startsWith()/endWith() 문자열의 시작과 끝 startsWith()와 endWith()는 함수명으로 유추해볼 수 있듯이, 문자열에 대해 특정 문자로 시작하는지/끝나는지를 확인할 수 있는 함수 입니다. 아래는 간단한 예시 입니다. String str = "@@myId"; System.out.println(str.startsWith("@")); // true System.out.println(str.endWith("@")); // false 이런 식으로 특정 문자열에 대한 확인을 할 수 있습니다. 회원가입 하려는 사용자가 유효하지 않은 문자열을 사용하지는 않는지, 시작/끝 문자열에 있으면 안되는 문자열이 있는지 등등 확인할 때 활용될 수 있겠네욤 startsWith() Syntax public boolean startsWith(String chars)..
@JsonProperty와 @JsonNaming 클라이언트와 연동 규격을 정의하며, JSON 형식을 변경하게 되었습니다. 원래 사용하던 연동 방식은 카멜 케이스 (Camel Case) 방식이었는데, 연동에 있어 최대한 빠르게 서비스를 하기 위해서 다 소문자로 변경해달라는 요구사항이 있어서 @JsonProperty를 사용해서 변경했습니다. 기존에는 REST API 메시지를 받을 때 @RequestBody를 사용해서 처리하고 있었어서 변수 이름을 바꾸는건 비효율적이었다 💦 🕒 JSON 명명 규칙 3가지 표준은 아니지만 아래의 3가지 스타일로 많이 사용한다. Pascal camelCase snake_case 만약 내 이름을 표현하기 위한 네이밍을 하고 있다면 // Pascal MyName // camelCase myName // snake_case my_n..
Java의 Hash 알고리즘 MessageDigest 요즘 핫한 보안 문제 ❗ 이번에 신규 개발하는 기능에도 보안을 위해 사용자의 정보가 담긴 내용은 암호화를 하기로 했답니다. Java에서 Hash 값 생성을 할 때 많이 쓰는 클래스는 MessageDigest인데, 오늘은 이 친구를 정리해보겠습니다. 🔐MessageDigest https://docs.oracle.com/javase/7/docs/api/java/security/MessageDigest.html MessageDigest (Java Platform SE 7 ) This MessageDigest class provides applications the functionality of a message digest algorithm, such as SHA-1 or SHA-256. Message dig..
HTTP Query Parameter에서 Arrary List 사용 API 설계할 때, GET을 사용하여 서버의 정보를 조회하고 싶은데, 범위가 필요한 값들이 있다. Query Paramter에 Array도 가능하고 Json Type도 쓸 수 있다는 것을 모른다면 POST 메소드를 사용하여 Body 메지시에 범위 값을 사용하는 걸로 설계할 수 있다. 예를 들면, POST /bell/v2/list HTTP/1.1 ... { "list":[0, 5] } 물론 이 방식도 할 수 있다. 근데 Resource URI를 더 고민해야하는;; 상황에 놓이게 된다 GET에도 body 메시지를 물론 보낼 수 있다. 근데 GET 메소드에 대해서는 body를 처리하지 않는 서버가 있을 수 있기 때문에 통상적인? 표현은 아닌 듯 하다. 그래서 아래와 같이 보내면 간단히 해결된다. GET /be..