JAVA

· JAVA
해당 글은 저의 개념을 바탕으로 자료구조를 구현한 뒤 틀린 부분을 파악해 나가는 과정을 가지고 있습니다.초반에 틀린 설명으로 시작할 수 있다는 점 유의 부탁드립니다.  자료구조 개념을 다시 복습하는 겸 자바로 다양한 자료구조를 구현하는 과정을 기록해보려고 한다.  다른 사람이 자료구조를 공부할 거면 C언어로 하는 것을 추천하기도 했지만 자바만의 자료구조 구현 방식이 있을 것이고, 개념은 언어의 문제가 아니라 생각했기에 자바로 시작해보려고 한다.  ArrayList 내가 아는 ArrayList의 개념은 다음과 같다. 자바의 Collection 프레임워크에 포함된 List의 구현체이다.내부적으로 Array(배열)을 이용해서 구현하고 있다.배열로 이루어져 있기에 조회에 강한 이점을 가지고 있다.  위 개념만 ..
· JAVA
만약에 String 값을 int로 변환해야 한다면 뭘 선택할 건가? 대부분 알고리즘을 풀다 보면 parseInt를 쓰는 사람, valueOf를 쓰는 사람 둘로 나뉜다. 그래서 차이점을 찾아보면 공통적으로 하는 말들이 parseInt는 int로 반환하고, valueOf는 Integer로 반환해서 null을 받을 수 있다. 이게 끝이다. 내부적으로 동작하는 캐싱에 대한 이야기는 들어있는 글이 별로 없었다. 나도 예전에 Long값을 변환하면서 valueOf를 사용하다가 문제를 마주쳤던 경험이 있었기에 내부 로직을 파보려고 한다. Integer.parseInt 아래 코드는 가장 많이 작성하는 문자열 -> 정수 변환 코드다.int i = Integer.parseInt("123"); 내부적으로 먼저 한 단계 들어가..
· JAVA
아래의 내용은 직접 디버깅을 통해 알아가는 과정을 포함하고 있습니다. Array와의 가장 큰 차이점이라고 한다면 List는 배열의 크기를 따로 설정해주지 않아도 된다. 기존의 배열은 아래처럼 한정된 크기를 설정해 주고 크기 안에서만 값을 할당할 수 있었다.int[] arr = new int[5];arr[0] = 1; arr[1] = 2; 반면에 List는 크기를 정하지 않아도 데이터를 집어넣을 수 있다.List list = new ArrayList();list.add(1); list.add(2); 그러면 List는 어떻게 구성이 되어 있길래 크기를 설정하지 않아도 가능한 것일까?ArrayList 가장 먼저 주목할 부분은 아래 주석의 내용이..
· JAVA
우선 내가 여태 알고있던 Java의 실행 과정이다. 1. 개발자가 작성한 .java 파일을 컴파일러가 .class(바이트코드 파일)로 변경한다. 2. JVM의 클래스 로더가 .class를 메모리에 적재시킨다.(런타임 시점) 3. JVM의 실행 엔진이 메모리에 적재된 바이트코드를 실행 시킨다. 간단하게 위 단계의 개념으로 알고있었는데, 조금더 세세하게 내부 개념을 정리해보려고 한다. 컴파일 과정 Java를 설치하면 javac.exe의 형태로 컴파일러가 먼저 설치된다. 자바 컴파일러가 개발자가 작성해놓은 .java 파일을 .class(바이트 코드)로 변경시켜주는 역할을 한다. 자바 코드 public class Human{ private final String name; private final int age..
· JAVA
많은 사람들도 그렇고 나도 아래의 기본 개념으로 이해하고 있었다. equals() : 두 객체의 "내용"이 같은지 비교한다. hashcode() : 객체의 고유한 해시코드를 반환한다. 그러면 2개의 값이 동일한 객체를 만들어서 equals()를 사용하면 true가 나와야겠네? Human h1 = new Human("박기현", 23); Human h2 = new Human("박기현", 23); System.out.println(h1.equals(h2)); // -> 결과 : false 그러나 실제 결과는 false가 나온다. 그 이유는 Object 타입의 equals()메서드 내부를 보면 이해할 수 있다. 내부에서 ==을 이용해서 값을 리턴한다. ==을 사용하게 되면 두 객체의 주소값이 같은지 확인한다. ..
· JAVA
나는 여태 프로젝트를 진행하면서 Class에 lombok을 사용해서 @Builder 어노테이션으로 Entity를 생성했다. 클래스에 @Builder를 붙이면 해당 클래스가 가진 모든 필드를 파라미터로 넣어서 객체를 생성해야 했기에 Entity를 생성하는 데 적합하다고 생각해서였다. 그런데 오늘 나왔던 얘기중에 Class에 @Builder를 붙이지 말고, 생성자를 만들어서 해당 생성자에 @Builder를 붙이라는 말씀이 나왔다. 우선 @Builder에 대해 자세하게 알아봐야한다. 디자인 패턴중에서 빌더 패턴을 사용하면 인스턴스를 생성할 때 명시적으로 파라미터를 넣어줄 수 있다는 장점이 있다. 또한 파라미터 순서대로 넣지 않아도 된다는 아주아주 큰 장점이 있다. 만약에 빌더를 사용하지 않고 생성자로 인스턴스..
· JAVA
TDD에 대해 공부하다가 Record로 이너 클래스를 만드는 경우를 볼 수 있었다. Record는 자바 14에 새로 도입되었고 자바 16에서 정식 채택된 새로운 유형의 클래스다.불변 객체를 쉽게 생성하고 다룰 수 있다는 특징이 있다. 밑에는 Record를 사용하지 않고 기존에 Java로 불변 객체를 만드는 Class다.import java.util.Objects;public final class Car { private final String name; private final int price; // 생성자 public Car(String name, int price) { this.name = name; this.price = price; } ..
· JAVA
자바를 사용하면서 List나 Map, Set을 많이 사용했는데 지금까지 아무 생각 없이 그냥 사용해 왔던 것 같다. 그래서 어떤 기능을 가지고, 어떤 특징을 가졌는지 정리해보고자 한다. Collections 프레임워크는 자료구조와 관련된 인터페이스, 클래스를 지칭하는 용어다. Collections에는 대표적으로 List, Set이 있다. (Map은 Collections에 포함되지 않음) List의 특징 1. 순서를 가진다. 2. 크기가 정해져 있지 않다.(동적) 3. 중복된 값을 넣을 수 있다. Set의 특징 1. 순서를 가지지 않는다. 2. 크기가 정해져있지 않다.(동적) 3. 중복된 값을 넣을 수 없다. 아래는 List에서 사용 가능한 인터페이스 메서드이다. ArrayList 제일 많이 사용하는 Li..
indeep
'JAVA' 카테고리의 글 목록