본문 바로가기

Programming

(66)
[Effective JAVA 3SE] item 36: 비트 필드 대신 EnumSet을 사용하라 비트 필드 열거 값들이 단독이 아닌 집합으로 사용될 경우 정수 열거 패턴(아이템 34)를 사용함 (223 페이지 코드 36-1) 비트별 OR를 사용해 여러 상수를 하나의 집합으로 모을 수 있음 이로 만들어진 집합을 비트 필드(bit filed)라고 함 비트 필드의 사용 비트별 연산으로 합집합과 교집합 같은 집합 연산의 효율적 수행 가능 하지만.. 비트 필드의 문제를 안고 있음 비트 필드 값이 그대로 출력될 경우 단순 정수 열거 상수 추력시보다 해석하기 훨씬 어려움 모든 원소를 순회하기 까다로움 최대 몇 비트가 필요한지 API 작성 시 미리 예측해 선택해야 함 (API를 수정하지 않고 비트 수를 더 늘릴 수 없기 때문) 현재 비트 필드보다 더 나은 대안이 존재함 EnumSet Class 장점 java.ut..
[Effective JAVA 3SE] item 28: 배열보다는 리스트를 사용하라 서론 배열과 제네릭 타입에 두 가지의 중요한 차이가 존재함. 1 . 공변(convariant)여부 >> 배열은 공변임 - Sub(자식)이 Super(부모)의 하위 타입이라면 배열 Sub[ ]는 배열 Super[ ]의 하위 타입이라는 뜻 - 공변은 한자 풀이 그대로 함께 변화한다는 뜻임 >> 제네릭은 불공변임 - 서로 다른 타입 Type 1과 Type 2가 존재할 때, List은 List의 하위 타입도 아니고 상위 타입도 아님 서로간의 상위 하위 타입 문제로 접근하자면 제네릭이 더욱 문제있어 보일 수 있지만, 문제가 있는 쪽은 배열임 공변이 왜 문제가되는지 예시 코드를 살펴보겠음. 2. 실체화(Reify) 여부 >> 배열 실체화 가능 - 배열은 런타임에서 자신이 담기로 한 원소의 타입인지 확인함 - 그래서..
[Linux] 리눅스 명령어 프로세스 명령어 ps : 현 터미널에 관련된 프로세스를 보여줌 PID : 프로세스 번호 TTY : teletype의 약자로 프로세스가 연결된 터미널 TIME : 프로세스의 CPU 사용시간 실행되고 있는 프로세스가 많아 보기 힘들 경우 less 명령어 파이프하여 사용 ex. ps ax | less ps 항목 ps로 알 수 있는 정보 항목 항목 의미 USR 프로세스 소유자 이름 (BSD 계열) UID 프로세스 소유자 이름 (System V 계열) PID 프로세스 식별 번호 PPID 부모 프로세스 ID %CPU CPU 사용 비율 추정치 (BSD) %MEM 메모리 사용 비율 추정치 (BSD) VSZ K 단위 또는 페이지 단위의 가상 메모리 사용량 RSS 실제 메모리 사용량 (Resident Set Size) T..
[Linux] vi, vim 서론 vi, vim Linux나 Unix 환경에서 vi 에디터 혹은 vim 에디터를 기본으로 사용함 vim Editor vim = vi iMproved vi 에디터에서 기능 개선 및 확장이 된 것 참고 자료 OJT 이미지 자료 키 배열 책 165 ~ 166 페이지 vim 사용법 vim 명령어를 통해 실행 (파일명 생략 가능) vim [파일명] 사용모드 모든 명령은 반드시 대소문자를 구분해야 함 편집모드 : 입력 및 수정 명령어 - o : 포커스된 커서 아래 라인으로 이동 후 편집모드 시작 - O : 포커스된 커서 윗 라인으로 이동 후 편집모드 시작 - i : 포커스된 위치에서 편집모드 시작 - I : 포커스된 라인의 맨 앞으로 이동해 편집모드 시작 - a : 포커스된 커서의 다음 문자열에서 편집모드 시작..
[Linux] 리눅스 다중 명령어 - 세미콜론(;), 파이프라인(|), 더블 엔드퍼센트(&&) [요약 ver] 세미콜론( ; ) 세미콜론( ; ) 명령문의 끝을 나타냄 하나의 명령문 라인에서 여러 개의 명령 실행 만약 첫 번째 명령문이 실패해도 두 번째 명령문은 실행됨 한 줄 입력 예시 cp .profile new; cat new; head -3 new; ls -a - .profile 파일을 new 파일에 복사해라. - 그 다음 new 파일을 출력하라. - new 파일을 출력하는데, 앞 세 줄만 출력하라. - 파일 목록을 출력하라. 파이프(Pipe) IPC(InterProcess Communication) 기법 중 하나 IPC 기법 중 커널 영역을 활용한 기법 리눅스에서의 파이프는 두 개의 프로세스를 연결하는 연결 통로를 의미함 프로세스 통신을 위해 도입된 것 특정 프로세스 표준 출력이 다른 프로세스의 표준 입력..
[Effective JAVA] item 22 : 인터페이스는 타입을 정의하는 용도로만 사용하라 서론 인터페이스 자기 자신을 구현한 클래스의 인스턴스를 참조할 수 있는 타입의 역할을 함 클래스가 어떤 인터페이스를 구현한다는 것은 자신의 인스턴스로 무엇을 할 수 있는지 클라이언트에게 이야기하는 것 인터페이스는 그렇기에 '타입을 정의하는 용도'로만 사용되어야 함 상수 인터페이스 안티 패턴 : 사용 금지! 상수 인터페이스 : 메서드 없이 static final 필드로만 이루어진 인터페이스 클래스 내부에서 사용하는 상수는 외부 인터페이스가 아닌 내부 구현에 해당됨 고로 상수 인터페이스를 구현하는 것은 내부 구현 클래스의 API로 노출하는 행동임 상수를 공개할 목적일 경우 특정 클래스나 인터페이스와 강하게 연관된 상수일 경우 그 클래스나 인터페이스 자체에 추가해야함 예시. Integer와 Double에 선언..
[Effective JAVA] item 21 : 인터페이스는 구현하는 쪽을 생각해 설계하라 서론 인터페이스에 메서드 추가하면 보통 컴파일 오류가 발생함 왜냐면 추가된 메서드가 기존 인터페이스에 존재할 가능성이 굉장히 낮기 때문 디폴트 메서드(Default Method) 인터페이스의 디폴트 메서드를 재정의 하지 않은 모든 구현 클래스에서는 디폴트 구현이 사용됨 기존 인터페이스에 메서드를 추가하는 것은 어려운 일은 아니나, 기존 구현체들과 모든게 매끄럽게 연동된다는 보장은 없음 (자바 7까지는 현 인터페이스에 새로운 메서드가 추가될 일은 영원히 없다는 가정 하에 작성되었기 때문임) 자바 8에서는 핵심 컬렉션 인터페이스들에 다수의 디폴트 메서드가 추가됨 이는 람다를 활용하기 위해서임 대부분의 자바 라이브러리에 디폴트 메서드는 코드 품질이 높고 범용적이라 대부분 상황에서 잘 작동하나, 생각할 수 있는..
[Effective JAVA] item 20 : 추상 클래스 보다는 인터페이스를 우선하라 서론 자바의 다중 구현 메커니즘: 인터페이스, 추상 클래스 둘의 차이 - 추상 클래스가 정의한 타입을 구현하는 클래스는 반드시 추상 클래스의 하위 클래스가 되어야 함 - 자바는 단일 상속만 지원하기 때문 인터페이스 기존 클래스에 쉽게 새로운 인터페이스 구현 가능 인터페이스가 요구하는 메서드를 추가하고, 클래스 선언에 implements 구문만 추가하면 됨 인터페이스는 믹스인(mixin) 정의에 안성맞춤 믹스인(mixin) 대상 타입의 주된 기능에 선택적 기능을 혼합(mix in)하는 것 클래스가 구현할 수 있는 타입 원래 주된 타입 외에 특정 선택적 행위를 제공하다고 선언하는 효과를 줌 추상 클래스는 기존 클래스에 덧씌울 수 없어 믹스인 정의가 불가함 => 클래스는 두 개의 부모를 가질 수 없고, 클래스..