본문 바로가기

Java & Kotlin33

상속 vs 컴포지션 - 객체 간의 관계를 나타내는 두 가지 방법 목차상속컴포지션차이점 (상속 vs 컴포지션)결론 상속과 컴포지션은 객체지향 프로그래밍에서 객체 간의 관계를 나타내는 두 가지 다른 방법으로, ‘적절한 상황’에서 ‘적절한 방법’을 사용해야 한다.1. 상속상속은 기존 클래스의 기능을 재사용하여 새로운 클래스를 만드는 방법이다.새로운 클래스는 기존 클래스의 필드와 메소드를 상속받아 사용할 수 있으며, 이를 확장하여 새로운 기능을 추가할 수 있다.상속은 is-a 관계를 나타내며, 상위 클래스와 하위 클래스의 관계를 나타낸다.장점코드의 재사용을 통해 중복을 줄인다.확장성이 증가한다.클래스 간의 계층적 관계를 구성함으로써 다형성을 구현할 수 있다.문제점1. 캡슐화를 위반할 수 있다.부모 클래스의 구현 세부사항을 자식 클래스가 직접 접근할 수 있기 때문에 캡슐화 원.. 2023. 3. 13.
__Optional – orElse() vs orElseGet()__ 목차Optional 배경Optional 이란?orElse() vs orElseGet()Supply interface성능영향측정결론 1. 배경시작하기에 앞서, 개발자 세상에선 엄청나게 무서운 오류 NPE가 존재한다.개발자는 기계가 아니고 사람인지라 Null 체크 하는 부분을 쉽사리 뺴고 코드를 작성하곤 한다.기존 조건문을 통해 Null 체크하는 부분을 자바 8 이후 부터 좀 더 명시적으로 체크하는 Optional이 추가 되었다. 2. Optional 이란?객체를 편리하게 처리하기 위해서 만든 클래스예상치 못한 NPE를 제공되는 메소드로 간단히 회피가 가능.즉, 복잡한 조건문 없이도 널(Null) 값으로 인해 발생하는 예외 처리. 3. orElse() vs orElseGet()orElse()값이 존재하면 값.. 2023. 3. 11.
해시충돌 발생시 JAVA에서는 어떻게 처리할까? 목차HashMap이란?해시충돌이란?해시충돌이 왜 발생하는가?해시 충돌 해결 방법Java에서는 해시 충돌을 어떻게 해결했을까?1. HashMap이란?정의Key - value 형태로 데이터를 저장.하나의 Key는 하나의 value에 맵핑됨.Key는 고유해야만 한다.내부구현배열(Array)을 사용하여 구현.배열에 저장하기 위해 key의 hash를 구해야함.hash function으로 key의 hash를 구함.구해진 hash를 배열사이즈로 modular(%)란 값을 index로 사용// hf : hash function // M : hash_map size array[hf(key) % M] = value // hf(key) -> hash // hf(key) % M -> index2. 해시충돌이란?1. 서로 다른.. 2023. 3. 10.
equals()를 오버라이드 하면 hashCode()도 같이 재정의 해야한다? 목차equals()란?hashCode()란?equals()만 재정의할 경우hashCode 재정의equals() 재정의 한다면 hashCode()도 재정의 해주자! 자바의 모든 클래스는 Object 클래스를 상속 받는다.Object 클래스에는 equals()와 hashCode()라는 메소드가 선언됨.1. equals()란?참조값이 같은지 판단한다. 즉 동일 객체인지를 확인하는 기능.public class Object { public boolean equals(Object obj) { return (this == obj); } }2. hashCode()란?객체의 해시코드를 반환하는 메서드Object클래스의 hashCode()는 객체의 주소를 int로 변환해서 반환public class Object { pub.. 2023. 3. 9.
컴파일언어 vs 인터프리터언어 자바의 정체가 무엇인가? 목차컴파일언어인터프린터언어자바는 왜 두개의 고급언어를 가지고 있는건가?JIT 컴파일러1. 컴파일언어소스 코드를 작성한다.컴파일 프로그램을 이용하여 컴파일한다.실행파일이 만들어진다.실행 파일을 실행시킨다.속도가 빠르다Java, C++, Visual C++, Object C 등이 있다.2. 인터프리터언어소스 파일을 해석 엔진 프로그램(interpreter)을 이용해 소스를 한 줄 씩 실행한다.실행파일이 만들어지지 않는다.속도가 느리다.Java, 자바스크립트 등이 있다.3. 자바는 왜 두개의 고급언어를 가지고 있는건가?JVM이 클래스의 바이트코드를 운영체제에서 실행 할 수 있는 2진코드로 변경한다.즉, 각각의 운영체제 환경에 맞게 CPU가 읽을 수 있도록 변환해준다.위 기능이 가능하다는건 비용이 적게 든다는 .. 2023. 3. 8.
JVM이 뭐하는 녀석이냐? (JDK, JRE, JIT, GC) 간략 정리 목차JVMJREJDK자바JVM 언어JVM 구조클래스 로더 1. JVM(Java Virtual Machine)자바 가상 머신으로 자바 바이트 코드(.class 파일)을 OS에 특화된 코드로 변환(인터프리터와 JIT컴파일러)하여 실행한다.바이트 코드를 실행하는 표준(JVM 자체는 표준)이자 구현체(특정 벤더가 구현한 JVM)다.JVM 스팩: https://docs.oracle.com/javase/specs/jvms/se17/html/JVM 벤더: 오라클, 아마존, Zul, …특정 플랫폼에 종속적.2. JRE(Java Runtime Environment): JVM + 라이브러리자바 애플리케이션을 실행할 수 있도록 구성된 배포판.JVM과 핵심 라이브러리 및 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스.. 2023. 3. 7.