전체 글

80세까지 코딩하는 것이 목표인 개발자의 골방
디미터 법칙은 잘 알려진 휴리스틱으로 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙이다. 습관적 getter, setter 문단에서 봤듯이, 객체는 자료를 숨기고 함수를 공개한다. 좀 더 정확히 표현하면, 디미터 법칙은 “클래스 C의 메서드 f는 다음과 같은 객체의 메서드만 호출해야 한다”고 주장한다. 클래스 C f가 생성한 객체 f 인수로 넘어온 객체 C 인스턴스 변수에 저장된 객체 하지만 위 객체에서 허용된 메서드가 반환하는 객체의 메서드는 호출하면 안 된다. 다시 말해, 낯선 사람은 경계하고 친구랑만 놀라는 의미이다. 아래는 예시이다. final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath(); 흔히 위와 같..
아래 두 코드 예시를 보자 public class Point { public double x; public double y; } public interface Point { double getX(); double getY(); void setCartesian(double x, double y); double getR(); double getTheta(); void setPolar(double r, double theta); } 두 번째 코드는 자료 구조 이상을 표현한다. 접근 정책을 강제하고 추상적이지만 자료구조를 명백하게 표현한다. 첫 번째 코드는 getter, setter가 노출되고 개별적으로 변수 값을 읽고 설정하게 강제한다. 변수가 private으로 정의되고 getter, setter가 있다면 별..
· Spring
CustomUserDetailService를 구현하다가 유저가 없는 경우에 UsernameNotFoundException을 던지게끔 처리했다. 그런데 계속 BadCredentialsException이 발생하는 것이 아닌가. 디버깅을 해보니 DaoAuthenticationProvider에서 UsernameNotFoundException를 핸들링할 때 mitigateAgainstTimingAttack이라는 메서드를 호출하고 있고, 그 후에 BadCredentialsException 으로 예외를 랩핑하는 식으로 처리하고 있었다. mitigateAgainstTimingAttack 메서드는 왜 실행하는 걸까? DaoAuthenticationProvider.java ... catch (UsernameNotFound..
· JAVA
제네릭은 JDK 1.5에 도입되었습니다. 제네릭이 도입될 당시 JDK5는 기존의 코드를 모두 수용하면서 제네릭을 사용하는 새로운 코드와의 호환성을 보장할 필요성이 있었습니다. 제네릭의 정의 다양한 타입의 객체에 대하여 재사용성을 제공하는 프로그래밍 기법 타입을 파라미터화 해서 컴파일 시 구체적인 타입이 결정되도록 하는 방식 컴파일 시점에 강한 타입 체크를 통해 런타임 시점 에러를 방지 제네릭 타입의 네이밍 컨벤션 자바에서 정한 규칙은 아래와 같습니다. E : 요소(Element, 자바 컬렉션(Collection)에서 주로 사용 K : 키 N : 숫자 T : 타입 V : 값 S, U, V : 두 번째, 세 번째, 내 번째에 선언된 타입 ? : 와일드카드(Wildcard)는 모든 타입을 의미 반공변성(Con..
· JAVA
for-loop vs for-each (향상된 for문) // for-loop for(int i = 0; i { // }); 사실 forE..
· JAVA
오류 vs 예외 오류(Error)는 시스템에 비정상적인 상황을 의미합니다. 이런 오류는 개발자가 미리 예측할 수 없으므로 오류 처리에 대한 신경을 쓰지 않아도 됩니다. 예외(Exception)는 개발자가 구현한 로직에서 발생합니다. 즉, 예외는 발생할 상황을 미리 예측하여 처리할 수 있기 때문에 예외를 구분하고 그에 따른 처리 방법을 명확히 알아야 합니다. 예외 클래스 모든 예외 클래스는 Throwable 클래스를 상속받습니다. 그 중 Exception의 Checked Exception과 RuntimeException의 차이는 뭘까요? Checked Exception과 RuntimeException(Unchecked Exception)의 가장 분명한 차이는 “반드시 처리해야 하느냐”입니다. Checked..
· CS
layer1 - 물리 계층 네트워크 데이터가 전송되는 물리적인 매체입니다. 0과 1로 이루어져 있는 디지털 신호를 아날로그로 변환하고 그 반대 작업도 수행합니다. 물리 계층 (Physical Layer) Bit 전압, 허브, 네트워크 어댑터, 중계기 및 케이블 사양, 신호 변경(디지털,아날로그) 10BASE-T, 100BASE-TX, ISDN, wired, wireless, RS-232, DSL, Twinax layer2 - 데이터 링크 계층 1홉 통신을 담당합니다. 홉이란 컴퓨터 네트워크에서 노드에서 다음 노드로 가는 경로를 말합니다. 1홉 통신이면 한 라우터에서 그 다음 라우터까지의 경로를 말합니다. 데이터 링크 계층의 주 목적은 물리적인 장치를 식별하는 데 사용할 수 있는 주소 지정 체계를 제공하는..
· DB
인덱스의 기본 개념 인덱스는 책에 있는 색인과 같은 기능입니다. 어떤 책이 있다고 했을 때, 한라산이라는 단어가 나오는 페이지를 찾고 싶다면 색인을 이용해서 빠르게 찾을 수 있습니다. 인덱스도 데이터베이스에서 색인과 비슷한 역할을 수행합니다. 간략하게 인덱스를 사용함으로써 얻게 되는 장점과 단점을 작성해보겠습니다. 장점 탐색 속도가 빨라질 수 있다. 즉 시스템 전체의 성능 향상으로 이어질 수 있다. 단점 색인처럼 인덱스를 위한 별도의 공간이 필요하므로 추가 메모리를 사용한다. 인덱스를 작성할 시간이 필요하다. 데이터의 변경 작업이 자주 일어난다면 인덱스 수정으로 인해 성능이 나빠질 수 있다. 인덱스는 두 가지 종류가 있습니다. 클러스터링 인덱스 논-클러스터링 인덱스 (or 보조 인덱스) 클러스터링 인덱스..
· DB
DB의 특징 실시간 접근성 실시간으로 요청되는 비정형적인 질의에 대하여 응답할 수 있어야 합니다. 지속적인 변화 데이터베이스는 INSERT, UPDATE, DELETE를 통해 데이터의 상태를 동적으로 유지합니다. 동시 공용 데이터베이스는 서로 다른 목적을 가진 사용자들이 동시에 같은 데이터를 참조할 수 있어야 합니다. 내용에 의한 참조 데이터베이스의 데이터는 질의로 주어지는 데이터의 내용에 의해서 참조됩니다. DB의 언어 DDL (Data Definition Language) 데이터베이스의 구조를 정의, 수정, 삭제하는 언어 ALTER, CREATE, DROP DML (Data Manipulation Language) 데이터베이스의 데이터를 조회, 삽입, 갱신, 삭제하는 언어 SELECT, INSERT,..
@xftg77g
뇌장하드