본문 바로가기

JAVA

(10)
디자인 패턴 - 상태 패턴 상태머신 객체 상태 다이어그램 상태 머신 다이어그램이란 객체의 행동 다이어그램 중 하나이다. 객체는 특정 상태를 지니며 이 상태는 이벤트와 같은 액션에 의하여 변경될 수 있다. 이러한 객체의 상태와 상태의 변화를 도식화 한 다이어그램이 객체 상태 다이어그램이다. 상태 패턴(state pattern) 상태패턴은 3가지로 구서된다. State(상태) - interface 상태가 변할 때마다 다른 동작을 하는 인터페이스(API)를 결정합니다. State(구체적인 상태) - 구현체 State의 인터페이스(API)를 구체적으로 구현합니다. Context(상황) 현재의 상태를 나타내는 ConcreteState 역할을 가집니다. 또한 State 패턴의 이용자에게 필요한 인터페이스(API)를 결정합니다. 구현 형광등을..
SpringBoot Controller 매개변수 애너테이션의 종류 @RequestParam HTTP GET 방식으로 전달되는 URL 의 parameter 값을 가져올때 사용됨 http://localhost:8080/student?studentId=1 주소 형식에서의 ? 뒤 parameter 값과 매핑됨 @GetMapping("/student") public String getStudentId(@RequestParam(name="studentId", required=false, defaultValue="0") int id) { return "list"; } @GetMapping("/student") public String getStudentId(@RequestParam("studentId") int id) { return "list"; } 속성값 name type 설명..
DAO와 repository의 차이 1. DAO DAO객체는 Data Access Object의 약자로 Database의 data에 access하는 트랜잭션 객체입니다. 웹서버는 DB와 연결하기 위해서 매번 커넥션 객체를 생성하는데, 이것을 해결하기 위해 connection Pool을 사용합니다. Connection Pool 이란 connection 객체를 미리 만들어 놓고 그것을 가져다 쓰고, 다쓰고 난 후에는 반환해 놓는 것입니다. 하지만 유저 한명이 접속해서 한번에 하나의 Connection만 일으키는 것이 아니라 많은 Connection을 만들기 때문에, Connection Pool은 오버헤드를 효율적으로 하기 위해 DB에 접속하는 객체를 하나 만들고, 모든 페이지에서 그 객체를 호출해 사용합니다. 이렇게 커넥션을 하나만 가져오고 ..
Proxy 객체 더보기 Proxy vs. Proxy Pattern Proxy Pattern : 실제로 Target에 대한 기능을 확장하거나, 추가하지 않음. 타깃에 접근하는 방식을 변경해주는 역할 Proxy : 실제 Target의 기능을 수행하면서 기능을 확장하거나 추가하는 실제 "객체"를 의미 java에서는dynamic proxy와 CGLib를 제공합니다. 만약 타깃이 하나 이상의 인터페이스를 구현하고 있는 클래스라면 JDK Dynamic Proxy의 방식으로 생성되고 인터페이스를 구현하지 않은 클래스라면 CGLIB의 방식으로 AOP Proxy를 생성해줍니다. 1. dynamic proxy dynamic proxy의 경우 Proxy클래스를 Java에서 만들어 주기 때문에 Proxy 클래스 내부를 직접 구현 할 수가 없..
proxy 패턴 프록시 패턴이란? 실제 기능을 수행하는 객체 대신 가상의 객체를 사용해 로직의 흐름을 제어하는 디자인 패턴 프록시 패턴의 특징 원래 하려던 기능을 수행하며 그외의 부가적인 작업(로깅, 인증, 네트워크 통신 등)을 수행하기에 좋음 비용이 많이 드는 연산(DB 쿼리, 대용량 텍스트 파일 등)을 실제로 필요한 시점에 수행 가능 프록시 객체와 실제 객체의 사용법이 유사하므로 사용성이 좋음 1) 가상 프록시 가상 프록시는 실제 객체의 사용 시점을 제어할 수 있습니다. ex> 문서를 디코딩하는 프로그램 //인터페이스 interface TextFile { String fetch(); } //구현체 class SecretTextFile implements TextFile { private String plainText..
디자인 패턴 디자인패턴이란? 디자인 패턴은 모듈의 세분화된 역할이나 모듈들 간의 인터페이스 구현 방식을 설계할때 참조할 수 있는 전형적인 해결 방식이다. 디자인 패턴을 통해 설계 문제, 해결 방법, 해결 방법을 언제 적용해야 할지, 그 결과는 무엇인지 등을 알 수 있다. 또한 디자인 패턴은 한 패턴에 변형을 가하거나 어떠한 요구사항을 반영하면 다른 패턴으로 변형되는 특징이 있다. 확장과 수정에 용이하여 설계 이후에도 추가적인 유지 보수에 비용이 적게들어가는 코드를 설계하는 것이 목표이다. 객체지향 방법론 에서 좋은 코드를 설계하기 위해 지켜야 하는 원칙이 SOLID 원칙이고, 이러한 원칙에 기반해서 좀 더 구체적인 코드로 분류한 것이 디자인 패턴이다. ✔ 아키텍쳐 패턴과 디자인 패턴 아키텍쳐 패턴은 주어진 상황의 소..
Object 클래스 - 메서드 Object클래스 Object 변수는 모든 자바 클래스의 부모 클래스이다. 때문에 모든 클래스는 Object의 메서드를 사용할 수 있는데, 모든 클래스가 공통으로 포함하고 있어야 하는 기능을 제공하기 위해서 존재한다고 생각해도 무방하다. String toString() 인스턴스에 대한 정보를 문자열로 반환한다. 해당 메소드는 기본적으로 각 API 클래스마다 자체적으로 오버 라이딩을 통해 재정의되어 있기 때문에 활용도가 높다. newObject.toString(); protected Object clone() 해당 인스턴스를 복제하여, 새로운 인스턴스를 생성해 반환한다. 하지만 필드의 값만을 복사하므로, 필드의 값이 배열이나 인스턴스면 제대로 복제할 수 없다. 따라서 클래스에서 Cloneable 인터페이스..
Constant Pool Constant pool은 리터럴 상수 값을 저장하는 곳이다. String a = "String Pool"; String b = "String Pool"; String c = new String("String Pool"); System.out.println((a==b)?true:false); //true System.out.println((a==c)?true:false); //false java에서 일반적으로 문자열을 비교할 때 == 연산을 사용하지 않고 .equals()를 사용하여 문자열이 일치하는지 비교한다. 그 이유는 java에서 == 연산은 객체의 주소값을 비교할 때 사용하기 때문이다. 하지만 예시 코드의 연산 결과는 true이다. 그 이유를 알기 위해서는 Constant Pool과 literal..