전체 글 썸네일형 리스트형 프로그래머스 - 기지국 설치(Java) 구현 문제입니다. 건물의 n과 기지국 범위 w가 주어졌을 때, 모든 건물이 기지국 범위에 들어오게 하는 최소 기지국 설치 개수를 구하는 문제입니다. 일차원 배열의 stations의 원소에는 이미 기지국이 설치되어있다고 생각하면 됩니다. 처음에는 이진 탐색으로 구현했습니다. n의 범위가 2억이기 때문에 이진 탐색으로 구현해도 불가능 할 거 같지만, 그 이외에 생각나는 알고리즘이 없었습니다. 하한을 구해 설치의 최소를 구했습니다만, 아니나 다를까 시간초과가 발생했습니다. // 하한 while(lo 더보기 토비의 스프링 - 7.7 7장 정리 7.7.1 정리 SQL처럼 변경될 수 있고 텍스트로 된 정보는 외부 리소스에 담아두고 가져오게 만들면 편리함 성격이 다른 코들가 한데 섞여 있으면, 인터페이스를 만들어 분리하는 것이 좋음 인터페이스를 통해 접근하게 하고 자기참조 빈으로 의존관계를 만들어 검증함 검증이 끝나면 클래스로 분리해도 좋음 자주사용되는 의존 오브젝트는 디폴트로 미리 정의해 두면 편함 XML과 오브젝트 매핑은 OXM 추상화 기능을 활용함 특정 의존 오브젝트를 고정시켜 기능을 특화하려면 멤버 클래스로 만드는 것이 편리함 기존에 만들어진 기능과 중복되는 부분은 위임을 통해 중복을 제거 DI를 의식하면서 코드를 작성하면 객체지향 설계에 도움됨 DI는 인터페이스를 사용함. 인터페이스를 사용하면 인터페이스 분리 원칙을 잘 지키는데도 도움됨 .. 더보기 토비의 스프링 - 7.6 스프링 3.1의 DI 7.6.1 애노테이션의 메타정보 활용 초기 리플렉션 API는 자바 코드나 컴포넌트를 작성하는데 사용되는 툴을 개발할 때 이용하도록 만들어졌음 이후, 자바 코드의 메타정보를 데이터를 활용하는 스타일의 프로그래밍 방식에서 리플렉션 API를 활용하도록 변화됨 해당 프로그래밍 방식의 절정이 애노테이션임 리프렉션 API를 이용해 애노테이션의 메타정보를 조회하고 가져오는 방법이 전부임 애노테이션 자체가 클래스의 타입에 영향을 주지 못하고, 코드에서 활용될수 없어 OOP 스타일의 코드나 패턴을 적용할 수 없음 하지만, 애노테이션은 애플리케이션의 핵심 로직과 이를 지원하는 Ioc 프레임워크와 잘 어울림 애노테이션은 Ioc 프레임워크가 참조하는 메타정보로 사용되기 때문에 애노테이션의 활용도가 증가하고 있음 프레임워크에서.. 더보기 토비의 스프링 - 7.5 DI를 이용해 다양한 구현 방법 적용하기 7.5.1 ConcurrentHashMap을 이용한 수정 가능 SQL 레지스트리 동시 접속자가 많은 대형 시스템의 DAO라면 수시로 접근하는 SQL 레지스트리 정보를 잘못 접근하면 깨진 SQL이 나타날 수 있음 지금까지 디폴트로 써 왔던 HashMapRegistry는 JDK의 HashMap을 사용함 HashMap은 멀티스레드 환경의 동시성에 문제가 있음 멀티스레드 환경에서 HashMap의 동시성을 위해 Collections.synchronizedMap() 등을 이용해 동기화를 하면 고성능 서비스 성능에 많은 문제가 발생함 때문에, 동기화된 해시 데이터 조작에 최적화된 ConcurrentHashMap을 사용하도록 권장됨 7.5.2 수정 가능 SQL 레지스트리 ConcurrentHashMap을 이용해 Upd.. 더보기 프로그래머스 - 7.4 인터페이스 상속을 통한 안전한 기능확장 7.4.1 기능확장 긴급하게 애플리케이션이 사용중인 SQL을 변경해야 할 수도 있음 지금까지 만든 SqlService 구현 클래스는 초기에 리소스로부터 SQL 정보를 읽어오면, 이를 메모리에 두고 그대로 사용함 현재 상태로서는 애플리케이션을 새로 시작하지 않고 특정 SQL의 내용만 변경 불가능 함 현재 구조에 영향을 주지 않고 기능확장을 해야 함 7.4.2 DI와 인터페이스 프로그래밍 인터페이스를 통한 DI 덕분에 느슨한 결합 구조를 지닐 수 있음 인터페이스를 사용하는 첫 번째 이유는 다형성 때문임 하나의 인터페이스를 통해 여러 개의 구현을 바꿔가면서 사용할 수 있었음 하지만, 구현을 바꾸는 것은 템플릿 메소드 패턴 처럼 일반적 상속을 통해서도 가능함 인터페이스를 사용하는 두 번째 이유는 하나의 오브젝트.. 더보기 토비의 스프링 - 7.3 서비스 추상화 적용 7.3.1 JaxbXmlSqlReader 개선 과제 JaxbXmlSqlReader를 개선할 두 가지 과제를 생각할 수 있음 JAXB 이외의 XML과 자바 오브젝트 매핑 기술 XML 파일을 다양한 소스에서 가져오게 함 💡 클래스 패스, 파일 시스템, 웹 등 다양한 위치에서 가져오게 함 7.3.2 OXM 서비스 추상화 OXM(Object-XML Mapping)은 XML 과 자바 오브젝트를 매핑해서 상호 변환하는 기술임 자바에는 JAXB 외에 자주 사용되는 XML과 자바 오브젝트 매핑 기술이 존재함 Castor XML 설정파일이 필요없는 인트로스펙션 모드를 지원하기도 하는 간결하고 가벼운 바인딩 프레임워크 JiBX 뛰어난 퍼포먼스를 자랑하는 XML 바인딩 기술 XmlBeans 아파치 XML 프로젝트의 하나. .. 더보기 토비의 스프링 - 7.2 인터페이스의 분리와 자기참조 빈 7.2.1 JAXB(Java Architecture for XML Binding) XML에 담긴 정보를 파일에 읽어오는 방법 중 하나 JAXB는 DOM과 과 같은 전통적인 XML API와 비교했을 때, XML 문서정보를 거의 동일한 구조의 오브젝트로 직접 매칭해줌 DOM은 XML 정보를 마치 자바의 리플렉션 API를 사용해 조작 하는것 처럼 간접적으로 접근해야 함 JAXB는 XML의 정보를 그대로 담고 있는오브젝트 트리를 만들어주기 때문에, XML 정보를 오브젝트 처럼 직접적으로 다룰 수 있어 편리함 JAXB는 XML 문서의 구조를 정의한 스키마를 이용해서 매핑할 오브젝트의 클래스를 자동으로 만들어주는 컴파일러도 제공함 스키마 컴파일러를 통해 자동생성 된 오브젝트에는 매핑정보가 애노테이션으로 담겨 있음 .. 더보기 토비의 스프링 - 7.1 SQL과 DAO의 분리 7.1.1 XML 설정을 이용한 SQL과 DAO의 분리 비즈니스 로직을 Service에서 책임을 갖게 하고, 데이터 액세스 로직을 DAO에서 책임을 갖도록 했음 데이터를 가져오고 추가하는 작업의 인터페이스 역할을 하는 것이 DAO임 데이터 액세스 기술 및 오브젝트 등이 변경 되더라도 DAO는 변경되지 않음 하지만, DAO에서 DB의 테이블, 필드 이름과 같은 SQL 문장이 바뀔수 있음 필드 추가와 같은 SQL 변경이 필요한 상황에는 DAO 코드는 수정될 수 밖에 없음 때문에, SQL과 DAO를 분리해야 함 SQL을 스프링의 XML 설정 파일로 빼고, String으로 빈의 값을 주입 SQL은 String으로 빈의 값이 주입되어 있으므로, 프토퍼티 값으로 정의해 DAO에 주입 가능 7.1.2 개별 SQL 프.. 더보기 이전 1 ··· 21 22 23 24 25 26 27 ··· 48 다음