JAVA

JAVA/라이브러리

[Java] 문자열 붙이기 - StringJoiner와 String.join() 알아보기

여러 문자열을 이어 붙일 때 보통 StringBuilder를 사용했었습니다. 그런데 특정 상황에서 더 유용한 클래스가 있어서 소개하려 합니다. StringBuilder를 썼을 때 아쉬운 점 아래와 같이 반복문으로 문자열을 이어 붙일 때 마지막에 구분자가 append 되는 것을 처리해야 하는 문제가 있다. String[] arr = {"one", "two", "three"}; StringBuilder sb = new StringBuilder(); for(int i = 0; i < arr.length; i++){ if(i == arr.length - 1){ sb.append(arr[i]); break; } sb.append(arr[i]).append(","); } System.out.println(sb); ..

JAVA/JAVA 이론

[Java] 깊은 복사(Deep Copy) vs 얕은 복사(Shallow Copy)

깊은 복사 vs 얕은 복사 Java에서 객체를 복사할 때, 깊은 복사와 얕은 복사라는 개념이 있다. 간단하게 정리하자면 깊은 복사 : 실제 값을 새로운 메모리 공간에 복사하는 것이고, 얕은 복사 : 주소 값을 복사하는 것이다. 간단 예제 아래 예제를 통해 일단 간단히 알아보자. int[] original = new int[]{1,2,3}; int[] shallowCopy = original; //얕은 복사 int[] deepCopy = original.clone(); //깊은 복사 //주소 값 확인 System.out.println("주소-original = " + System.identityHashCode(original)); //주소-original = 191382150 System.out.print..

JAVA/JAVA 이론

[Java] equals()와 hashCode() / equals와 hashCode를 둘 다 재정의 해야하는 이유

Java의 모든 객체는 Object 클래스를 상속받고 있다. Object 클래스는 객체의 동일성을 비교하기 위한 equals와 hashCode 메서드가 정의되어 있다. 따라서 Java의 모든 객체는 필요에 따라 equals와 hashCode를 재정의할 수 있다. equals() equals()는 두 객체의 값이 같은지 여부를 비교할 때 사용하는 메서드이다. 객체를 비교할 때 기본적으로 객체의 주소를 비교한다. public static void main(String[] args) { Car car1 = new Car(1111, "blue"); Car car2 = new Car(1111, "blue"); System.out.println(car1 == car2); //두 객체는 주소가 다르기 때문에 fals..

JAVA/JAVA 이론

[Java / CS] JVM과 Java의 메모리 구조

(운영체제) 프로세스 메모리 구조 일반적으로 프로세스의 메모리 구조는 아래의 4가지 영역으로 나눠진다. 스택(stack), 힙(heap), 데이터(data), 코드(text) 영역 stack과 heap 영역은 런타임 단계에서 메모리를 할당받는 동적 영역이고, data와 code 영역은 컴파일 단계에서 메모리를 할당받는 정적 영역이다. Stack : 임시 데이터 (함수 실행을 위한 지역 변수 등)가 저장된다. Heap : 코드에서 동적으로 만들어지는 데이터가 저장된다.(동적으로 할당된 데이터) data : 전역 변수, 초기화된 데이터 등 code : 프로그램 코드 JVM(Java Virtual Machine) Java의 특징 객체지향 프로그래밍 언어 기본 자료형(Primitive type : 원시 자료형)..

JAVA/라이브러리

[JUnit] 테스트 코드 작성과 단위테스트 Unit Test

JUnit Java용 유닛 테스트 프레임워크이다. 소프트웨어 개발 시에 단위테스트(Unit Testing)는 중요한 절차이다. 프로그램을 작은 unit 단위로 쪼개어 각각 잘 동작하는지 검사함으로써 프로그램의 안정성을 높인다. 1) 테스트 주도 개발 (TDD) 테스트 주도 개발(Test-Driven Development)란, 테스트 케이스를 작성하고 소스코드가 이를 통과하는지 반복하여 확인하며 개발하는 것을 말한다. TDD는 기능의 구현 목표에 집중하여 개발 생산성을 높이고, 이후 리팩토링과 유지보수에 이점을 가져다준다. JUnit 테스트를 처음 접했을 때, 사소하고 틀일일이 없다고 생각하는 부분까지 테스트를 하는 것을 보고 놀랐다. 나도 앞으로 당연히 맞을 거라고 생각하는 로직에도 테스트를 돌려보는 습..

JAVA

[JAVA] 문자열 다루기 String, StringBuilder, StringBuffer

StringBuilder, StringBuffer 클래스 내부적으로 가변적인 char[ ]를 멤버변수로 가짐 문자열을 여러번텍스트 연결하거나 변경할때 사용함 새로운 인스턴스를 생성하지 않고 char[ ]을 변경함 StringBuilder : 단일 쓰레드에서 사용 StringBuffer : 멀티 쓰레드에서 사용 - 동기화 append()을 이용하여 StringBuilder에 문자열 추가 String, StringBuilder로 문자열을 붙이는 예제이다. StringBuilder sb = new StringBuilder(); String str1 = "Hello"; String str2 = "World!!"; //StringBuilder 이용 sb.append(str1).append(" ").append(s..

JAVA

[Java] Scanner, BufferedReader, BufferedWriter

Scanner와 BufferdReader의 차이 BufferedReader, BufferedWriter은 버퍼를 사용하여 읽기, 쓰기를 하는 함수이다. 버퍼를 사용하지 않는 입력은 키보드의 키를 누르는 즉시 프로그램에 전달된다. 버퍼를 사용하는 입력은 키보드의 입력 이 있을 때마다 한 문자씩 버퍼로 전송한다. 이 버퍼가 가득차거나 줄 바꿈을 하면 버퍼의 내용을 한 번에 프로그램에 전달한다. Scanner은 1KB의 버퍼를 갖고, BufferedReader는 8KB의 버퍼를 가진다. 즉, Scanner은 더 자주 프로그램에 전달하고, BufferedReader은 조금 더 모아놨다가 프로그램에 전달한다. ( 쓰레기가 생길때마다 나가서 버리는 거랑, 쓰레기통에 모아놨다가 한 번에 버리는 차이 ) 버퍼는 키보드..

JAVA

[JAVA] Comparator / Comparable - 정렬을 위한 클래스(인터페이스)

Comparator와 Comparable 두가지 모두 두개의 객체를 비교하기 위한 인터페이스 이다. Comparator의 compare() 메서드는 두 매개변수 객체를 비교하고, Comparable의 compareTo() 메서드는 자기자신과 매개변수 객체를 비교한다. 객체 o1, o2가 있을 때 , compare(o1, o2) / o1.compareTo(o2) 가 가능할 것이다. 이때, return 값에 따라 o1과 o2의 위치가 결정된다. return 1 (양수) : 위치를 변경하지 않음. 즉, o1이 o2보다 앞쪽에 위치하도록 결정 return -1(음수) : 위치를 변경함. 즉, o1이 o2의 뒤에 위치하도록 결정 return 0 : return1과 비슷하거나 같음. 위치를 변경하지 않음 publi..

HSRyuuu
'JAVA' 카테고리의 글 목록