개발 일지/Java8 [Java] HashSet의 비밀 개요 최근 코딩 테스트를 치룬적이 있는데 Set 자료구조에 값을 담고 추후 해당 데이터를 List에 담아서 오름차순 정렬을 해야하는 로직이 필요로 하였다. 하지만, 주어진 테스트 케이스는 Set에 들어있는 원소의 값을 List에 담고 반환해주더라도 정답으로 출력되었다. 그래서 오름차순 정렬을 잊은채 제출하고 다른 문제를 풀러 갔다. 만약 예제가 틀렸더라면, 바로 오름차순 정렬을 깜빡한 걸 인지하고 바로 수정하지 않았을까... 엄연히 내 실수긴 하다 ㅎ.. 하지만 조금 특이한게 Set에 삽입한 순서를 떠올려보면 정렬을 하지않으면 테스트 케이스도 틀려야했다. 지금까지 필자가 알고 있었던 HashSet은 중복을 허용하지 않고 정렬을 지원하지 않는다고 알고 있었는데 왜 오름차순으로 정렬된 테스트케이스를 맞출수 .. 개발 일지/Java 2023. 10. 4. [Java] Integer.valueOf(127)==Integer.valueOf(127)은 True? 문제점 얼마전 백준에서 문제를 풀다가 도저히 이해가 안되는 상황이 발생하였다. Integer타입을 가진 어레이 리스트를 활용해서 "==" 비교 연산을 하였다. 참조형 타입 같은 경우 "==" 연산을 할 경우 메모리 주소 값을 비교하는 것으로 알고 있다. 하지만 다음과 같은 코드를 봤을 때 조금 의문이 발생하였다. ArrayList listA = new ArrayList(); ArrayList listB = new ArrayList(); listA.add(128); listB.add(128); if (listA.get(0) == listB.get(0)) { System.out.println("True"); } else { System.out.println("False"); } 위의 코드문을 봤을 때 출력 .. 개발 일지/Java 2023. 8. 8. [Java] 해시 충돌 오늘은 해시 충돌에 대해서 알아보고자 한다. 얼마전 hashCode() 와 equals() 메소드를 파헤쳐보았다. 이 글을 좀 더 쉽게 읽기 위해서는 아래의 링크를 클릭해서 해당 메소드들을 필수적으로 이해를 해야한다. [Java] equals 와 hashCode equals와 hashCode 는 최상위 클래스의 Object에서 정의되어있다. 그렇기 때문에 모든 객체는 Object 클래스에서 정의된 equals와 hashCode 함수를 상속받고 있다. equals 정확히 equals를 직역해보면 동일한가 baebalja.tistory.com 개념 해시 충돌 그게 무엇인가?? 코딩 테스트를 준비를 하면서 Java 개발자들은 HashMap 이라는 자료구조를 정말 많이 쓴다. 혹시 HashMap 이 어떠한 방식.. 개발 일지/Java 2022. 12. 19. [Java] equals 와 hashCode equals와 hashCode 는 최상위 클래스의 Object에서 정의되어있다. 그렇기 때문에 모든 객체는 Object 클래스에서 정의된 equals와 hashCode 함수를 상속받고 있다. equals 정확히 equals를 직역해보면 동일한가라는 뜻이다. 한 번 Obejct 클래스에 정의된 equals 메소드를 살펴보자. //equals 메소드 public boolean equals(Object obj) { return (this == obj); } equals의 구현부를 보면 "this==obj" 로 정의되어있다. 이 말의 즉슨, 2개의 객체가 동일한지 검사한다는 것이고 2개의 객체가 참조하는 것이 동일하냐? 그것을 묻는 것이다. 쉽게 말해 두 개의 객체가 같은 메모리 주소가 맞냐? 그걸 묻는 것이다.. 개발 일지/Java 2022. 12. 18. [Java] public static void main 인 이유? 코테를 볼 때 클래스를 생성을 하고 나면 main 문을 자동완성 시켜서 코드를 짜기 시작한다. 하지만 main문이 왜 저렇게 구성되어 있는지는 깊게 생각해본 적이 없었다. 오늘의 포스팅은 왜 "public static void main(String[] args)" 로 구성되어 있는지 알아보려고 한다. 먼저, JVM은 다들 아시겠지만 Java Virtual Machine 으로 운영체제 독립적으로 자바를 실행할 수 있게 도와주는 녀석이다. JVM 은 먼저 main 이라는 이름이 붙은 메서드를 찾아 프로그램을 시작하도록 설계되어 있다고 한다. 그렇게 때문에 우선적으로 JVM 이 접근할 수 있도록 public 이라는 접근 제한자가 붙여져 있어야한다. public public은 "접근 제한이 없고, 자바 프로젝트.. 개발 일지/Java 2022. 12. 18. [Java] Java 8 / Java 11 버전 별 특징 오늘 포스팅 할 얘기는 Java 8 / Java 11 변화에 대해서 포스팅하려고 한다. Java 9, 10, 12, 13, 14 ...... 등 이런 버전들도 많지만 왜 "8, 11" 이냐????? 먼저 Java 8 / Java 11은 LTS 버전이다 LTS란? LTS(Long Term Support)는 말 그대로 장기 지원되는 버전을 의미한다. 출시 후 8년 동안 업데이트 및 버그 수정을 지원하고 일반 버전과 달리 안정성에 중점을 둔 버전으로 기능 업데이트는 최소한으로 이루어지거나 아예 없는 반면, 보안 업데이트의 지원이 일반 버전보다 훨씬 길다. 그렇기 때문에 서버 등 최신 기능보다 안정성이 중요한 곳에서 많이 쓰이며 기업이나 기관 등에서 기능 업데이트로 인해 이용 중인 다른 소프트웨어가 영향을 받는.. 개발 일지/Java 2022. 12. 17. [Java] ArrayList 동작원리 ArrayList 라는 자료구조는 코딩테스트에 워낙 많이 쓰이기 때문에 모든 자바 개발자들은 익숙한 자료구조일 것이다. ArrayList의 특징으로는 인덱스로 원소를 관리하고 원소를 빠르게 탐색할 수 있다. 하지만 중간에 원소를 추가하거나 삭제하게되면 원소의 인덱스가 밀리거나 줄어들게 되어 성능적인 측면에서 안좋다. 이 정도의 개념은 알테지만 내부적으로 어떻게 동작하는지 모르는 분들이 대부분일 것이다. 필자 또한 그렇다! 배열과 arrayList 차이점은 아래 클릭! 더보기 1. 배열은 크기가 고정되어있지만 arrayList는 사이즈가 동적인 배열이다. 2. 배열은 primitive type(int, byte, char 등)과 object 모두를 담을 수 있지만, arrayList는 object elem.. 개발 일지/Java 2022. 12. 17. [JAVA] JVM 구조와 JAVA의 동작 원리 오늘은 JVM 구조와 동작 원리에 대해서 살펴보고자 한다. JVM 구조 JVM 구조는 크게 클래스 로더(Class Loader), 런타임 데이터 영역(Runtime Data Area), 실행 엔진(Execution Engine), 그리고 가비지 컬렉터(Garbage Collector)로 구성된다. 가비지 컬렉터는 이번 포스팅에서 다루기 복잡하기 때문에 추후 포스팅 하도록 하겠다. 1. 클래스 로더 클래스 로더는 JVM 내에서 자바 클래스 파일을 로딩하는 역할을 한다. JVM은 클래스 로더를 통해 필요한 클래스 파일들을 찾아 런타임 데이터 영역에 저장하게 된다. 클래스 로더는 로딩, 링크, 초기화 과정을 거치며, 클래스 파일의 검증 작업도 수행한다. 2. 런타임 데이터 영역 런타임 데이터 영역은 JVM 내.. 개발 일지/Java 2022. 1. 16. 이전 1 다음 반응형