본문 바로가기

Develop/Java7

[Java] Thread 클래스와 ThreadPoolExecutor 클래스 단순 Thread 클래스를 사용하게 되면? 자바8 기준 사용자 레벨 스레드를 사용하지 않음 JVM을 통해 OS의 시스템콜을 호출하여 커널 스레드를 1:1로 할당 받음 ⇒ 스레드 생성 비용이 너무 크다!!!!!!!!!!!!!!!!!!!!! (스레드 맵핑과 관련한 글은 아래 글에서 확인하실 수 있습니다.) 2023.09.10 - [컴퓨터공학/운영체제] - [운영체제?] 스레드의 종류(하드웨어스레드, 커널레벨스레드, 유저레벨스레드) 헉! 그럼 자바에서 스레드를 사용하면 비효율적이네요! 하지만 당근빠따루 스레드풀을 사용할 수 있음 concurrent 패키지의 ThreadPoolExecutor 클래스로 사용 ⚠️ Executors.newFixedThreadPool(100)로 생성 시 작업 큐 사이즈가 Intege.. 2023. 9. 10.
[Java] Lambda, Functional Interface 그리고 Stream API 이브, 프시케 그리고 푸른 수염 어쩌고 따라하고 싶었어요ㅎㅎ.. Lambda 익명 함수로써 이름 없이 정의되며, 코드 블록을 1급 시민으로 다룰 수 있는 프로그래밍 언어의 기능 🧐 1급 시민 First-Class Citizen | 1급 객체 변수에 할당할 수 있어야 한다. 함수의 매개변수로 전달할 수 있어야 한다. 함수의 리턴값으로 사용할 수 있어야 한다. 함수나 메소드가 1급 시민으로 간주되기 위한 조건 함수형 프로그래밍 스타일을 지원 코드를 간결하게 관리 주로 컬렉션 처리, 스트림 연산, 콜백 함수 등에 사용 → 자바에선 함수를 일급시민으로 쓸 수 없었음, 람다 개념 등장 → 일급시민으로 사용할 수 있게됨 람다 표현식 작성방법 어떤 언어에서든 익명함수를 다 써보셨을 거라고 예상됩니다. 자바에서도 마찬.. 2023. 9. 8.
Java JVM 아키텍쳐 (1) 먼저 Virtual Machine 이란? 수업을 듣다보면 가상 머신을 다뤄 본 적이 있을 것이다. 자신의 하드웨어 위에 또 다른 OS(Guest OS)를 실행하게 해주는 것이 VM의 역할이다. 그런 VM이 자바에도 있다! 연관해서 생각해 본 적이 없었는데, 생각해보니 JVM의 VM이 virtual machine 이다. JVM은 무엇인가? JVM은 추상 머신이다. 자바 바이트 코드를 런타임 환경에서 실행할 수 있게 해준다. JVM은 많은 하드웨어나 소프트웨어에서 사용 가능하다. Implementation(JRE, Java Runtime Environment)에 따라서 JVM 동작 알고리즘을 선택할 수 있다. 무슨일을 하는가? VM인만큼 스스로 메모리 관리를 한다. Loads code Verifies cod.. 2023. 7. 16.
[Java] String to Json 파싱하기 | Jackson ObjectMapper 온갖 JSON 파싱 방법 찾아서 적용하니까 코드가 더럽거나 실패했다. 그나마 가장 깔끔한 방법을 찾아서 공유한다!!!! 파싱 유목민 여기서 정착하다... 공식 문서 : https://www.baeldung.com/jackson-deserialize-json-unknown-properties import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; //.. 2023. 4. 2.
TDD 테스트 주도 개발 Test Driven Development 1. TDD의 주된 이익 코드를 깨끗하게 유지하도록 치열하게 싸우지 않으면 시스템은 점점 퇴화한다. 코드를 재빠르게 추가할 수는 있지만 처음에는 good code 라기보다는 not so great code 일 가능성이 높다. TDD를 잘 따른다면 구현하는 실질적인 모든 사례에 대해 단위테스트를 작성하게 된다. 단위 테스트는 코드를 지속적으로 발전시킬 수 있는 자유를 준다. 작성하려는 코드가 있다면 항상 먼저 어떻게 그 코드를 테스트할지 고민해야 한다. 작성할 코드를 묘사하는 테스트를 설계해야 한다. 이러한 역 방향 접근법은 단위 테스트 전략의 핵심이다. 2. 단순하게 시작 TDD는 세 부분의 사이클로 구성된다. - 실패하는 테스트 코드 작성하기 - 테스트 통과시.. 2023. 2. 19.
코드 테스트에 관한 약어(FIRST, Right-BICEP, CORRECT) FIRST : 좋은 테스트 조건이란? [F]ast 테스트는 빠르게 동작해야 한다. 느린 것에 의존하는 코드를 최소화하자. [I]solated 직접적 혹은 간접적으로 테스트 코드와 상호 작용하는 코드가 많을수록 문제가 발생할 소지가 늘어난다. 다른 단위 테스트에 의존하지 않는 결합도를 낮은 테스트 코드를 작성하자. 각 테스트가 작은 양의 동작에만 집중하면 독립적인 테스트 코드로 유지하기 쉽다. 테스트 코드에도 단일 책임 원칙을 적용하자. 테스트 메서드가 하나 이상의 이유로 깨진다면 테스트를 분할하는 것을 고려하자. [R]epeatable 테스트는 실행할 때마다 결과가 같아야 한다. 반복 가능한 테스트를 만들려면 직접 통제할 수 없는 외부 환경에 있는 항목들과 최대한 격리시켜야 한다. [S]elf-valid.. 2023. 2. 16.
SOLID 클래스 설계 원칙 단일 책임 원칙 (Single Responsibility Principle) 클래스는 변경할 때 한 가지 이유만 있어야 한다. 모든 클래스는 하나의 책임만 가진다. 개방 폐쇄 원칙 (Open / Closed Principle) 클래스는 확장에는 열려 있고 변경에는 닫혀 있어야 한다. 기존 클래스의 변경은 최소화한다. 리스코프 치환 원칙 (Liskov Substitution Principle) 하위 타입은 반드시 상위 타입을 대체할 수 있어야 한다. 파생 클래스로도 별다른 이해 없이사용 가능해야 한다. 인터페이스 분리 원칙 (Interface Segregation Principle) 클라이언트는 필요하지 않는 메서드에 의존하면 안 된다. 여러 개의 범용 인터페이스로 분할하라. 의존성 역전 원칙 (Depen.. 2023. 2. 13.