TIL

220531 TIL

Vince_rf 2022. 5. 31. 21:49

#인터페이스와 클래스
참고 : http://www.tcpschool.com/java/java_polymorphism_interface

#Requiredargsconstructer 와 Autowired

왜 굳이 전자의 어노테이션을 쓰는가? 라는 의문이 생겼다.

참고: https://upcake.tistory.com/417

참고 페이지 하단에 참조 탭에도 정보가 있으니 놓치지 말자.

#implements 와 extends 차이

extends
부모에서 선언 / 정의를 모두하며 자식은 메소드 / 변수를 그대로 사용할 수 있음
implements (interface 구현)
부모 객체는 선언만 하며 정의(내용)은 자식에서 오버라이딩 (재정의) 해서 사용해야함
abstract
extends와 interface 혼합. extends하되 몇 개는 추상 메소드로 구현되어 있음

자바는 "다중상속"을 지원하지 않는다는 점이다.

다중상속이란 부모클래스가 두개 이상 존재할 수 있다는 것인데, 자바에서는 이를 지원하지 않는다. 즉 , public class Son extends Father, Mother{...} 이것이 지원하되지 않는다는 것이다.

자바는 다중상속을 지원하지 않는다. 대신 implements(인터페이스)가 등장했다.

implements의 가장 큰 특징은 이렇게 부모의 메소드를 반드시 오버라이딩(재정의)해야 한다.

또한 이 implements는 다중상속을 대신해준다.

public class Son implements Father, Mother{...}
이러한 형태로 말이다.

extends는 일반 클래스와 abstract 클래스 상속에 사용되고, implement는 interface 상속에 사용된다.
class가 class를 상속받을 땐 extends를 사용하고, interface가 interface를 상속 받을 땐 extends를 사용한다.
class가 interface를 사용할 땐 implements를 써야하고
interface가 class를 사용할 땐 implements를 쓸수 없다.
extends는 클래스 한 개만 상속 받을 수 있다.
extends 자신 클래스는 부모 클래스의 기능을 사용한다.
implements는 여러개 사용 가능하다.
implements는 설계 목적으로 구현 가능하다.
implements한 클래스는 implements의 내용을 다 사용해야 한다.

extends는 클래스를 확장하는 거고 implements는 인터페이스를 구현하는 것이다.
인터페이스와 보통 클래스의 차이는 인터페이스는 정의한 메소드를 구현하지 않아도 된다.
인터페이스를 상속받는 클래스에서 인터페이스에 정의된 메소드를 구현하면 된다.

출처 : https://velog.io/@hkoo9329/%EC%9E%90%EB%B0%94-extends-implements-%EC%B0%A8%EC%9D%B4

# .orElseThrow 에 대해서 알아보자

참고 : https://brownbears.tistory.com/544

# 람다식에 대해서 알아보자

참고 : https://yeon-kr.tistory.com/168

# Generic에 대해서 알아보자

제네릭(Generic)은 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미한다. 한마디로 특정(Specific) 타입을 미리 지정해주는 것이 아닌 필요에 의해 지정할 수 있도록 하는 일반(Generic) 타입이라는 것이다.

참고 : https://st-lab.tistory.com/153 

참고 사이트에 Generic의 사용방법 탭에 좋은 표가 있다. 놓치지 말자.

# Generic과 와일드카드

UserDatailsImpl에 있는

@Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return Collections.emptyList();
    }
}

이 코드를 해석하기 위한 지식에 대해서 알아보자!

참고 : https://tiboy.tistory.com/475

# Collection Framework ( List, Set, Map )에 대해서 알아보자!

참고: https://hwan1001.tistory.com/10

참고: https://bangu4.tistory.com/194 
이 링크는 인터페이스와 메서드 위주의 내용이다.

그렇다면 Collection<> 으로 선언되는 녀석들은 뭐지?

-> 답변 : Collection 타입은 다 받을 수 있다.

Collection<Object>로 지정을 해주는 것이 바로 !!!!!!!!! 제네릭이다.
이렇게 선언을 해주면 Object 타입으로 밖에 받을 수가 없다.
그래서 나온 것이 !!!!!! 와일드카드.

와일드 카드는 Collection<?>으로 물음표를 앞에 붙여주는데, 이러면 아직 알려지지 않은 혹은 미정의 된 Collection 타입이라는 의미이다.

여기 다시 !!!! 참고 !!!! : https://tiboy.tistory.com/475
아래 부분에 <? extends E> 에 대한 개념이 있다 굉장히 중요하다.

#스프링 시큐리티 구조 하나하나 뜯어보기

참고 : https://codingdiary99.tistory.com/18

#GrantedAuthority가 상속받고 있는 Serializable(직렬화)에 대해서 알아보자!

직렬화
자바 시스템 내부에서 사용되는 Object 또는 Data를 외부의 자바 시스템에서도 사용할 수 있도록 바이트 형태로 데이터를 변환하는 기술로써, JVM의 메모리에 상주되어 있는 객체 데이터를 바이트 형태로 변환하는 기술이다.
다차원의 자료를 파일로 저장하거나 네트워크로 보내기에 알맞게 일차원으로 펼치고 다시 원래대로 되돌리는 것을 직렬화(serialization)이라고 부른다.
역직렬화는 직렬화의 반대를 의미한다.(바이트 => data, object)

참고 및 출처 : https://haranglog.tistory.com/4


################## userdetails 넘겨주는 법 !!!!!!!!!!!!!

public Board(BoardRequestDto requestDto, UserDetailsImpl userDetails) {
        this.title = requestDto.getTitle();
        this.content = requestDto.getContent();
        this.writer = userDetails.getUsername();
    }

이런식으로 엔티티에서 userDetails를 매개변수에 넣어주고

@PostMapping("/boards/write")
    public Board writeBoard(@RequestBody BoardRequestDto requestDto,
                            @AuthenticationPrincipal UserDetailsImpl userDetails) {
        Board board = new Board(requestDto,userDetails);

        return boardRepository.save(board);
    }

컨트롤러에서 userDetails를 이렇게 넘겨주면 !

엔티티에서 getUsername으로 가져온 username이 !!!!!
writer로 Board 테이블에 들어온다 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

'TIL' 카테고리의 다른 글

220612 WIL  (0) 2022.06.12
220606 TIL  (0) 2022.06.06
220530 TIL  (0) 2022.05.30
220529 TIL  (0) 2022.05.29
220525 TIL  (0) 2022.05.26