Study/Java

Study/Java

[Java] 불변 객체 (Immutable Object) 란?

나만의 WAS 서버를 구현하는 도중에 클라이언트의 HTTP 메시지를 요청받고, 이를 파싱해 객체로 다루기 위한 작업이 필요했다. 이 과정에서 생성된 HttpRequestMessage 라는 클래스는 처음 파싱 이후 수정될 일이 없다는 특성을 가지고 있다. 이 특성을 만족하기 위한 객체지향 프로그래밍에서 사용되는 불변 객체에 정리하고자 한다. 불변 객체 (Immutable Object)? 불변 객체는 객체가 생성된 이후에 그 상태를 변경할 수 없는 객체를 의미한다. 한 번 생성된 객체는 재할당 되는 것이 아니라면 영원히 그 상태가 변하지 않는다. 자바에도 불변 객체가 존재한다. java.lang.String 문자열 클래스가 그 예이다. String 으로 생성된 문자열 객체의 메서드를 직접 살펴본다면 내부의 ..

Study/Java

[Java] 자바의 스레드와 동작 과정

스레드 Thread 운영 체제를 배웠다면 스레드의 개념은 익히 알 것이다. 스레드는 프로그램 수행의 가장 작은 단위를 의미한다. 스레드는 한 가지 일을 하는 프로세스의 단점을 극복하고자 여러 가지 일을 동시에 하기 위해 탄생했다. 스레드는 다음과 같은 생성 주기를 갖는다. 💡 스레드의 생성 주기 Runnable: 준비 상태로 CPU 를 점유하고 있지 않으며 대기하고 있는 상태이다. Running: 실행 상태로 CPU 가 점유하고, 실행중인 상태를 의미한다. Dead: 수행할 동작이 모두 실행이 완료된 상태를 의미한다. Blocked: 실행 중에 일시 중단되어 CPU 점유를 잃은 상태를 의미한다. wait() 메서드를 통해 대기 상태로 전환되며, 대기 상태에서 notify() 메소드를 통해 Runnable..

Study/Java

[JUnit] 다양한 Assertions 사용하기

테스트 코드 작성의 중요성은 이제는 널리 알려져 있다. 어떤 코드든 예상치 못한 상황이 발생할 수 있기에, 이를 방지하고자 테스트 코드를 작성한다. 단위 테스트, 기능 테스트 다양한 기준으로 작성되며, 테스트 코드를 먼저 작성한 뒤 구현을 하는 TDD, DDD, BDD 등 다양한 개발 방법론도 존재한다. 테스트 코드 작성을 위해 다양한 도구들이 사용된다. 그중 Java를 테스트하기 이한 JUnit에 대해 간단히 살펴보고, 조금 더 다양하게 테스트하기 위한 Assertion 메서드들을 정리해보려 한다. JUnit 이란? JVM 위에서 쉽게 테스트를 할 수 있게 해주는 도구이다. 이번 내용에서 다루는 JUnit5는 Java 8 이상에서 동작함에 유의하자! Assertion 이란? 테스트를 수행하며, 결과에 ..

Study/Java

[JAVA] 동일성, 동등성 그리고 equals, hashcode 재정의

equals를 사용한 테스트 코드를 작성하고, 실제 기능을 구현한 뒤 테스트 해보았지만, 실패했다. 분명 내 코드에는 문제가 없다고 생각했고, 열심히 디버깅을 해 본 결과 equals 메소드에서 서로 다른 메모리 주소를 갖기 때문에 false를 반환했던 것이다. 이러한 문제는 equals, hashcode 재정의를 통해 해결할 수 있지만, 좀 더 근본적인 이유를 간단히 정리해보고자 한다. 자바의 동일성 (identify), 동등성 (equality) 먼저 자바의 동일성과 동등성에 대해 알아보자. 동일성 (identify) 이란 무엇일까? 나는 동일성 (identify) 이란 태생부터 존재하는 유일한 것이라고 생각했다. 나 홍길동은 태어나서 존재하는 단 한 명의 인간이다. 나와 같은 이름을 가진 다른 홍길..

Study/Java

[Java] 코딩테스트에 자주 쓰는 문법 정리

패키지 import java.io.*; import java.util.*; 입출력 // 선언 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; // 한줄 입력받기 br.readLine(); // 한줄 입력받고, 쪼갤 준비 st = new StringTokenizer(br.readLine()); // 토큰 단위로 하나씩 쪼개기 st.nextToken(); // 원하는 자료형으로 변환 int N = Integer.parseInt(br.readLine()); int N = Integer.parseInt(st.nextToken()); // EOF 처리 String input = ""; while..

Study/Java

[Java / IntelliJ] 인텔리제이 입출력 txt로 받기

그동안 파이썬으로 백준 문제를 풀 때 VScode를 활용해서 풀었다. 입출력을 빠르고, 쉽게 보기 위해 리다이렉션(redirect) 을 활용해서 테스트 케이스를 확인했는데, 자바로 언어를 바꾸면서 같은 방식을 사용하고 싶었다.. 다음과 같은 문제(문제는 KAUPC 문제..) 가 주어지면 예제를 복사하고 실행하면 다음처럼 Input.txt 파일에서 입력받고, Output.txt 파일에 출력이 저장된다. 즉, 텍스트 파일로 입출력을 저장할 수 있다. 이렇게 풀다보니까 적응돼서 없인 못 풀겠다.. 인텔리제이에서도 해당 기능을 사용할 수 있다. 먼저 같은 폴더에 input.txt / output.txt 를 각각 만들어준다. 메인 클래스를 한번 빌드해주고, 우측 상단에 구성 편집을 들어가 준다. 다음 화면에서 빌..

ddingmin00
'Study/Java' 카테고리의 글 목록