no image
Jmeter STOMP test (WebSocket Samplers)
Jmeter STOMP test (WebSocket Samplers) jmeter plugins manager를 설치하고 WebSocket Samplers by Peter Doornbosch를 설치한다. BeanShell Sampler에 자바 문법을 작성할 수 있다. JAVA에서 특수문자(큰따옴표)를 String에 넣으려면 앞에 역슬러쉬를 붙여야 한다. 그래서 STOMP_SEND의 경우 { "type" : "talk" }은 { \\"type\\":\\"talk\\" } 다음과 같이 작성한다. ( 역슬러쉬 1개인데 1개로 작성하면 구글 Search Console에 파싱할 수 없는 구조화된 데이터 문제가 감지된다고 나와서 2개로 표현함 ) STOMP 프레임은 이전 글을 참고 Stomp protocol Sto..
2024.01.27
no image
java thread (자바의 정석)
자바의 정석(남궁성)을 읽으면서 Thread 싱글 코어에서는 멀티 쓰레드로 하나의 작업을 수행해도 싱글 쓰레드로 작업을 수행할 때 보다 더 시간이 걸린다. 이유는 th1 -> th2 -> th1 -> th2 의 순차 반복일 뿐이여서 오히려 context switching 비용만 추가로 생긴다. 멀티 코어에서는 효과가 있다. th1과 th2가 겹쳐서 수행될 수 있기 때문이다. (하나의 코어는 하나의 쓰레드를 실행한다는 전제) (여기서 쓰레드를 tomcat 쓰레드 풀의 쓰레드와 연관지어 생각하지 말자.) java가 JVM 에서 동작하므로 os에 독립적이라고 하지만 실제로 os 종속적인 부분이 몇 가지 있는데 쓰레드도 그 중 하나이다. JVM 의 쓰레드 스케쥴러에 의해서 어떤 쓰레드가 얼마동안 실행될 것인지 ..
2023.12.10
no image
java factory method pattern
Factory Method Product 객체를 직접 생성하지 않고 Factory 클래스에서 Product를 만든다. 여러 Product 구현체가 있고 그 Product 를 만드는 Factory 구현체가 있다. 각각의 Factory 구현체가 그에 해당하는 Product 객체 생성의 책임을 가지고 있다. 객체 생성에 필요한 과정과 메서드를 템플릿 처럼 구성해놓고 과정과 메서드의 내부 동작은 Product 구현체와 Factory 구현체에서 유연하게 만들 수 있다. 장점 생성자와 구현 객체의 강한 결합을 피할 수 있다. 팩토리 메서드를 통해 객체 생성 후 공통으로 할 일을 수행하도록 지정할 수 있다. 캡슐화, 추상화를 통해 생성되는 객체의 구체적인 타입을 감출 수 있다. SRP(Single Responsibi..
2023.09.06
java object equals
Object.equals public static void main(String[] args) { Test t = new Test("hi"); Test t2 = new Test("hi"); t.equals(t2); } static class Test { String test; Test(String test) { this.test = test; } } 모든 객체의 조상은 Object고 Object는 equals method를 가지고 있다. 객체를 생성하고 equals에 별도의 @Override 가 없다면 public boolean equals(Object obj) { return (this == obj); } 위와 같이 동작한다. 참조 주소가 같아야 true를 반환하는 equals 이다. String t3..
2023.08.08
자바) ArrayList LinkedList 시간 비교 (23-07-06)
velog에서 이전한 글 입니다. 비교 ArrayList arrayList = new ArrayList(); LinkedList linkedList = new LinkedList(); System.out.println("뒤에 추가"); int count1 = 10_000_000; listAdd(arrayList, count1); listAdd(linkedList, count1); System.out.println("앞부터 삭제"); int count4 = 1_000; listRemoveHead(arrayList, count4); listRemoveHead(linkedList, count4); } 뒤에 추가 0.194 sec 0.896 sec 앞부터 삭제 5.199 sec 0.0 sec System.out..
2023.07.13
자바) ArrayList Capacity (23-07-06)
velog에서 이전한 글 입니다. ArrayList private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; } public boolean add(E e) { modCount++; add(e, elementData, size); return true; } private void add(E e, Object[] elementData, int s) { if (s == elementData.length) elementData = grow(); elementData[s] = e; size = s + 1; } pr..
2023.07.13
자바) combination/ stream (23-06-19)
velog에서 이전한 글 입니다. combination static List combination(List list, List result, int depth) { List r = new ArrayList(); if (result.size() == depth) { r.add(result); return r; } for (int i = 0; i < list.size(); i++) { List n_list = new ArrayList(list.stream().skip(i + 1).collect(Collectors.toList())); List n_result = new ArrayList(result.stream().collect(Collectors.toList())); n_result.add(list.get..
2023.07.13
자바) 와일드카드 (23-05-30)
velog에서 이전한 글 입니다. 와일드 카드 출처 배열과 달리 제네릭에서는 공변성/반공변성 을 지원하지 않는다. // 공변성 Object[] Covariance = new Integer[10]; // 반공변성 Integer[] Contravariance = (Integer[]) Covariance; // 공변성 ArrayList Covariance = new ArrayList(); // 반공변성 ArrayList Contravariance = new ArrayList(); 이를 극복하고자 한 것이 와일드카드 class MyArrayList { Object[] element = new Object[5]; int index = 0; // 외부로부터 리스트를 받아와 매개변수의 모든 요소를 내부 배열에 추가하..
2023.07.13
자바) List (23-05-26)
velog에서 이전한 글 입니다. List List list = Arrays.asList(new Integer[] {1,2,3}); List list2 = Arrays.asList(new int[]{1, 2, 3}); Stream.of랑 비슷한 느낌으로 원시 타입은 배열을 그대로 가져간다. List a1 = Arrays.asList(1,2,3); List a2 = List.of(1,2,3); a1.add(4); //UnsupportedOperationException a2.add(4); //UnsupportedOperationException //아래처럼 작성하자. List a = new ArrayList(Arrays.asList(1,2,3)); a.add(4); 둘 다 Immutable List 를 생..
2023.07.13