전체 글 210

[F-Lab 모각코 페이백 9일차] 해시맵(HashMap), 해시(Hash)

학습 목표 해시맵(Hash Map) TIL 해시맵(Hash Map) 메서드 equals() hashCode() 해시 해싱 해시 충돌 해시 충돌 해결 기법 오픈 어드레싱(Open Addressing) 체이닝(Chaining) 해싱이 뭐야? "해싱"은 데이터의 크기와 상관없이 고정된 크기의 고유한 값을 생성하는 과정을 말합니다. 해시 함수는 입력으로 데이터를 받아서 해시 값을 출력합니다. 이 고유한 해시 값은 원래의 데이터를 대표하며, 원래 데이터와 비교해 상당히 작은 고정된 크기를 가집니다. 해싱은 특히 데이터 저장 및 검색을 빠르게 수행하는데 유용합니다. 예를 들어, 해시맵 같은 데이터 구조는 키를 해시 함수에 통과시켜 결과 해시 값을 사용하여 값을 저장하고 검색합니다. 이렇게 해서 빠르게 특정 키와 연..

[F-Lab 모각코 페이백 8일차] 얕은 복사, 깊은 복사, 추상클래스와 인터페이스 차이점

오늘 학습 계획 팀코칭 질문으로 학습 TIL 얕은 복사 깊은 복사 추상클래스와 인터페이스 차이점 원시 타입(primitive type)과 참조 타입(reference type) 얕은 복사(Shallow Copy) 얕은 복사(Shallow Copy): 얕은 복사를 하면 원본 객체의 필드 값이 복사본에 그대로 복사됩니다. 원시 타입의 필드에 대해서는 문제가 없지만, 참조 타입의 필드에 대해서는 원본 객체와 복사본이 같은 객체를 참조하게 됩니다. 즉, 복사본에서 참조 타입의 멤버를 변경하면 원본 객체의 해당 멤버도 변경되고, 반대로 원본에서 변경하면 복사본에 영향을 미치게 됩니다. 이해가 잘 안되어서 좀 더 알아보니 얕은 복사(Shallow Copy)"는 원본 객체의 필드 값을 복사본에 그대로 복사합니다. 원..

[F-Lab 모각코 챌린지 7일차] C1 컴파일러, C2 컴파일러, 인라이닝, 루프 언롤링

학습 목표 팀코칭 질문으로 학습 TIL JIT 컴파일러 C1 컴파일러 핫스팟 C2 컴파일러 오버헤드 발생 감소 인라이닝 루프 언롤링 오버헤드 함수 호출 JIT 컴파일러 (C1C2 컴파일러) Java는 기본적으로 JIT (Just-In-Time) 컴파일러를 이용하여 프로그램을 실행합니다. 이 컴파일러는 Java 바이트코드를 런타임에 기계 코드로 컴파일하는 역할을 합니다. 이 과정은 런타임 중에 발생하므로, 프로그램의 성능을 향상시키는 데 큰 역할을 합니다. Oracle의 HotSpot JVM에서는 JIT 컴파일러가 두 가지, 즉 C1 (Client) 컴파일러와 C2 (Server) 컴파일러로 나뉩니다. 이 두 컴파일러는 각각 특정한 상황에 더 잘 맞도록 설계되었습니다. C1 컴파일러는 메소드가 처음 호출될..

[F-Lab 모각코 챌린지 6일차] 자바 예외 처리, Checked Exception, Unchecked Exception

수정일자 2023.5.23 학습 계획 자바 예외 처리 팀코칭 질문으로 학습 TIL 자바 예외 처리 Checked Exception throw throws 절 Unchecked Exception 여러가지 에러 종류 논리 에러 (Semantic error) 파스 에러 (Parse Error) 구문분석 파싱 토큰 체크드 예외(Checked Exception) 이러한 예외는 컴파일러가 컴파일 시점(코드를 실행하기 전에)에 체크합니다. 체크드 예외는 주로 외부 시스템과 상호작용하는 코드에서 발생하는 예외입니다. 예를 들어, 파일 I/O 작업, 데이터베이스 연결 등에서 발생하는 예외입니다. 체크드 예외가 발생할 수 있는 코드를 작성할 때는 반드시 이러한 예외를 처리해야 합니다. 이를 처리하는 방법은 두 가지가 있..

[F-Lab 모각코 챌린지 6일차] 자바 예외 처리, 기타 개념

오늘 학습 계획 자바 예외 처리 TIL 자바 예외 처리 컨텍스트 스위칭 JVM 쓰레드 개념과 OS 쓰레드 자바 예외처리에는 에러를 예측 할 수 있는 경우에 하는 에러 처리법이 있고 이 예측 할 수 있다는 말은 항상 에러가 발생한다는 건 아니고 프로그래밍 상 에러가 발생 할 수 있는 경우라 프로그래머가 예외 처리를 하는 것이 정형화된 경우를 Checked Exceptions이라고 한다. 원시 타입, 레퍼런스 타입의 기본값에는 원시 타입인 경우 리터럴 값이 대체로 초기값으로 사용되고, 레퍼런스 타입의 기본값은 대체로 null이 사용된다. 레퍼런스 타입은 어떤 변수에 메모리 참조 주소를 가지고 있으면 된다. 원시 타입은 자바의 기본 자료형이다. JVM 쓰레드 개념과 OS 쓰레드 개념은 쓰레드라는 단어는 똑같지..

