전체 글 (159) 썸네일형 리스트형 [Java] 지네릭스(Generics) 컴파일 시간에 더 많은 버그를 감지할 수 있도록 하여 코드에 안정성을 추가한다. 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크(compile-time type check)를 해주는 기능이다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다. 장점 컴파일에서 더 강력한 유형 검사 케스트 제거 프로그래머가 일반 알고리즘을 구현할 수 있도록 지원 제한 제네릭 형식의 변수는 참조 타입(Reference Types)만 인스턴스를 생성할 수 있다. 기본 타입(Primitive Types) 생성 불가 참조 : Object는 사용 가능한 가장 일반적인 유형이고 기본 유형으로 확장되지 않기 때문에 제네릭이 참조 유형에 대해서만 작동할 수 .. [Java/OOP] SOLID 원칙 1. SRP 단일 책임의 원칙 - Single responsibility principle 한 클래스는 하나의 책임만 가져야 한다. 변경을 기준으로 한다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것이다. 2. OCP 개방-폐쇄 원칙 - Open/closed principle 소프트웨어 요소는 확장에는 열려 있으나, 수정에는 닫혀있다. 다형성을 활용해보자 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현한다. 문제점 구현 객체를 변경하려면 클라이언트 코드를 변경해야한다. 분명 다형성을 사용했지만 OCP원칙을 지킬 수 없다. 객체를 생성하고, 연관관계를 맺어주는 별도의 조립, 설정자가 필요하다. 3. LSP 리스코프 치환 원칙 - Liskov substitution.. [WEB기초] 싱글톤 패턴(Singleton Pattern) 애플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나고 최초 생성 이후에 호출된 생성자는 최초에 생성한 객체를 반환한다. 인스턴스가 필요 할 때 똑같은 인스턴스를 만들어 내는 것이 아니라, 동일(기존) 인스턴스를 사용하게 한다. 싱글톤 패턴 쓰는 이유 고정된 메모리 영역을 얻으면서 한번의 new로 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 수 있다. 싱글톤으로 만들어진 클래스의 인스턴스는 전역 인스턴스이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉽다. DBCP(Database Connection Pool)처럼 공통된 객체를 여러개 생성해서 사용해.. [WEB기초] Spring 생성자 주입을 써야하는 이유 생성자 주입을 사용해야하는 이유 객체의 불변성 확보 수정자 주입이나 일반 메소드 주입을 사용하면, 불필요하게 수정의 가능성을 열어두게 된다. SOLID 5원칙 중 OCP 원칙을 지키며 객체의 불변성을 확보할 수 있다. 테스트 코드의 작성 테스트 코드를 순수 자바코드로 작성할 수 있다. 컴파일 시점에 객체를 주입받아 테스트 코드를 작성할수 있으며, 주입하는 객체가 누락된 경우 컴파일 시점에 오류를 발경할 수 있다. 필드 주입의 경우 순수 자바코드로 단위테스트를 작성하는 것이 불가능하다 final 키워드 작성 및 Lombok과의 결합 final 키워드를 사용할 수 있고, Lombok과의 결합을 통해 코드를 간결하게 작성할 수 있다. 순환 참조 에러 방지 순환 참조 문제를 애플리케이션 구동( 객체의 생성 ) .. [모든 개발자를 위한 HTTP 웹 기본 지식] 24.HTTP 최종 마무리 학습 내용 정리 인터넷 네트워크 인터넷 통신 IP( 인터넷 프로토콜 ) TCP, UDP PORT DNS URI와 웹 브라우저 요청 흐름 URI 웹 브라우저 요청 흐름 HTTP 모든 것이 HTTP 클라이언트 서버 구조 Stateful, Stateless 비 연결성( connectionless ) HTTP 메시지 HTTP 메서드 HTTP API를 만들어보자 -> HTTP API 만들기 첫 시도 HTTP 메서드 - GET, POST HTTP 메서드 - PUT, PATCH, DELETE HTTP 메서드의 속성 HTTP 메서드 활용 클라이언트에서 서버로 데이터 전송 HTTP API 설계 예시 HTTP 상태코드 HTTP 상재코드 소개 2xx - 성공 3xx - 리다이렉션1 - 영구 리다이렉션 3xx - 리다이렉션2.. [모든 개발자를 위한 HTTP 웹 기본 지식] 23.HTTP 헤더2 - 캐시와 조건부 요청 - 캐시 무효화( 5/5 ) Cache-Control 확실한 캐시 무효화 응답 Cache-Control: no-cache, no-store, must-revalidate Pragma: no-cache HTTP 1.0 하위 호환 캐시 지시어(directives) 확실한 캐시 무효화 Cache-Control: no-cache 데이터는 캐시해도 되지만, 항상 원 서버에 검증하고 사용(이름에 주의!) Cache-Control: no-store 데이터에 민감한 정보가 있으므로 저장하면 안됨 (메모리에서 사용하고 최대한 빨리 삭제) Cache-Control: must-revalidate 캐시 만료후 최초 조회시 원 서버에 검증해야함 원 서버 접근 실패시 반드시 오류가 발생해야함 - 504(Gateway Timeout) must-revalida.. [모든 개발자를 위한 HTTP 웹 기본 지식] 22.HTTP 헤더2 - 캐시와 조건부 요청 - 프록시 캐시( 4/5 ) 프록시 캐시 도입 프록시 캐시가 없다면, 원(origin)서버로 붙을 경우 모든 사람이 동일하게 오랜 시간 기다려야 한다. - 첫 번째 요청 글로벌 서비스의 경우 CDN(ex. AWS CloudFront, ...)를 많이 사용합니다. Cache-Control 캐시 지시어( directives )- 기타 Cache-Control: public 응답이 public 캐시에 저장되어도 됨 Cache-Control: private 응답이 해당 사용자만을 위한 것임, private 캐시에 저장해야 함(기본값) Cache-Control: s-maxage 프록시 캐시에만 적용되는 max-age Age: 60 (HTTP 헤더) 오리진 서버에서 응답 후 프록시 캐시 내에 머문 시간(초) 출처 https://www.infl.. [모든 개발자를 위한 HTTP 웹 기본 지식] 21.HTTP 헤더2 - 캐시와 조건부 요청 - 캐시와 조건부 요청 헤더( 3/5 ) 캐시 제어 헤더 Cache-Control: 캐시 제어 Pragma: 캐시 제어(하위 호환) Expires: 캐시 유효 기간(하위 호환) 1. Cache-Control 캐시 지시어( directives ) Cache-Control: max-age 캐시 유효 시간, 초 단위 Cache-Control: no-cache 데이터는 캐시해도 되지만, 항상 원(origin) 서버에 검증하고 사용 Cache-Control: no-store 데이터에 민감한 정보가 있으므로 저장하면 안됨 (메모리에서 사용하고 최대한 빨리 삭제) 2. Pragma 캐시 제어(하위 호환) Pragma: no-cache HTTP 1.0 하위 호환 3. Expires 캐시 만료일 지정(하위 호환) 캐시 만료일을 정확한 날짜로 지정 ex. exp.. 이전 1 ··· 3 4 5 6 7 8 9 ··· 20 다음 목록 더보기