스프링 시큐리티를 공부하던중
이것은 뭔데 메서드를 이런식으로 지렁이처럼 이어붙여 쓰는거지? 하고 타서 들어가봤다.
생성자였어..?
생성자를 정말 이어붙일 수 있나 시도해보았다.
와!!ㅋㅋㅋ 이런식으로 되는거구나 생성자를 붙여 쓸 수 있구나 ㅋㅋㅋㅋ
나중에 붙인거로 수정되는구나!!
근데 앞에 C가 붙어있길래 눌러봤더니 제네릭!?
근데 그럼... 뭔가 이상하다
뭔가
뭔가
뭔가 이상해
애초에 생성자가 아니라 제네릭타입을 반환하는 메서드잖아..!
메서드를 이렇게 이어서 쓴다는게 무슨 소리일까
다른것들은 계속 이어붙일 수 있는데 void 타입을 반환하면 문장이 끝난다.
다른건 객체를 반환하는데 void는 객체가 없다.
객체를 반환해서 메서드를 계속해서 이어붙인다.
이거였구나~~~
검색해보니 Method Chaining 이란 디자인패턴이었다.
동일한 객체에 대해 여러 메서드를 호출할 수 있도록 각 메서드가 자기 자신(this)을 반환하도록 설계된다. 이렇게 하면 하나의 메서드 호출 이후에 반환된 객체를 사용하여 다음 메서드를 호출할 수 있는 것이다.
뜬금없이 Jwt.builder() 라며 선언 될 수 있었던 이유는...
builder라는 static 메서드로 선언되어 있었기 때문이며, 이것이 Jwt 빌더 객체를 호출되어 compact()로 마무리 된것이다.
마지막에 쓰인 compact() 메서드는 JSON Web Token (JWT) 빌더에서 최종적으로 JWT를 생성하고 반환하는 메서드이다.
JWT는 일반적으로 세 가지 부분으로 구성되어 있습니다: Header, Payload, Signature. compact() 메서드는 이러한 부분들을 조합하여 하나의 문자열로 만들어주는 역할을 합니다. 이렇게 조합된 JWT 문자열은 인코딩된 형식으로 되어 있으며, 클라이언트나 서버 간에 안전하게 전송될 수 있습니다.
여러 메서드를 호출하여 JWT를 구성한 후에, compact() 메서드를 호출함으로써 최종적인 JWT 문자열을 얻을 수 있습니다. 이 문자열은 보안 서명이 포함되어 있어서 클라이언트나 서버에서 JWT의 유효성을 검사할 수 있습니다.