728x90
728x90

공부 정리 83

Effective Java 3/E - 4장 클래스와 인터페이스 - 3

23. 태그 달린 클래스보다는 클래스 계층구조를 활용하라 태그 달린 클래스의 단점 열거 타입 선언, 태그 필드, switch 문 등의 관련 코드가 필요 필드들을 final로 선언하는 경우, 쓰이지 않는 필드까지 생성자에서 초기화 인스턴스의 타입만으로는 현재 의미 파악 불가 의미 없는 코드로 가독성이 떨어지면서 필요 없는 코드 작성 과정에서 오류 발생 가능성과 비효율적인 작업이 급격하게 증가하게 된다. 이러한 문제를 해결하기 위해서는 서브타이핑(Subtyping)을 사용하는 것이 좋다. 태그 달린 클래스의 예시 public class Figure { enum Shape { RECTANGLE, CIRCLE }; final Shape shape; // 관련 필드가 한 곳에다 모여 있다. double lengt..

Effective Java 3/E - 4장 클래스와 인터페이스 - 2

18. 상속보다는 컴포지션을 사용하라 상속은 코드 재사용의 강력한 수단이지만, 잘못된 사용은 오히려 오류를 유발한다. 다른 패키지의 구체 클래스를 확장하여 사용하는 상속은 위험한 행위가 된다. 상속은 캡슐화를 깨뜨린다. 상위 클래스의 구현에 따라서, 하위 클래스 동작에 이상이 발생할 수 있다. 상위 클래스는 릴리즈마다 내부 구현이 변경될 수 있는데, 이를 확장한 하위 클래스에서는 어떠한 변경 사항 없이도 동작에 문제가 발생할 수 있다. HashSet을 상속하여 사용하는 구조 예시 public class InstrumentedHashSet extends HashSet { public int addCount = 0; public InstrumentedHashSet() {} public Instrumented..

Effective Java 3/E - 4장 클래스와 인터페이스 - 1

15. 클래스와 멤버의 접근 권한을 최소화하라 아주 기본적인 내용이지만, 처음 입문했을 때 모든 내부 구현 정보를 외부에 제공하던 설계를 만들었던 시기가 생각나는 아이템이었다. 결론적으로, 잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨서 구현과 API를 깔끔히 분리하고, 오직 API를 통해서만 다른 컴포넌트와 소통하고 내부의 동작에는 상호 개의치 않는 설계가 필요하다. 우리가 흔히 이야기하는 이 개념은 정보 은닉, 캡슐화로, 설계의 근간이다. 장점 시스템 개발 속도를 높인다. 여러 컴포넌트가 병렬로 개발할 수 있기 때문에 시스템 관리 비용을 낮춘다. 컴포넌트를 더 빨리 파악해, 디버깅하고 다른 컴포넌트로의 교체도 부담 적음 성능 최적화 단계에서 도움이 될 수 있다. 완성된 시스템을 프로파일링해 최적..

객체 지향 설계 5원칙 - SOLID

이론적으로만 알고 있던 SOLID에 대해서 다시 한 번 정리해볼 필요가 있다고 생각해서 정리했다. 면접 준비할 때만 개념적으로 이해하고 있던 내용도 있고, 주변에서 항상 들어왔던 이야기를 바탕으로 최대한 신경 쓰려고 하는 원칙도 있었던 것 같다. 코딩 면접을 준비하는 사람들은 최소한 아래 용어에 대해서는 알고 있어야 한다. 이 글에서는 해당 용어에 대한 설명 외에도, 다른 분의 정리와 본인의 생각을 결합하여 끄적여봤다. SRP, Single Responsibility Principle, 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임?? 아무것도 모르던 시절엔 이 "책임"의 범위를 정하는 것이 가장 어려운 것 같다. 크고 작은 것을 어떻게 정할 것인지에 대한 기준이 필요하지 않을까?..

C언어] 시퀀스 포인트와 연산에 대한 이해

&& 연산자 앞 모든 식의 계산 완료. 첫번째 식에 따라 두번째 식은 평가하지 않을 수 있음. || 연산자 앞 모든 식의 계산 완료. 첫번째 식에 따라 두번째 식은 평가하지 않을 수 있음. , 연산자 앞 모든 식의 계산 완료. () 함수 호출 직전까지 모든 식의 계산 완료. ? 조건 판단 전 모든 식의 계산 완료. ; 직전의 모든 식의 계산 완료. if(), switch() 연결된 코드가 실행되기 전 모든 식의 계산 완료. while(), do-while() 반복될 코드가 실행되기 직전 모든 식의 계산 완료. for(;;) 각 세미콜론 직전에 모든 식의 계산이 완료. return 값 반환 전 모든 식의 계산이 완료. 흔히 시퀀스 포인트에만 초점을 두고 있어서 간과하고 넘어가는 부분이지만, 어느 특정 시점..

PHP] mysql_query와 mysqli_query의 차이, 그리고 mysqli