[F-Lab 모각코 챌린지 5일차] 쓰레드 안전, Final, Static

오늘의 학습 목표 Thread Safety에 대해 설명 하시오 (키워드: lock, synchronized, deadlock, ThreadLocal, etc) Static, Final 키워드에 대해 설명 하시오 (키워드: 사용이유, 장단점, etc) TIL Thread Safety 스레드 안전성(thread safety)은 여러 스레드가 동시에 코드의 특정 부분을 실행할 때 프로그램이 예상한 대로 동작한다는 것을 의미합니다. 스레드 안전성은 공유 데이터의 일관성을 유지하고, 예기치 않은 버그를 방지하기 위해 중요합니다. 여러 스레드가 동시에 같은 데이터에 액세스하려고 하면 데이터 무결성 문제가 발생할 수 있습니다. 예를 들어, 한 스레드가 데이터를 읽는 도중에 다른 스레드가 동일한 데이터를 수정하면, 첫..

[F-Lab 모각코 챌린지 4일차] 제네릭, 컬렉션

오늘의 학습 목표 제네릭 Java Generic (키워드: 타입 파라미터, wildcard, type erasure, 장/단점, etc) Java Collection (키워드: Set, Map, List, Synchronized*, Concurrent*, etc) Thread Safety (키워드: lock, synchronized, deadlock, ThreadLocal, etc) Static, Final (키워드: 사용이유, 장단점, etc) 제네릭 제네릭 코드 간단한 예시 class MyArray { T element; void setElement(T element) { this.element = element; } T getElement() { return element; } } 위 코드에 대해 ..

[F-Lab 모각코 챌린지 3일차] 함수형 프로그래밍

오늘의 학습 목표 팀코칭에서 나는 뭐라고 답하지 답변하며 학습 자바의 신 2권 chapter 20 읽기 TIL 함수형 프로그래밍 팀코칭을 하다가 함수형 프로그래밍에 대한 개념에 대해 설명해 보라고 해서 알아보다가 정의만 보면 도저히 이해가 되지 않고 예시코드를 보긴 했는데 당장 이해가 되진 않았는데 어디서 본 듯한 꼴이였다. import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class FunctionalProgrammingExample { public static void main(String[] args) { List numbers = Arrays.asList(1, 2, 3, 4, 5, 6,..

[F-Lab 모각코 챌린지 2일차] 객체는 무엇이고 객체 지향 프로그래밍은 무엇인가? (4가지 특성)

오늘 학습 계획 자바의 신 2권 19 -21 chapter 읽기 (19장 학습) 코칭팀 ‘나의 대답은?’ 세션 답변하면서 학습 TIL 컴퓨터가 2진법을 사용하는 이유 표현범위에서 양수가 -1표현범위를 갖는 이유 - (2의 보수법의 경우 학습) CPU가 I/O 작업의 요청이 있을때 처리하는 방법 JRE와 JDK의 차이 (자바의 신) 자바 버전 별 변화점 (자바의 신) GC와 JVM부분 복습 (자바의 신) 객체지향 프로그래밍에 관해 학습 진행중 객체란 무엇이며 객체지향 프로그래밍은 무엇인가? 상속 다형성 캡슐화 절차지향적 프로그래밍과 차이점 객체란? 객체는 현실 세계의 사물이나 개념을 프로그래밍에서 사용할 수 있는 데이터와 동작(메소드)을 포함하는 소프트웨어 구성 요소입니다. 객체는 속성(attribute)..

[F-Lab 모각코 챌린지 1일차] 객체지향 프로그래밍, Garbage Collector, JVM 구조

오늘의 목표 객체지향 프로그래밍 JVM 구조 자바 Garbage Collector 동작 과정 객체지향 프로그래밍 캡슐화(Encapsulation): 객체의 속성과 메소드를 하나의 단위로 묶는 것입니다. 이를 통해 객체의 내부 구현을 외부로부터 숨기고, 외부에서는 객체의 메소드만을 사용하여 작업을 수행할 수 있습니다. 상속(Inheritance): 기존 클래스의 속성과 메소드를 새로운 클래스에 물려주는 것입니다. 이를 통해 코드의 재사용성이 증가하고, 중복 코드를 줄일 수 있습니다. 다형성(Polymorphism): 한 가지 인터페이스를 가지고 여러 가지 구현을 사용할 수 있는 기능입니다. 이를 통해 프로그램의 확장성과 유연성이 향상됩니다. 추상화(Abstraction): 복잡한 시스템을 간단한 개념으로 ..