본문 바로가기

분류 전체보기837

백준 1436 1436번: 영화감독 숌 문제 666은 종말을 나타내는 수라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워즈를 만들 때, 스타워즈 1, 스타워즈 2, 스타워즈 3, 스타워즈 4, 스타워즈 5, 스타워즈 6과 같이 이름을 지었고, 피터 잭슨은 반지의 제왕을 만들 때, 반지의 제왕 1, 반지의 제왕 2, 반지의 제왕 3과 같이 영화 제목을 지었다. 하지만 숌은 자신이 조지 루카스와 피터 잭슨을 뛰어넘는다는 것을 보여주기 위해서 영화 제목을 좀 다르게 만들기로 했다. 종말의 수란 어떤 수에 6이 적어도 3개 이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 수는 666이고, 그 다음으로 .. 2023. 9. 11.
불변성 불변 클래스란 인스턴스의 내부 값을 수정할 수 없는 클래스이다. 즉, 내부 값이 변하지 않는 속성을 불변성이라 한다. 클래스 불변 생성 객체의 상태를 변경하는 메서드를 제공하지 않는다. 클래스를 확장할 수 없도록 한다. 모든 필드를 final로 선언한다. 모든 필드를 private으로 선언한다. 자신 외에는 내부의 가변 컴포넌트에 접근할 수 없도록 한다. 불변의 특징 불변 객체는 생성된 시점 부터 없어질 때 까지 변하지 않는다. 불변 객체는 스레드 안전하여 따로 동기화가 필요 없다. 여러 스레드가 동시에 사용도 훼손되지 않는다. 즉, 불변 객체는 안심하고 공유할 수 있다. 생성자는 불변식 설정이 모두 완료된, 초기화가 완벽히 끝난 상태의 객체를 생성해야 한다. 2023. 9. 8.
Spring DI 방식 스프링은 다양한 DI 방식을 지원하며, 주요한 방식에는 setter, constructor, field가 있다. Setter 장점 빈의 의존성을 설정하거나 변경하기 쉽다. 일부 의존성을 필수가 아닌 선택적으로 설정할 수 있다. 단점 필수 의존성이 설정되지 않았을 경우 런타임 오류가 발생할 수 있다. 설정된 값이 변경될 수 있으므로 불변성을 보장하지 않는다. 언제 사용 : 선택적 의존성을 갖는 빈을 생성할 때 또는 런타임에 의존성을 변경할 때 사용한다. 문제점 : 필수 의존성이 설정되지 않은 상태에서 빈을 생성하려고 할 때 런타임 예외가 발생할 수 있다. Constructor 장점 생성자를 통해 필수 의존성을 보장하므로 런타임 오류를 줄일 수 있다. 생성자를 통해 설정된 의존성은 변경이 불가능하므로 불변성.. 2023. 9. 8.
JDK 동적 프록시, CGLIB JDK 동적 프록시 JDK 동적 프록시는 Java에서 리플렉션을 활용하여 인터페이스를 구현한 클래스의 프록시를 런타임에 동적으로 생성하는 기술이다. 이를 통해 메서드 호출 등의 작업을 프록시 객체를 통해 중간에서 처리할 수 있다. JDK 동적 프록시의 한계점 인터페이스만 프록시 가능 : JDK 동적 프록시는 인터페이스를 구현한 클래스에만 적용할 수 있으며, 클래스의 메서드에는 적용할 수 없다. final 메서드와 private 메서드 : final로 선언된 메서드나 private 메서드는 프록시로 래핑할 수 없다. 생성자 호출 : JDK 동적 프록시는 생성자 호출을 가로채지 못하므로, 객체 생성 시 특별한 작업을 수행할 수 없다. JDK 동적 프록시의 구현 원리와 기술 JDK 동적 프록시는 ‘java.l.. 2023. 9. 8.
상속보다 합성을 이용하는 이유 상속의 단점 상속의 단점은 다음과 같다. 캡슐화가 깨지고 결합도가 높아진다. 상위 클래스와 하위 클래스의 관계가 컴파일 시점에 결정되어 구현에 의존한다. 하위 클래스는 상위 클래스의 구조를 알고 있어야 사용이 가능하다. super를 사용하면 상위클래스의 구현이 노출되고, 강하게 결합된다. 유연성 및 확장성이 떨어진다. 상위 클래스에 변경점이 생기면 하위 클래스도 변경이 될 수 있다. 다중상속에 의한 문제가 발생할 수 있다. 자바는 다중 상속이 불가하다. 클래스 폭팔 문제가 발생할 수도 있다. 클래스를 몇단으로 상속해서 해결하거나, 조합의 수만큼 새로운 클래스를 만들어야 된다. 합성으로 해결 합성을 이용하면 의존하는 객체를 교체하는 것이 쉬워져서 설계가 유연해진다. 상속은 클래스를 통해 강하게 결합되지만,.. 2023. 9. 6.
[OS] CPU Scheduling CPU and I/O Bursts CPU 버스트 : CPU만 연속적으로 사용 I/O 버스트 : I/O를 실행하고 있을 때 프로그램은 CPU 버스트 + I/O 버스트 조합으로 구성되어 있지만, 프로그램마다 그 빈도는 다르다. CPU 버스트 시간 분포 여러 종류의 job(=process)이 섞여 있기 때문에 CPU 스케줄링이 필요하다. Interactive job 에게 적절한 response 제공 요망 CPU와 I/O 장치 등 시스템 자원을 골구루 효율적으로 사용 프로세스의 특성 분류 프로세스는 특성에 따라 다음 두 가지로 나뉜다. I/O-bound process CPU를 잡고 계산하는 시간 보다 I/O에 많은 시간이 필요한 job (many short CPU burst) CPU-bound process 계.. 2023. 9. 4.