mysqli에 대한 설명과 MySQLi 관련 레퍼런스 https://www.php.net/manual/en/mysqli.overview.php PHP: Overview - Manual mysqli can be great in some circumstances but much work has been put into PHP Portable Data Objects (PDO) which you should also consider when choosing a way to connect to your database using php. For example, PDO supports MySQL with minimal performance hit www.php.net https://www.php.net/manual..

DataStructure] C언어로 쉽게 풀어쓴 자료구조 10장 - 1

2학년 당시, 교재로 사용했던 책이다. 생능출판에서 나온 'C언어로 쉽게 풀어쓴 자료구조'라는 책의 10장 그래프 파트에 있었던 이론적인 문제들을 복습하면서 풀어봤는데, 풀면서 나온 자료를 올린다. 골치 아파하는 대학생들을 위해 조금의 참고자료가 되었으면 하지만, 이를 그대로 복사 붙여넣기 하는 것은 자기 실력 발전에 전혀 도움되지 않는다는 사실만을 알았으면 좋겠다. 혹시라도 답이 틀린 부분이 있거나, 의문이 남는 부분이 있다면 언제든지 댓글은 환영합니다. 1. 다음 중 그래프에 대한 설명으로 틀린 것은? (4) 그래프에는 사이클이 존재하면 안 된다. 2. 인접 행렬 adj_mat[][]에서 어떤 정점 v의 진출 차수를 알고 싶으면 어떻게 하면 되는가? (1) 인접 행렬의 v번째 행의 값들을 전부 더한다..

C#] Dispose 호출해야 하는 경우와 그렇지 않아야 하는 경우

Dispose를 호출해야 하는 경우 '의심 스럽다면 처분 하는 원칙'에 따름. Windows Forms의 컨트롤들, 파일 및 네트워크 스트림, 네트워크 소켓, GDI+의 펜/브러시/비트맵 등이 이에 해당. Dispose를 호출하지 말아야 하는 경우 현재 코드가 객체를 소유한 것이 아니고, 정적 필드나 속성을 통해 공유 객체를 얻은 경우 System.Drawing namespace의 형식에서 정적 필드 및 속성을 통해 얻은 GDI+ 객체 - 응용 프로그램 종료 시점까지 사용 Dispose 메서드가 현재 상황에 맞지 않는 경우 System.IO namespace와 System.Data namespace의 형식들 MemoryStream - 차후 스트림을 다시 쓰는 경우 StreamReader, StreamWr..

OS] 프로세스(Process)와 프로세스 상태(Process State) 정리

프로세스 작업(Job)실행 프로그램과 이에 필요한 데이터 묶음, 컴퓨터에 의해 실행되기 이전의 상태. 프로세스(Process)커널에 등록된 작업, 커널에 등록되어 커널의 관리 하에 들어감.각종 자원들을 요청하고 할당 받을 수 있는 개체.PCB를 할당 받은 개체.능동적인 개체로 실행 중 각종 자원을 요구하거나 반납하면서 진행함. PCB:Process Control Block커널 공간 내 존재해 프로세스가 커널에 등록되어 실행될 시에 프로세스마다 자동으로 생성.프로세스의 각종 정보를 내장하며 종료 시 파괴. OS에 따라서 저장되어야 하는 정보가 다르고, PCB 영역 참조 및 갱신 속도 개선이 시스템 전체 성능에 영향을 미침. - Process Identification ; 프로세스 고유 번호- Process..

Computer Science/OS 2019.02.10

C#] 델리게이트(Delegate)의 호환성

타입 호환성 모든 델리게이트 타입은 다른 모든 델리게이트 타입과 호환되지 않음.메서드 대상이 동일한 델리게이트 인스턴스는 상등으로 간주.멀티캐스트 델리게이트는 같은 대상 메서드들이 같은 순서로 등록된 경우에 상등으로 간주. 매개변수 호환성 어떤 메서드를 호출 시, 그 메서드의 매개변수가 요구하는 것보다 구체적인 형식의 인수를 지정할 수 있음.델리게이트의 매개변수 형식이 대상 메서드의 매개변수 형식보다 구체적일 수 있으며, 이를 반변성(Contravariance)라고 함. 이러한 특성은 기본적으로 다형성을 가진 메서드의 정상적인 작동 방식임. 반환 형식의 호환성 어떤 메서드를 호출 시, 호출자가 요구한 것보다 구체적인 형식 값을 메서드가 반환 가능.델리게이트는 대상 메서드의 반환 형식보다 더 구체적으로 반..

728x90