Category: Java

405 Not Allowed 해결하기

405 Not AllowedHttp status code 중 405는 특정 Http method가 혀용되지 않는다는 의미다. 문제 배경서블릿 프로젝트에서 입력 페이지에서 데이터를 입력받아 post로 데이터를 넘겨주고해당 데이터가 유효하면 다른 url로 리다이렉트 하고,그렇지 않으면 다시 입력 페이지에서 데이터를 입력받도록 구성했는데 405 문제가 생겼다.

private 생성자나 열거 타입으로 싱글턴임을 보증하라

싱글턴의 단점싱글턴은 인스턴스를 하나만 생성할 수 있는 클래스를 말한다.그런데 이 싱글턴 클래스를 사용하는 클라이언트를 테스트하기 어렵다.특히 인터페이스를 구현하는 방식으로 만들어진 싱글턴이 아니면 mock 객체로 테스트 하기 어렵다. mock객체? 테스트하고 싶은 객체의 핵심 책임만 검증할 수 있도록 만들어진 객체이다.원래 객체가 수많은 협력을 하고

생성자에 매개변수가 많으면 빌더를 고려하자

점층적 생성자 패턴자바빈즈 패턴빌더 패턴 점층적 생성자 패턴클래스에 멤버 변수가 많다면, 수많은 생성자(점층적 생성자 패턴)가 가능하다. 12345678910class Clazz{ int a; double b; String c; .... public Clazz(int a){} public Clazz(int a, doub

생성자 대신 정적 팩터리 메서드를 고려하라.

정적 팩터리 메서드란 무엇인가정적 팩터리 메서드의 장점은 무엇인가정적 팩터리 메서드의 단점은 무엇인가정적 팩터리 메서드 네이밍 컨벤션 일반적으로 public 생성자를 통해 클래스의 인스턴스를 만든다.하지만 정적 팩터리 메서드를 통해 만들면 여러 이점이 있다. 정적 팩터리 메서드란 무엇인가?static으로 선언되었고, 객체를 반환하는 메서드를 말한다. 책에

7. 어댑터 패턴

어댑터 패턴한 클래스의 인터페이스를 사용하고자 한 다른 인터페이스로 변환한다.쓰고자 하는 인터페이스를 구현한 클래스에 바꾸고 싶은 클래스의 객체를 구성한다. 닭과 오리를 만들어서 날고 울 수 있게 하고 싶다.그러나 두 객체의 행동이 약간 다르다. 1234public interface Chicken { void kokkio(); void

6. 싱글톤 패턴

싱글톤 패턴인스턴스가 하나 뿐인 객체를 만드는 패턴!어디서든 그 인스턴스에 접근할 수 있게하는 패턴! 왜 쓰는가?굳이 여러개가 필요 없는 클래스의 객체가 여러개 생기면 메모리를 불필요하게 차지하게 된다.이런 클래스들의 객체를 하나로 유지하도록 설계해서 메모리를 효율적으로 사용하게 한다. 혹은 설정이나 보안같이 중요한 내용을 담는 클래스는 여러개의 객체를 만

5. SOLID 원칙

SOLID확장과 유지보수를 쉽게 만드는 객체지향 프로그래밍 설계의 다섯가지 원칙. S : 단일 책임 원칙(SRP)한 설계 부품(클래스, 함수..)는 하나의 책임만 가져야 한다.약은 약사에게 진료는 의사에게…한 부품에 여러 기능이 있으면, 내부 메소드들이 의지하는 부분이 많아진다.즉 결합도가 높아지고, 그 부품에 대한 책임 높아진다. -> 유지보수가 힘

9. 어노테이션

어노테이션어노테이션은 자바 소스코드에 추가적인 정보를 제공하는 메타데이터이다.어노테이션 선언 방법을 알아보자 1. 마커 어노테이션표시만 해두는 어노테이션. 메서드 없이 선언하면 마커 어노테이션이 된다.@Override, @Deprecated 가 대표적 예시. 1public @interface Marker{} 이렇게 선언을 해놓으면, 12@

6. JVM 구조와 가비지 컬렉터

JVM 구조아시다시피, 자바는 운영체제의 종류와 무관하게 실행가능하다.자바 코드를 컴파일해서 얻은 바이트 코드를 해당 운영체제가 읽을 수 있는 기계어로 바꿔준다.JVM은 크게 4가지로 나뉜다. 1. Class Loader자바로 코드를 작성하면 java파일이 생성된다..java파일을 컴파일하면 .class파일(바이트 코드)이 생성된다.이렇게 생성된 .clas

4. 팩토리 패턴

Circle c = new Circle(origin, 1);이 코드는 DIP를 위반한다. 구체 클래스에 의존하기 때문이다. 사실 new 키워드를 쓰는 순간 구체 클래스에 의존하게 되며 해당 구체 클래스의 변경에 취약해진다. 다만 해당 구체 클래스가 쉽게 변경되지 않는다면 큰 문제가 되지 않을 수 있다 팩토리 패턴을 사용하면 추상 인터페이스에만 의존해서 구체

5. Class 클래스

Class 클래스자바의 모든 클래스, 인터페이스는 .class 파일로 저장됨Class 클래스는 컴파일 된 class 파일을 로드하여 객체를 동적으로 로딩하고, 정보를 가져오는 메서드 제공 Class.forName(“클래스 이름”) 메서드로 클래스를 동적으로 로드 클래스 이름으로 직접 가져오기 인스턴스에서 가져오기1234567//1.Class c = Cla

4. 추상 클래스, 인터페이스

추상 클래스구현 코드 없이 메서드 선언만 있는 추상 메서드를 포함한 클래스추상 클래스는 new 할 수 없음(인스턴스 생성 불가)추상 클래스의 추상 메서드는 하위 클래스가 상속하여 구현 인터페이스구현된 메서드가 없는 것(디폴트 메서드와 정적 메서드로 일부 구현된 메서드 존재 가능) 디폴트 메서드는 구현한 클래스들이 모두 공통적으로 갖게되는 메서드(오버라이딩

3. 다형성, 상속, 결합, 다운 캐스팅

다형성하나의 코드가 여러 자료형으로 구현되어 실행되는 것.같은 코드에서 상황에 따라 다른 결과가 반환.상위 클래스에서 공통 부분을 구현하고, 하위 클래스에서 각 클래스에 맞는 기능 구현여러 클래스를 하나의 타입(상위 클래스)로 핸들링 가능 상속은 언제 사용할까IS-A관계(inheritance, 상속) 일반적(상위) vs 구체적(하위) 관계 상위 클래스 수정