Computer Science

문제점현실의 객체는 순환 참조 관계를 가질 수 있다. 그러나 이를 코드로 구현할 때 문제가 발생한다. 그래서 클래스 설계를 할 때 현실의 순환 참조 관계에 있는 클래스들을 프로그램에서는 순환 참조하지 않도록 설계해야 한다.예를 들어, RPG 게임의 캐릭터와 몬스터는 서로 공격하고 데미지를 주고 받을 수 있기 때문에 순환 참조 관계를 갖는 것처럼 보인다. 그러나 이를 구현할 때는 Battle이 Chracater와 Monster에 의존하게 하여 순환 참조를 피할 수 있다. 이것이 뒤에서 설명할 중재자 패턴이기도 하다.생성할 때의 문제: 서로 의존성을 주입받아야 하는 관계에 놓여 있기 때문에 어느 클래스도 생성할 수 없다.A를 생성하려면 B 인스턴스가 필요하고, B를 생성하려면 A 인스턴스가 필요한 관계이니 ..
요약그렇다.getter도 메소드이기 때문이다응용하면 getter 메소드는 유지하면서 구현 클래스에서 멤버 값을 그대로 보내는 대신, 기존의 멤버로 계산된 값을 리턴하게 구현할 수 있다.사용 사례Java List의 `.size()`주의점 (의견)그래도 인터페이스는 공유해야할 행동을 정의하는 것이 더 좋기 때문에 interface에 멤버 값을 반환하는 getter를 남용하는 것은 지양하는 게 좋을 것 같다. 정말 그 기능을 구현하는 클래스가 공통적으로 특정 값을 반환할 필요가 있을 때만 선언하는 것이 좋을 것 같다. callee가 호출할 수 있도록.사실 찾아본 목적은 DTO에서 특정 필드를 재사용하기 위해서였다. 이 경우, Spring framework은 사실 getter와 setter라는 public 메..
요약요청은 올바르지만 요청을 처리할 수 없을 때 사용한다ex) 엔티티의 생성 가능한 최대 개수 초과https://stackoverflow.com/questions/51990143/400-vs-422-for-client-error-request 400 vs 422 for Client Error RequestI've read a lot of posts and articles regarding proper http status code to return for client request error. Others suggest to use 400 as it has been redefined in RFC 7231 though I'm not sure if thestackoverflow.comhttps://devel..
개요deadlock 방지FK에 해당하는 레코드가 있는 지 조회하기 위해 lock이 걸리는데, 이 lock으로 인한 성능 저하를 줄이기 위해서이 두 가지 리스크가 FK Constraint를 걸어서 얻는 이점보다 크다고 판단함일반적으로 FK에 대응되는 레코드가 없을 때 발생하는 손실이 전체 DB 성능 저하보다 크지 않음JOIN 또는 SELECT 결과가 NULL일 테니 쉽게 탐지 가능함프로그래밍적으로 제어 가능단, FK Constraint는 끊어도 FK에 Index는 생성해야 한다JOIN 성능을 위해서일부 ORM은 FK Constraint를 끊으면 Index도 사라지니 잘 확인해야 한다JPA에서 FK Constraint 제거하는 방법foreignKey = @ForeignKey(ConstraintMode.NO_..
개요WHERE IN 보다는 JOIN 문의 성능이 더 좋다WHERE IN 절은 실행 계획에서 OR절로 변환되어 N번의 동등(=) 비교를 수행하기 때문에 성능이 나쁘다MySQL 5.6버전부터는 실행 계획에서 IN절을 JOIN으로 변환하여 성능을 개선하였다서브쿼리 존재 유무만 판별할 때는 IN대신 EXISTS 문을 사용하여 성능을 개선할 수 있다서브쿼리를 반복해서 실행하는 단점이 있다그러나 서브쿼리 WHERE 조건에 인덱스가 걸려 있다면 IN보다 빠를 것으로 예상된다IN: 동등 비교를 서브쿼리 결과 수만큼 수행, 반복 vs EXISTS: 인덱스 타고 가서 데이터 존재 여부 판별을 반복서브쿼리 결과 row 수가 많다면 EXISTS가 유리, 적다면 IN이 유리할 것으로 예상된다서브쿼리 결과 row 수가 증가하면 ..
https://www.ssemi.net/what-is-the-bearer-authentication/ 토큰 기반 인증 Bearer AuthenticationOAuth를 들어가려고 생각하다가, 이전에 Bearer scheme 부터 조져야 겠다는 생각을 먼저 해봤다 블로그에 글을 쓸 때 마다 드는 생각Bearer scheme 에 대해서 정확히 설명을 하기 위해서 여러 자료들을 봤www.ssemi.net
개요 리액티브 프로그래밍은 데이터 스트림을 함수로 조작하고 비동기적으로 작업하는 프로그래밍 패러다임이다. 데이터 소스에서 발생하는 데이터 이벤트 스트림을 옵저버가 구독하여 처리한다. 리액티브 프로그래밍은 함수형 프로그래밍 개념을 활용하여 데이터 스트림을 선언적으로 처리하는 패러다임이다. 복잡한 비동기 프로그래밍을 단순화할 수 있다. 함수형 프로그래밍 (Functional Programming) 프로그램을 순수 함수(Pure Function)의 조합으로 구현하는 프로그래밍 패러다임 순수 함수 (Pure Fucntion) Deterministic: 동일한 입력에 대해서 항상 동일한 출력을 반환하고 Side Effect 없음: 함수를 실행하며 외부 상태를 변경하지 않는 함수 비동기 프로그래밍 (Asychron..
정의객체 지향 프로그래밍에서 Factory는 다른 object를 생성하는 object이다.factory method: new Class object를 반환하는 메소드예시// ShapeFactory 클래스class ShapeFactory { // 도형을 생성하는 Factory Method public Shape createShape(String type) { if (type.equalsIgnoreCase("circle")) { return new Circle(); } else if (type.equalsIgnoreCase("rectangle")) { return new Rectangle(); } return..