본문 바로가기

공부 기록

(319)
[이펙티브 자바 3/E] 아이템6 - 불필요한 객체 생성을 피하라 - 기존 객체를 재사용해야 한다면 새로운 객체를 만들지 마라. - 재사용은 빠르고 세련되다. 하지 말아야할 극단적인 예 String s = new Stirng("yuri"); 개선된 버전 String s = "yuri"; - 생성자 대신 정적 팩터리 메서드(아이템 1)를 제공하는 불변 클래스에서는 정적 팩터리 메서드를 사용해 불필요한 객체 생성을 피할 수 있다. - 불변 객체만이 아니라 가변 객체라 해도 사용 중에 변경되지 않을 것임을 안다면 재사용할 수 있다. - 박싱된 기본 타입보다는 기본 타입을 사용하고, 의도치 않은 오토박싱이 숨어들지 않도록 주의하자.
[이펙티브 자바 3/E] 아이템5 - 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 의존 객체 주입 패턴 - 사용하는 자원에 따라 동작이 달라지는 클래스에는 정적 유틸리티 클래스나 싱글턴 방식이 적합하지 않다. ===> 인스턴스를 생성할 때 생성자에 필요한 자원을 넘겨주는 방식을 사용해야 한다. public class SpellChecker { private final Lexicon dictionary; public SpellChecker(Lexicon dictionary) { this.dictionary = Objects.requireNonNull(dictionary); } public boolean isValid(String word) { ... } public List suggestions(String typo) { ... } } - 의존 객체 주입 패턴은 자원이 몇 개든 의존 관..
[OS/공룡책] Chapter 2. 운영체제 구조 - 시스템 서비스, 링커와 로더, 응용 프로그램이 운영체제마다 다른 이유, 운영체제 설계 및 구현 시스템 서비스 - 현대 시스템의 또 다른 면은 시스템 서비스의 집합체이다. - 시스템 서비스는, 시스템 유틸리티로도 알려진, 프로그램 개발과 실행을 위해 더 편리한 환경을 제공한다. => 파일 관리, 상태 정보, 파일 변경, 프로그래밍 언어 지원, 프로그램 적재와 수행, 통신, 백그라운드 서비스 - 운영체제 대부분은 시스템 프로그램과 함께 일반적인 문제점을 해결하거나 일반적인 연산을 수행하는 데 유용한 프로그램들도 제공한다. 링커와 로더 - 소스 파일은 임의의 물리 메모리 위치에 적재되도록 설계된 오브젝트 파일로 컴파일 된다. => 재배치 가능 오브젝트 파일 - 링커는 재배치 가능 오브젝트 파일을 하나의 이진 실행 파일로 결합한다. - 로더는 이진 실행 파일을 메모리에 적재하는 데 사용되며, CPU 코어..
[이펙티브 자바 3/E] 아이템4 - 인스턴스화를 막으려거든 private 생성자를 사용하라 public class UtilityClass { private UtilityClass() { throw new AssertionError(); } ... } - 추상 클래스로 만드는 것으로는 인스턴스화를 막을 수 없다. ===> 컴파일러가 기본 생성자를 만드는 경우는 오직 명시된 생성자가 없을 때뿐이니 private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다. - 명시적 생성자가 private이니 클래스 바깥이서는 접근할 수 없다. - 꼭 AssertionError를 던질 필요는 없지만, 클래스 안에서 실수로라도 생성자를 호출하지 않도록 해준다. - 어떤 환경에서도 클래스가 인스턴스화되는 것을 막아준다. - 상속을 불가능하게 하는 효과도 있다. - 그러나 그다지 직관적이지 않으므로 적절히 주..
[이펙티브 자바 3/E] 아이템3 - private 생성자나 열거 타입으로 싱글턴임을 보증하라 싱글턴 - 인스턴스를 오직 하나만 생성할 수 있는 클래스 - 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어려워질 수 있다. => 싱글턴 인스턴스를 가짜(mock) 구현으로 대체할 수 없기 때문이다. 싱글턴을 만드는 방식 - 두 방식 모두 생성자는 private으로 감춰두고, 유일한 인스턴스에 접근할 수 있는 수단으로 public static 멤버를 하나 마련해둔다. 1. public static 멤버가 final 필드인 방식 public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() {...} public void leaveTheBuilding() {...} } - public이나 pr..
[이펙티브 자바 3/E] 아이템2 - 생성자에 매개변수가 많다면 빌더를 고려하라 점층적 생성자 패턴(telescoping constructor pattern) - 필수 매개변수만 받는 생성자 ... 선택 매개변수를 전부 다 받는 생성자까지 늘려가는 방식 => 쓸 수는 있지만, 매개변수 개수가 많아지면 클라이언트 코드를 작성하거나 읽기 어렵다. 자바빈즈 패턴(JavaBeans pattern) - 매개변수가 없는 생성자로 객체를 만든 후, 세터(setter)메서드를 호출해 원하는 매개변수의 값을 설정하는 방식 => 객체 하나를 만들려면 메서드를 여러 개 호출해야 하고, 객체가 완전히 생성되기 전까지는 일관성이 무너진 상태에 놓이게 된다. 빌더 패턴(Builder pattern) - 필수 매개변수만으로 생성자(혹은 정적 팩터리)를 호출해 빌더 객체를 얻는다. 그런 다음 빌더 객체가 제공하..
[이펙티브 자바 3/E] 아이템1 - 생성자 대신 정적 팩터리 메서드를 고려하라 클래스는 생성자와 별도로 정적 팩터리 메서드(static factory method)를 제공할 수 있다. 정적 팩터리 메서드의 장점 1. 이름을 가질 수 있다. - 이름만 잘 지으면 반환될 객체의 특성을 쉽게 묘사할 수 있다.(ex. BigInteger.probablePrime) - 한 클래스에 시그니처가 같은 생성자가 여러 개 필요할 것 같으면, 생성자를 정적 팩터리 메서드로 바꾸고 각각의 차이를 잘 드러내는 이름을 지어주자. 2. 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다. - 이 덕분에 불변 클래스(immutable class; 아이템 17)는 인스턴스를 미리 만들어 놓거나 새로 생성한 인스턴스를 캐싱하여 재활용하는 식으로 불필요한 객체 생성을 피할 수 있다. - (특히 생성 비용이 큰) ..
[네트워크/보안] 네트워크 기본 이론 - 네트워크 보안 시스템 네트워크 보안 시스템 - 하나의 보안 시스템만으로 모든 것을 방어할 수는 없다. => 다양한 보안 시스템을 통해 사이버 보안 체계를 구축해야 한다. 네트워크 침입 차단 시스템(방화벽) - 외부로부터 불법적인 접근이나 공격을 방어하기 위해 내부 네트워크와 외부 네트워크가 연결되는 접점에 구축되는 보안 시스템이다. - 보안 정책에 따라 비인가 통신은 차단하고 인가된 통신은 허용하는 방식으로 내부 네트워크를 외부 네트워크로부터 보호하는, 네트워크 보안에서 가장 기본이 되는 시스템이다. - 정책의 적용 순서를 고려해야 하며, 사용 중인 네트워크에 정책이 바로 적용되기 때문에 보안과 네트워크에 대한 지식과 경험을 갖춘 보안 전문가에게 체계적으로 관리되어야 한다. 네트워크 침입 탐지/차단 시스템 - Network ..