전체 글
-
PART04 - APPENDIX B 기타 알고리즘algorithm/이것이 취업을 위한 코딩테스트다 2023. 8. 23. 14:23
소수 판별 알고리즘 - 소수(Prime Number) : 1보다 큰 자연수 중에서 1과 자기 자신을 제외한 자연수로는 나누어떨어지지 않는 자연수이다. 약수의 성질 - 모든 약수가 가운데 약수를 기준으로 곱셈 연산에 대해 대칭을 이룬다. - 따라서 우리는 특정한 자연수의 모든 약수를 찾을 때 가운데 약수(제곱급)까지만 확인하면 된다. import math # 소수 판별 함수 (2이상의 자연수에 대하여) def is_prime_number(x): # 2부터 x의 제곱급까지의 모든 수를 확인하며 for i in range(2, int(math.sqrt(x)) + 1): # x가 해당 수로 나누어 떨어진다면 if x % i == 0: return False# 소수가 아님 return True# 소수임 소수의 판..
-
아이템18. 상속보다는 컴포지션을 사용하라Java/이펙티브 자바 2023. 8. 23. 12:27
핵심 정리 - 패키지 경계를 넘어 다른 패키지의 구체 클래스를 상속하는 일은 위험하다. ㆍ상위 클래스에서 제공하는 메서드 구현이 바뀐다면... ㆍ상위 클래스에서 새로운 메서드가 생긴다면... - 컴포지션 (Composition) ㆍ새로운 클래스를 만들고 private 필드로 기존 클래스의 인스턴스를 참조. ㆍ새 클래스의 인스턴스 메서드들은 기존 클래스에 대응하는 메서드를 호출해 그 결과를 반환한다. ㆍ기존 클래스의 구현이 바뀌거나, 새로운 메서드가 생기더라도 아무런 영향을 받지 않는다. 완벽 공략 요약 - p119, 데코레이터 패턴 - p119, 컴포지션과 전달 조합은 넓은 의미로 위임(delegation)이라고 부른다. - p119, 콜백 프레임워크와 셀프 문제 완벽 공략 - 데코레이터 패턴 기존 코드..
-
아이템17. 변경 가능성을 최소화 하라.Java/이펙티브 자바 2023. 8. 15. 10:07
핵심 정리 - 불변 클래스 - 불변 클래스는 가변 클래스보다 설계하고 구현하고 사용하기 쉬우며, 오류가 생길 여지도 적고 훨씬 안전하다. - 불변 클래스를 만드는 다섯 가지 규칙 ㆍ객체의 상태를 변경하는 메서드를 제공하지 않는다. ▷ setter를 제공하지 않는다. ㆍ클래스를 확장할 수 없도록 한다 ▷ 상속을 할 수 없게 만든다. ( 1. final class 2. private contructor ) ㆍ모든 필드에 final로 선언한다. ㆍ모든 필드를 private으로 선언한다. ▷ public이면 필드 참조를 할 수도 있기에 우리는 필드 참조를 원치않는다. ㆍ자신 외에는 내부의 가변 컴포넌트에 접근할 수 없도록 한다. ▷ getter를 만들어 주지 않거나 방어적인 복사를 해서 사용 public fin..
-
아이템16. public 클래스에서는 public 필드가 아닌 접근 메서드를 사용하라.Java/이펙티브 자바 2023. 8. 13. 11:59
핵심 정리 - 클라이언트 코드가 필드를 직접 사용하면 캡슐화의 장점을 제공하지 못한다. - 필드를 변경하려면 API를 변경해야 한다. - 필드에 접근할 때 부수 작업은 할 수 없다. - paackage-private 클래스 또는 private 중첩 클래스라면 데이터 필드를 노출해도 문제가 없다. 완벽 공략 - p103, 아이템 67에서 설명하듯, 내부를 노출한 Dimesion 클래스의 심각한 성능문제는 오늘날까지도 해결되지 못했다. public class DimensionExample { public static void main(String[] args) { Button button = new Button("hello button"); button.setBounds(0, 0, 20, 10); Dimen..
-
10장 인덱스 사용DB & SQL/SQL 레벨업 2023. 8. 9. 12:13
34. 인덱스와 B-tree - RDB에서 사용하는 인덱스는 구조에 따라 다음 세 가지로 분류할 수 있다. ㆍB-tree 인덱스 ㆍ비트맵 인덱스 ㆍ해시 인덱스 1. 만능형 : B-tree - B-tree 인덱스는 이름 그대로 데이터를 트리 구조로 저장하는 형태의 인덱스이다. - 균형잡힌 뛰어난 범용성을 인정받아 가장 많이 사용된다. - 데이터베이스에서 '인덱스'라고 말하면 대부분 B-tree 인덱스를 지칭하는 것이다. - 실제로 특별한 수식을 붙이지 않은 채 CREATE INDEX 구문을 실행하면, 모든 DBMS에서 암묵적으로 B-tree 인덱스가 만들어진다. - B-tree가 검색 알고리즘으로서는 뛰어나게 성능이 좋은 편은 아니다. - B+tree의 검색 성능이 뛰어난 이유 ㆍB+tree는 루트와 리프..
-
9장 갱신과 데이터 모델DB & SQL/SQL 레벨업 2023. 8. 9. 11:59
26. 갱신은 효율적으로 1. NULL 채우기 2. 반대로 NULL을 작성 27. 레코드에서 필드로의 갱신 1. 필드를 하나씩 갱신 2. 다중 필드 할당 - 여러 개의 필드를 리스트화하고 한 번에 갱신하는 방법 - 이렇게 하면 서브쿼리를 한꺼번에 처리할 수 있어 성능도 향상되고 코드도 간단해진다. 3. NOT NULL 제약이 걸려있는 경우 MERGE 구문 사용 - NOT NULL의 경우에 대응하는 한가지 방법이 MERGE 구문을 사용하는 것이다 - 본래 MERGE 구문은 UPDATE와 INSERT를 한번에 시행하려고 고안된 기술이다. ㆍ하지만 UPDATE 또는 INSERT만 수행해도 구문 상에는 문제가 없다. 28. 필드에서 레코드로 변경 29. 같은 테이블의 다른 레코드로 갱신 1. 상관 서브쿼리 사용..
-
7. 마지막 세션Kotlin/실전! 코틀린과 스프링 부트로 ... 개발 2023. 8. 8. 20:29
추가 - 테스트와 영속성 컨텍스트 - 테스트 코드와 LazyInitializationException ㆍ테스트 코드에서 A 엔티티를 불러오고 B객체에 접근을 하면 영속성 컨텍스트가 종료되어 버려서 지연 로딩 객체를 초기화할 수 없게 될 경우 - 테스트 코드에서 영속성 컨텍스트를 쓰고 싶은 상황이 분명 있음! @Transactional fun saveUserAndLoanTwoBooks() { val newUser = User("A", 123) val books = bookRepository.saveAll(listOf(Book("책1", COMPUTER), Book("책2", COMPUTER))) books.forEach { book -> newUser.loanBook(book) } // UserLoanHi..
-
6. 네 번째 요구사항 추가하기 - QuerydslKotlin/실전! 코틀린과 스프링 부트로 ... 개발 2023. 8. 8. 20:07
37. Querydsl 도입하기 1. JPQL과 Querydsl의 장단점을 이해할 수 있다. 2. Querydsl을 Kotlin + Spring Boot 와 함께 사용할 수 있다. 3. Querydsl을 활용해 기존에 존재하던 Repository를 리팩토링 할 수 있다. JPQL은 무슨 단점이 있을까? - 문자열이기 때문에 '버그'를 찾기가 어렵다! - JPQL 문법이 일반 SQL와 조금 달라 복잡한 쿼리를 작성할 때마다 찾아보아야 한다. Spring Data JPA는 무슨 단점이 있을까? - 조건이 복잡한 동적쿼리를 작성할 때 함수가 계속해서 늘어난다. - 프로덕션 코드 변경에 취약하다. JPQL과 Spring Data JPA의 단점 정리! 1. 문자열로 쿼리를 작성하기에 버그를 찾기 어렵다. 2. 문..