문제A class Q4 { static { System.out.println("1"); } public static void main(String[] args) { System.out.println("2"); } static class SubQ4 { static { System.out.println("3"); } } } 출력값은 무엇인가? 문제 B class Q4 { static { System.out.println("1"); } public static void main(String[] args) { System.out.println("2"); SubQ4.value++; } static class SubQ4 { private static int value = 123; static { System.out..
문제 class Q3 { public static void main(String[] args) { Integer a = 200; Integer b = 200; System.out.println(a == b); Integer c = 100; Integer d = 100; System.out.println(c == d); } } 출력값은 무엇인가? (1) true true (2) false false (3) true false (4) false true (5) 런타임 에러 (6) 컴파일 에러 정답 답은 4번. false true 이다. Integer은 객체 래퍼(wrapper) 타입이기 때문에 두 객체는 동등성(equality)은 일치하지만 동일성(identity)은 달라야 할 것 처럼 보인다. 따라서 fa..
문제 class Q2 { static long value; public static void main(String[] args) { Runnable r = () -> { for (int i = 0; i < 100000; i++) value++; }; Thread t1 = new Thread(r); Thread t2 = new Thread(r); t1.start(); t2.start(); t1.join(); t2.join(); //작업 종료 대기 System.out.println("value = " + value); } } 출력된 값은 200000인가? 정답 아니다. 200000에 한참 못미치는 값이 출력된다. 꼬리 문제 그럼, 문제 1( https://engine-it.tistory.com/179 ) 처..
문제 class Q1 { static long value = 123456789123456789L; public static void main(String[] args) { Thread t1 = new Thread(() -> { long cnt = 0; while (true) { value = (cnt++ % 2 == 0) ? 987654321987654321L : 123456789123456789L; } }); Thread t2 = new Thread(() ->{ while (true) { long v = value; if (v != 987654321987654321L && v != 123456789123456789L) { //여기 System.out.println("Something wrong.. va..
https://refactoring.guru/ko/design-patterns 디자인 패턴들 refactoring.guru 번역체가 있지만, 구체적인 예시와 인터렉션이 흥미로움
개요 아래 내용은 Chat GPT가 작성한 내용입니다. 따라서 잘못된 내용이 있을 수 있습니다....가 아니라 많네요 보니까 ^^; Chat GPT 테스트 겸 그대로 업로드합니다 SOLID 원칙 단일 책임 원칙 (Single Responsibility Principle) : 모든 클래스는 하나의 책임만 가져야 합니다. 이는 클래스를 변경할 때 다른 기능에 영향을 미치지 않도록 하는 것을 의미합니다. 개방 폐쇄 원칙 (Open-Closed Principle) : 소프트웨어 개체(클래스, 모듈, 함수 등)는 확장에 대해 열려 있어야 하고 변경에 대해서는 닫혀 있어야 합니다. 즉, 기존 코드를 변경하지 않고 새로운 기능을 추가할 수 있어야 합니다. 리스코프 치환 원칙 (Liskov Substitution Pr..
크롬 익스텐션 개발 중, 8196Byte가 넘는 문자열을 chrome storage에 넣는 도중 아래와 같은 오류를 만났다. QUOTA_BYTES_PER_ITEM quota exceeded chrome.storage.sync.set 메서드를 통해 데이터를 저장할 때, chrome.storage.sync.QUOTA_BYTES_PER_ITEM 값보다 큰 데이터는 저장할 수 없다. 따라서 해당 크기만큼 쪼개서 저장해야 한다. 문자열 하나를 4Byte라고 가정하고(UTF-16) 2048자 만큼씩 쪼개서 storage에 저장하는 코드를 작성했다. 더 효율적으로 하려면 Blob 등을 이용해 정확히 8196Byte 단위로 쪼개서 저장해야 하지만, 그 정도의 효율성이 필요하지 않고 대부분 문자가 이모지(4Byte) 였..
가장 쉬운 방법 -webkit-text-stroke:3px black; text-stroke 속성을 이용해 테두리를 입힌다. 그러나, 외곽 테두리가 아니라 글자를 먹고 들어가는 inner 테두리가 만들어진다. text-shadow를 이용한 외곽 테두리 text-shadow:-3px -3px 0 #000,0 -3px 0 #000,3px -3px 0 #000,3px 0 0 #000,3px 3px 0 #000,0 3px 0 #000,-3px 3px 0 #000,-3px 0 0 #000; text-shadow를 쓰는 편법(?)을 이용해 외곽 테두리를 만들 수 있다. 상, 하, 좌, 우, 좌상, 우상, 좌하, 우하 위치에 shadow를 추가하면 된다. 영문의 경우 이정도로도 충분히 깔끔한 테두리가 만들어지지만, ..