본문 바로가기

전체 글

(127)
SpQL (Spring Expression Language) 에 대해서 [인트로] @Value와 같은 어노테이션으로 쉽고 간편하게 필드의 값을 주입하여 빈에 대한 설정을 했지만 이때 value에 지정하는 값이 어떤 규칙으로 사용되는지에 대해서 크게 궁금하지는 않았지만 어쩌다 보니 이런 표현식이 많은 부분에서 사용되는 것을 발견하고 잘 쓸 수 있다면 spring 개발을 함에 있어서 유용한 경우가 있을 것 같다는 생각에 공부를 해보았다. [spQL을 어디서 흔히 볼 수 있을까?] 1. spring framework : @Value 2. data : @Query 3. security : @PreAuthorize @PostAuthorize @PreFilter @PostFilter 4. view : thymeleaf 스프링과 관련된 많은 부분에서 spQL을 사용하고 있었다. [spQ..
[회고] 우아한 테크 코스 2차 과제 테스트 보호되어 있는 글입니다.
index가 왜 필요한가? index 란? 도서의 색인이나 사전과 같이 데이터를 쉽고 빠르게 찾을 수 있도록 만든 데이터 구조 index를 사용하는 이유? 검색 속도(조회 속도)를 향상시키위해서 사용한다. 시스템의 부하를 줄여서 시스템 전체에 대한 성능에 긍정적인 영향을 준다. index가 빠른 이유 1. 효율적인 자료구조 사용 index를 사용한다고 했을 때 주로 B-tree 자료구조를 사용한다. 트리 자료구조를 사용하기 때문에 특정 자료를 검색할 때 O(log N)의 시간 복잡도로 탐색이 가능하다. 반면에 테이블을 전체 조회 (풀 스캔)할 때는 O(N)의 시간 복잡도로 탐색을 해야한다. index가 빠른 이유는 효율적인 자료구조를 적용하였기 때문이다. 2. 캐시 버퍼의 효율적인 사용 테이블에서 데이터를 조회해서 조건을 검색할 ..
최대공약수 구하기 https://school.programmers.co.kr/learn/courses/30/lessons/12940 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 최대공약수를 구하는 문제를 푸는데 O(n)의 시간 복잡도로 해결을 했다. 좀 더 효율적인 알고리즘이 있는데 활용을 하지 못하는 것 같아서 구글링을 해서 더 직관적이고 효율적인 알고리즘을 공부해서 소개하고자 한다. 유클리드 호제법 - 증명 A = B * c + r 일 때, A, B의 최대 공약수는 B, r의 최대 공약수와 같다. 라는 것이다. 전제 1. A와 B의 최대 공약수는 G이다. 2. A =..
Item 15. 클래스와 멤버의 접근 권한을 최소화하라 [WHY] 잘 설계된 컴포넌트는 얼마나 정보 은닉(캡슐화)를 고려했는지 여부이다. 내부 요소를 외부에 최소한으로 노출하기 위해서 접근 권한을 최소화하는 것이다. [WHEN] 컴포넌트를 설계할 때. [HOW] 꼭 필요한 것만 골라 최소한의 public API를 설계하자. 그 외에는 클래스, 인터페이스, 멤버가 의도치 않게 API로 공개되는 일이 없도록 해야 한다. public 클래스는 상수용 public static final 필드 외에는 어떠한 public 필드도 가져서는 안 된다. public static final 필드가 참조하는 객체가 불변인지 확인하라. [캡슐화] 정보 은닉(캡슐화)의 장점 시스템 개발 속도를 높인다. 시스템 관리 비용을 낮춘다. 성능 최적화에 도움을 준다. 소프트웨어 재사용성을 ..
Item 14. Comparable을 구현할지 고려하라. [WHY] Comparable을 구현한 객체들의 배역은 손쉽게 정렬할 수 있다 검색, 극단 값 계산, 자동 정렬되는 컬랙션 관리도 쉽게 할 수 있다. [WHEN] 알파벳, 숫자, 연대 같이 순서가 명확한 값 클래스를 작성할 때 [HOW] compareTo 규약 두 객체의 참조를 바꾸어도 예상한 결과가 나와야 한다. 추이성을 만족시켜야 한다. a 은 오류를 유발할 가능성을 내포하고 있기 때문에 정적 메서드 사용을 더 권고한다. 특히 실수 타입을 비교할 때는..
Grade readers youtube를 이용해서 영어 공부하기 보호되어 있는 글입니다.
Item 13. clone 재정의는 주의해서 진행하라. [WHY] Object.clone() 은 깊은 복사를 보장하지 않느다. Object.clone() 은 동기화를 고려하지 않는다. [WHEN] clone() 메서드를 구현할 때. [HOW] 복사 생성자, 복사 팩터리를 이용해서 안전한 복사(깊은 복사)를 구현하자. 부득이하게 Cloneable을 구현한 객체를 사용해야한다면 깊은 복사가 되도록 clone()메서드를 구현하자.