Java
-
자바 디자인 패턴(4)_옵저버 패턴Java 2023. 11. 6. 16:59
옵저버 패턴 객체의 상태 변화를 보고있는 관찰자(주체)가 어떤 객체의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 메서드 등을 추가 변화 사항이 생기는 객체들(옵저버들)에게 변화를 알리는 패턴 MVC 패턴에서 사용된다. Model에서 변경사항이 생겨 옵저버인 View에게 알려주고 이를 기반으로 Controller가 동작한다. // topic을 기반으로 옵저버 패턴을 구현 - Observer a = new TopicSubscriber("a", topic);으로 해당 이름과 어떤 topic의 옵저버가 될지 결정 import java.util.*; interface Subject { public void register(Observer obj); public void unregister(Observer o..
-
자바 디자인 패턴(3)_전략 패턴Java 2023. 11. 6. 16:58
전략 패턴 객체의 행위를 바꾸고 싶을 때 캡슐화한 알고리즘 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴 // 결제 방식(전략)만 바꿔서 결제하는 로직 import java.util.*; interface PaymentStrategy { public void pay(int amount); } class KAKAOCardStrategy implements PaymentStrategy { private String name; private String cardNumber; private String cvv; private String dateOfExpiry; public KAKAOCardStrategy(String nm, String ccNum, String cvv, String expiryD..
-
자바 디자인 패턴(2)_팩토리 패턴Java 2023. 11. 6. 16:57
팩토리 패턴 객체 생성 부분을 떼어내 추상화한 패턴 상속 관계에 있는 두 클래스 중에 상위 클래스가 뼈대를 결정하고 하위 클래스가 객체 생성에 구체적인 내용을 결정 상위 클래스는 인스턴스 생성 방식을 알 필요가 없어 유연성을 가진다. 객체 생성 로직이 따로 있기 때문에 코드를 리팩터링해도 한 부분만 고치기 때문에 유지보수성이 증가한다. // 상위 클래스인 CoffeeFactory에서 Latte, Americano 같은 하위클래스의 구체적인 내용을 통해 가격을 산출 abstract class Coffee { public abstract int getPrice(); @Override public String toString() { return "coffee price : " + this.getPrice();..
-
자바 디자인 패턴(1)_싱글톤 패턴Java 2023. 11. 6. 16:55
싱글톤 패턴 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴으로 인스턴스 생성 시 비용절감의 장점이 있고, 의존성이 높아진다는 단점이 있다. 데이터베이스 연결모듈에 사용된다. 각 테스트마다 독립적인 인스턴스를 만들기 어렵다. 의존성이 높아진다는 단점은 의존성 주입을 통해 모듈간 결합을 느슨하게 만들 수 있다. 메인 모듈이 하위모듈에 직접적으로 의존성을 주기보다는 중간에 의존성 주입자를 통해 간접적으로 의존성을 주입하는 방식(디커플링) 상위 모듈은 하위 모듈에서 어떤것도 가져오면 안된다. 상위, 하위 모듈은 모두 추상화에 의존해야 하며, 추상화는 세부 사항에 의존하지 말아야한다. class Singleton { private static class instanceHolder { private stati..
-
자바 String, StringBuffer, StringBuilder 차이Java 2023. 10. 12. 16:42
자바 문자열 클래스StringStringBuffer : 문자열을 연산(추가하거나 변경) 할 때 주로 사용하는 자료형 (멀티 스레드 환경에서 안전)StringBuilder : 문자열을 연산(추가하거나 변경) 할 때 주로 사용하는 자료형 (문자열 파싱 성능이 가장 우수)/*String 내부구조 - final이 존재*/ public final class String implements java.io.Serializable, Comparable { private final byte[] value; } /*StringBuffer의 내부구조 - final이 미존재*/ public final class StringBuffer implements java.io.Serializable { private byte[] va..
-
자바 new String()과 리터럴("")의 차이Java 2023. 10. 12. 16:16
자바에서 String 문자열을 만드는 2가지 방법이 존재하는데, new String()과 리터럴("")이다. 2가지의 차이점은 저장공간의 차이이다.new String() : Heap 메모리 영역에 저장 (같은 값이 String pool에 존재하더라도, Heap영역에 별도로 객체를 생성)리터럴("") : String constant pool 영역에 생성 (constant pool에 같은 값이 존재한다면 생성되는 객체는 이미 존재하고 있는 값을 참조) 출처) https://yeoonjae.tistory.com/entry/Java-String-literal-%EA%B3%BC-new-String-%EC%9D%98-%EC%B0%A8%EC%9D%B4
-
자바 URL 통신 사용법 및 총 정리Java 2023. 10. 12. 13:51
자바를 사용해 URL통신 하는 방법import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.json.simple.JSONObject; import org.springframework.util.StringUtils; import javax.servlet.http.HttpServletResponse; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.U..