2024/7/9
자바 고급 - Base 모듈
오늘은 자바에서 기본적으로 제공하는 Base 모듈의 클래스 중 Object, System, 문자열, 포장, 수학 클래스에 대해 알아보았다.
자바의 모든 클래스의 루트 클래스인 Object 클래스를 활용하는 방법도 있었다.
Object 클래스의 메서드인 equal과 toString, clone 을 오버라이딩해서 객체를 비교하거나 객체를 복사해서 활용할 수 있었다.
Object 클래스를 잘 쓰고 싶은데 처음 접하는 개념이라 많이 어려웠다.
특히 얉은 복사와 깊은 복사를 통해 객체를 완전히 복사할 수 있는 점에서 Object 오버라이딩을 잘하면 실무에서 큰 도움이 될 거라고 생각했다.
어떤 객체를 가공하기 전에 해당 객체의 원본을 백업하기 위해 깊은 복사를 사용할 수 있을 것 같고 두 개의 전혀 다른 프로젝트를 합병할 때도 유용하게 쓸 수 있어 활용도가 높다고 생각했다.
다시 한번 복습하면서 깊은 복사까지 제대로 알아보자!
2024/7/10
자바 고급 - 제너릭과 컬렉션(1)
오늘은 제너릭과 ArrayList, LinkedList를 배우고 이 둘을 응용해서 Queue와 LinkedList를 직접 구현해보았다.
Object 클래스의 equal(),clone()을 오버라이딩해서 사용했을 때 매번 업캐스팅, 다운캐스팅해야하는 불편함이 있었다. 그리고 이 Object가 비교하려는 클래스가 맞는지 확인해야하는 절차가 필요했다.
하지만 제너릭의 특징인 인스턴스할 때 타입이 결정되고 항상 그 타입만을 제한해서 받는 성질 때문에 Object 클래스의 불편함을 해결할 수 있다는 걸 알게 되었다.
컴파일러가 타입 체크를 하기 때문에 실행 오류를 방지할 수 있어 안정성이 보장되어 아주 기특한 기능이라고 생각했다.
그리고 모든 타입을 받을 수 있고 여러개를 받을 수 있어서 다형성을 구현하고 유연한 코딩이 가능하다는 걸 느꼈다.
Collection에 대해 배웠는데 각 자료구조의 장단점을 고려해서 어떠한 기능에 적합한 자료구조를 선정해서 적절하게 사용해야한다고 느꼈다. (게시글이 잘 안바뀌는 경우 ArrayList 사용, 수시로 삭제, 추가가 되는 댓글창의 경우 LinkedList 사용)
2024/7/11
자바 고급 - 컬렉션(2)
오늘은 Set, Map, Tree를 알아보았다...!
Object 클래스 부터 이해가 조금씩 안가던 문제가 있었는데 오늘 이해하게 되어서 정말 행복했다!

Object 클래스의 clone() 메서드를 사용하면 값 복사(가리키는 주소값이 같음)이 아니라 깊은 복사(가리키는 주소값이 다름, 새로운 객체를 생성)를 하고, 클래스의 깊은 복사를 할 때 필드에 참조 변수가 있다면 (클래스, 배열, 이넘, 인터페이스) 해당 참조 변수도 다시 clone() 해야 값 복사가 되지 않는다.
이 부분을 놓친 채로 코드를 보니 이해가 안되는 것이었다ㅜㅜ
그리고 Map 인터페이스의 여러 클래스를 실습하고 있던 중에 NavigableSet 과 NavigableMap, Iterator 를 사용했는데, 기존 객체의 메서드를 사용할 때와 완전히 다른 모양이라 신기했다.
NavigableSet, NavigableMap, Iterator 인터페이스를 통해 특정 컬렉션의 타입에 구애받지 않고 동일한 방법으로 컬렉션을 사용할 수 있었는데, 이러한 부분도 다형성을 활용한 것이라 할 수 있겠다.
다양한 구현체를 동일한 방식으로 처리하기 때문에 이는 코드를 유연하고 확장 가능하게 만들어 주는 다형성의 장점을 포함하는 것이다.
ArrayList vs Vector
- ArrayList: 동기화가 필요하지 않기 때문에 일반적으로 Vector보다 빠릅니다. 동기화된 메서드를 호출하는 비용이 없기 때문에 단일 스레드 환경에서 더 나은 성능을 보입니다.
- Vector: 모든 메서드가 동기화되어 있어, 멀티스레드 환경에서는 안전하지만 동기화 비용으로 인해 단일 스레드 환경에서는 성능이 떨어집니다.
- ArrayList: 기본적으로 배열 크기를 50%씩 증가시킵니다. 이는 메모리 사용의 효율성을 높이고, 빈번한 배열 확장을 피할 수 있게 합니다.
- Vector: 기본적으로 배열 크기를 100%씩 증가시킵니다. 이는 큰 데이터 세트를 다룰 때 메모리 낭비가 발생할 수 있습니다.
2024/7/12
자바 고급 - Comparable/Comparator & 람다
오늘은 Comparable 과 Comparator를 사용해보며 두 인터페이스의 특징을 알아보았다.
컬렉션 객체와 같이 쓰다보니 모르는 부분이 계속 나오더라..오늘이 공식 문서와 API를 가장 많이 찾아본 거 같다..!
그리고 끝나고 나서 스터디를 한 것이 엄청 도움이 많이 되었다.
람다식은 사용법이 어려웠는데 아주 아주 아주 ! 편리한 좋은 기능인 거 같다ㅎㅎ 자바 8부터 도입되었다고 하는데 람다식이 있고없고의 차이가 정말 크다는 것을 간단한 코딩인데도 알 수 있었다.
이번 주말에는 컬렉션 중 헷갈리는 부분, TreeSet의 구조를 찾아보고 정올 알고리즘 문제를 풀면서 컬렉션 객체에 대한 감을 잡아야겠다고 생각했다. 그리고 이번 주말에도 과제가 아주아주 많다.
토요일에 운전 연수 받으면 시간이 정말 후딱 가서 아침부터 부지런하게 움직여보자..!
'주간 랩업 > [SSG] JAVA 기반 백엔드 개발 과정' 카테고리의 다른 글
| [7주차] 데이터베이스 1 - 5일차 (0) | 2024.07.27 |
|---|---|
| [6주차] 자바 고급 5 - 9일차 (0) | 2024.07.19 |
| [4주차] 자바 베이직 14일 - 18일 (0) | 2024.07.08 |
| [3주차] 자바 베이직 9일차 - 13일차 (0) | 2024.06.29 |
| [2주차] 자바 베이직 4일차 - 8일차 (0) | 2024.06.22 |