본문 바로가기

공부 기록

(319)
[이펙티브 자바 3/E] 아이템20 - 추상 클래스보다는 인터페이스를 우선하라 - 자바가 제공하는 다중 구현 메커니즘 두 가지 => 인터페이스, 추상 클래스 - 두 메커니즘 모두 인스턴스 메서드를 구현 형태로 제공할 수 있다. (자바 8부터 인터페이스도 디폴트 메서드를 제공할 수 있게 됨) - 가장 큰 차이점 : 추상 클래스가 정의한 타입을 구현하는 클래스는 반드시 추상 클래스의 하위 클래스가 되어야 한다. 인터페이스가 선언한 메서드를 모두 정의하고 그 일반 규약을 잘 지킨 클래스라면 다른 어떤 클래스를 상속했든 같은 타입으로 취급된다. 인터페이스의 장점 - 기존 클래스에도 손쉽게 새로운 인터페이스를 구현해넣을 수 있다. - 믹스인(mixin) 정의에 안성맞춤이다. * 믹스인이란 클래스가 구현할 수 있는 타입으로, 믹스인을 구현한 클래스에 원래의 '주된 타입' 외에도 특정 선택적 ..
Stored Procedure Stored Procedure 사용자가 정의한 프로시저 RDBMS에 저장되고 사용되는 프로시저 주된 사용 목적은 비즈니스 로직 구현 구체적인 하나의 task를 수행한다. ⬇️ 두 정수의 곱셈 결과를 가져오는 프로시저 delimiter $$ CREATE PROCEDURE product(IN a int, IN b int, OUT result int) BEGIN ㅤㅤㅤㅤSET result = a * b; END $$ delimiter ; ⬇️ 프로시저 사용 call product(5, 7, @result); SELECT @result; ㅤㅤㅤㅤ ⬇️ 두 정수를 맞바꾸는 프로시저 delimiter $$ CREATE PROCEDURE swap(INOUT a int, INOUT b int) BEGIN ㅤㅤㅤㅤSET..
[이펙티브 자바 3/E] 아이템19 - 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라 - 상속용 클래스는 재정의할 수 있는 메서드들을 내부적으로 어떻게 이용하는지(자기사용) 문서로 남겨야 한다. - 재정의 가능한 메서드 => public과 protected 메서드 중 final이 아닌 모든 메서드 - 더 넓게 말하면, 재정의 가능 메서드를 호출할 수 있는 모든 상황을 문서로 남겨야 한다. 예를 들어 백그라운드 스레드나 정적 초기화 과정에서도 호출이 일어날 수 있다. - 내부 메커니즘을 문서로 남기는 것만이 상속을 위한 설계의 전부는 아니다. - 효율적인 하위 클래스를 큰 어려움 없이 만들 수 있게 하려면 클래스의 내부 동작 과정 중간에 끼어들 수 있는 훅(hook)을 잘 선별하여 protected 메서드 형태로 공개해야 할 수도 있다. (드물게는 protected 필드로 공개해야 할 수도..
제대로 이해하는 API | 개발자필수지식 https://youtu.be/9MEnZKjw9H4?si=3-xTaeua2Sk15wVy API(Applicatoin Programming Interface) - 둘 이상의 컴퓨터 프로그램이 서로 통신하는 방법이자 컴퓨터 사이에 있는 중계 계층 - 예) 프로토콜, 메서드, 데이터타입 등이 정의된 중계 계층 Interface - 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면. 이를 통해 해당 컴퓨터의 내부 서버가 어떻게 구현되어 있는지는 상관 없이 인터페이스를 통해 통신 등이 가능 API의 장점 1. 제공자는 서비스의 중요한 부분을 드러내지 않아도 된다. 예를 들어 DB 설계 구조나 드러내고 싶지 않은 DB의 테이블 정보, 서버의 상수값 등을 드러내지 않고, 드러내..
kafka 조금 아는 척하기 3 (개발자용)- 컨슈머 https://youtu.be/xqrIDHbGjOY?si=yvPFI6gIrgZF68JM 컨슈머 - 토픽 파티션에서 레코드 조회 토픽 파티션은 그룹 단위 할당 - 컨슈머 그룹 단위로 파티션 할당 - 컨슈머 개수가 파티션 개수보다 커지면 X 커밋된 오프셋이 없는 경우 - 처음 접근이거나 커밋한 오프셋이 없는 경우 - auto.offset.reset 설정 사용 => earliest : 맨 처음 오프셋 사용 => latest : 가장 마지막 오프셋 사용(기본값) => none : 컨슈머 그룹에 대한 이전 커밋이 없으면 익셉션 발생 컨슈머 설정 - 조회에 영향을 주는 주요 설정 - fetch.min.bytes : 조회 시 브로커가 전송할 최소 데이터 크기 => 기본값 1 => 이 값이 크면 대기 시간은 늘지만 처..
kafka 조금 아는 척하기 2 (개발자용) - 프로듀서 https://youtu.be/geMtm17ofPY?si=aDYPrpk_JttKW-ii 프로듀서 - 토픽에 메시지 전송(토픽, 키, 값) Sender와 send()는 서로 다른 쓰레드로 동작 전송 결과 확인 안 함 producer.send(new ProducerRecord("simple", "value")); - 전송 실패를 알 수 없음 - 실패에 대한 별도 처리가 필요 없는 메시지 전송에 사용 전송 결과 확인함 - Future 사용 Future f = producer.send(new ProducerRecord("topic", "value")); try { RecordMetadata meta = f.get(); // 블로킹 } catch (ExecutionException e) { } - 배치 효과 떨어..
kafka 조금 아는 척하기 1 (개발자용) https://youtu.be/0Ssx7jJJADI?si=_phzVmPI-on5Aj81 카프카란? - 분산 이벤트 스트리밍 플랫폼 - 고성능 1. 카프카 클러스터 : 메시지를 저장하는 저장소, 데이터를 이동하는 데 필요한 핵심 역할 수행 2. 브로커 : 각각의 서버라고 보면 됨 3. 주키퍼 클러스터(앙상블) : 카프카 클러스터와 관련된 정보가 기록 및 관리됨 4. 프로듀서 : 메시지를 카프카에 넣음 5. 컨슈머 : 메시지를 카프카에서 읽어옴 토픽 - 메시지를 저장 및 구분하는 단위 - 파일 시스템의 폴더와 유사함 - 한 개의 토픽은 한 개 이상의 파티션으로 구성 파티션 - 메시지를 저장하는 물리적인 파일 - (기본적으로) 추가만 가능한(append-only) 파일 - 오프셋 : 각 메시지의 저장 위치 -..
TwoSum 문제를 풀면서 배우는 내가 짠 코드의 성능을 개선하는 과정!! (feat. 코딩 테스트) https://youtu.be/cxhbgAbAiXI?si=Bj2dDUU__RCQ2Ews 문제 : 리스트에 있는 서로 다른 두 정수의 합이 target number와 같다면 true를 반환하는 함수를 구현하시오. 풀이1) 시간 복잡도는 n^2 def twoSum(nums, target); for i in range(len(nums)): for j in range(len(nums)): if i == j: continue if nums[i] + nums[j] == target: return True return False 풀이2) 시간 복잡도는 n^2 -> 풀이1과 동일하지만 성능이 향상됨 def twoSum(nums, target); for i in range(len(nums)): for j in range..