콘텐츠로 이동

2021 04 22 기타

2021-04-22 기타

fetch API

  • 이게 뭐죠? - 비동기 방식으로 데이터를 주고받는 JavaScript 기술인 Ajax 중 하나입니다.
  • 장점이 뭐죠? - 서버 부하가 줄어듭니다. - 웹 요청이 들어왔을 때, HTML을 서버 사이드에서 렌더링하여 반환하는 것이 아니라, - 클라이언트 사이드에서 HTML을 그릴 수 있도록 필요한 정보만을 반환하게됩니다. - 또한 사용자 입장에서 사용성이 좋아집니다.
    - 어떠한 요청을 보낼 때 마다, 페이지가 새로고침되면서 새로운 페이지가 로딩되는 것이 아닌, - HTML에서 필요한 정보만 새로 로딩됩니다.

JDBC 자원 반환

  • JDBC가 뭔가요? - JDBC는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API 입니다. - JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트 하는 방법을 제공합니다.
  • Connection이 많은게 뭔소리죠? - 제가 제대로 Connection을 닫아주지 않았을 때 too many connections 에러를 마주한 적이 있습니다. - 아마 연결이 너무 많이 동시다발적으로 열려있으면, 에러를 발생시키는 것 같습니다.
  • try-with-resource? - 사실 제 코드에서 써본적은 없습니다. - 다만, JDBC에서 커넥션/스테이트먼트/리절트셋을 생성하고 닫아주는 역할을 자동으로 해준다고 알고 있습니다.

멀티 스레드 환경에서 고려할 것?

  • Stateless하게 만들어야 하는 이유? - race-condition이 발생하기 때문입니다. - 멀티 쓰레드 환경에서 동시에 두개의 쓰레드가 동일한 작업을 수행하면, 상태를 가지고 있는 데이터가 의도하지 않은 대로 동작할 수 있습니다. - 이를 방지하기 위해 한번에 하나의 쓰레드만을 접근토록하는 synchronized 예약어가 있는데, 이는 성능저하를 일으킵니다. - 따라서, Stateless하게 만든다면, 해당 고민이 없어집니다.

추상클래스 VS 인터페이스

  • 추상화가 뭔가요? - 추상화란, "데이터와 프로세스 등을 의미가 비슷한 개념이나 표현으로 정의하는 과정"을 일컫어요. - 추상화 과정에서는 구체적인 구현 상세는 감추게 됩니다.
  • 추상화 기법이 뭐뭐가 있나요? - Java에서 추상화 기법으로는, 추상클래스와 인터페이스가 있습니다.
  • 추상클래스와 인터페이스를 비교해 주세요 - 추상클래스란, "클래스 내에 추상 메서드가 하나 이상 포함된 클래스"를 뜻합니다. - 인터페이스란, "모든 메서드가 추상메서드인 경우"를 뜻합니다. - Java8 부터는 default 메서드를 통해, 일반 메스드의 구현도 가능합니다. - 추상클래스는 해당 클래스를 상속받아 기능을 이용하고, 확장하는데에 있습니다. - 즉 슈퍼 클래스의 기능을 이용하거나, 확장하기 위해 사용합니다. - 다중 상속은 지원하지 않습니다. - 인터페이스는 함수의 껍데기만 있는데, 그 이유는 함수의 구현을 강제하기 위해서 입니다 - 구현한 객체들에 대해 동일한 동작을 약속하기 위해 존재합니다. - 인터페이스는 안이 비어있는 메서드들의 형태만 써 놓은 것이며, 상속하는 클래스들에서 해당 메서드들의 내용을 구현해서 가져야 하는 메서드들의 집합입니다.
  • 본인은 언제 추상클래스를 쓰고, 언제 인터페이스를 쓸 건가요? - 물론 여러가지 의견이 있겠지만, 저의 경험으로 미루어보아, - 추상클래스는 "관련성이 높은 클래스간에 코드를 공유하고 싶은 경우" 사용할 것입니다. - 상속받은 클래스들이 공통으로 가지는 메서드와 필드가 많은 경우 사용이 용이합니다. - 저는 체스 미션에서 체스 기물들을 구현할 때 Piece라는 추상클래스를 두고, 이를 상속받은 여러 구체화된 기물들을 설계했습니다. - 명확한 is-a 관계라고 생각했고, 공통으로 가져야할 메서드와 필드가 많았습니다. - 첫수 움직임이라던지, 규칙을 확인하여 true/false를 반환한다는 지 - 인터페이스는 "타입의 행동을 명시하고 싶을 때" 사용할 것입니다. - 전략 패턴에서 인터페이스를 통해 프로그램에서 필요한 알고리즘을 추상화 시킨 경험이 있습니다. - 물론 추상화 기법을 추상클래스를 통해 할수도 있었겠지만, 인터페이스를 통해 시킨 이유는, 해당 전략 콘크리트 클래스의 초점이 어떠한 행동을 하는지에 초점을 맞췄기 때문입니다.

상속 VS 조합

  • 상속을 통해 얻는 장점이 뭔가요? - 코드를 재사용해 중복을 줄임 - 변화에 대한 유연성과 확장성을 증대시킴 - 다형성이 뭐죠? - 다형성은 "하나의 타입에 여러 객체를 대입할 수 있는 성질"이에요.
  • 상속의 단점? - 캡슐화를 저해할 수 있다는 단점이있어요. - 상속이라는 것이 하위 클래스와 상위 클래스를 강하게 의존/결합시킨다. - 상위 클래스의 변화는 하위 클래스의 변화를 필수적으로 만든다. - 상위 클래스의 메서드 이름과 매개 변수의 변화는 하위 클래스 전체의 변경을 야기 - 또한 상위클래스의 메서드를 오버라이딩하게되면, 하위클래스에서는 상위클래스의 계약 사항을 잘 준수해야 해요. - 이를 SOLID의 LSP라고 하는데요, - 계약 사항을 잘 준수하기 위해서, 결국 상위클래스가 내부적으로 어떻게 동작하는지를 하나하나 잘 알아야 해요.
  • 조합은 뭔가요? - 조합은 "기존 클래스가 새로운 클래스의 구성요소로 쓰임"을 지칭 - 새로운 클래스를 만들고 private 필드로 기존 클래스의 인스턴스를 참조함
  • 조합의 장점? - 기존의 클래스의 구현에 의존하지 않음 - 기존 클래스의 public 메서드만 사용할 수 있다. - 객체 내부가 변경되더라도, 영향을 최소화 시켜서 받을 수 있다.
  • 상속은 언제? - 확실한 is-a 관계이면서, - 상위 클래스의 구현이 하위 클래스의 구현에 필수적인 경우 사용하면 좋다고 생각합니다.

캡슐화

  • 캡슐화란, "객체가 내부적으로 기능을 어찌 구현했는지를 감추는 것"입니다. - 변경 가능성이 높은 부분은 내부로 숨기고, 외부에는 상대적으로 안정적인 부분만 공개하도록 합니다.