💬 언어

💬 언어

[JVM] Java Virtual Machine Architecture

JVM을 좀 더 깊게 학습하기 위해서 포스팅했습니다. (Medium에 엔지니어분께서 작성하신 글을 번역한 글로 보시면 됩니다.) 자바가 내부에서 실제로 작동하는 방식을 알아보려고 합니다. JVM 아키텍처에 대해서 얘기해보겠습니다. 🟩 01. 클래스 로더 서브시스템 (Class Loader Subsystem) JVM은 RAM에 띄어져 있습니다. 자바의 동적 클래스 로딩 기능을 이용해서 런타임 중에 클래스 로더 서브시스템을 통해 클래스 파일을 RAM에 띄웁니다. 런타임에 클래스를 처음 참조할 때 클래스 파일(.class)을 로딩, 연결, 초기화 합니다. 🟧 01-01. 로딩 (Loading) 컴파일된 클래스(.class)를 메모리에 로드하는 것은 클래스 로더의 주요 역할입니다. 클래스 로딩 프로세스는 메인 ..

💬 언어/이펙티브 자바

[이펙티브 자바] Item 23 - 태그 달린 클래스보다는 클래스 계층구조를 활용하라

item 23 태그 달린 클래스보다는 클래스 계층구조를 활용하라 01. 태그 달린 클래스 태그 : 클래스가 어떤 타입인지에 대한 정보를 담고있는 멤버 변수 태그 달린 클래스는 두 가지 이상의 의미를 가질 수 있다. 현재 표현하는 의미를 태그 값으로 알려주는 클래스를 태그 달린 클래스라고 한다. 아래 BoardGame 클래스를 보면 세 가지 필드가 존재한다. gameType, cards, board 이때 BoardGame이 어떤 타입인지에 대한 정보를 갖는 "GameType"을 태그라고 한다. public class BoardGame { enum GameType { BLACKJACK, CHESS } // 태그, 사람이 어떤 게임을 갖고 있는지 private GameType gameType; // 블랙잭 게..

💬 언어

동일성과 동등성의 차이

동일성과 동등성의 차이 자바에서 무언가 같은지 비교할 때 어떻게 했을까 ? ==, equals()를 이용했다. 🟧 동일성 (identity) 그렇다면 ==과 equals()의 차이는 뭘까 ? 둘 다 동일하게 메모리 주소값을 비교하고 있다. ==, 재정의하지 않은 equals 동일성 검사 : 메모리 주소값을 비교한다. public class Object { public boolean equals(Object obj) { // equals는 내부에서 ==를 이용한다. // 주소가 동일한지 비교한다. return (this == obj); } } 🟧 동등성 (equality) equals는 왜 있는걸까 ? 주소값을 비교가 아닌 객체의 값을 비교하고 싶을 때 사용할 수 있다. (객체의 값이 동일할 경우라면 두 ..

💬 언어

equals 와 hashcode 를 함께 정의해야 하는 이유는?

equals 와 hashcode 를 함께 정의해야 하는 이유는? 🟧 equals ? Object 클래스에 있는 equals() 메서드. 두 개의 객체가 동일한지 확인하기 위해 사용한다. equals() 메서드를 보면 두 객체가 동일한 메모리 주소를 가리키는지 확인하고 있다. public class Object { public boolean equals(Object obj) { // 동일한 메모리 주소인지 확인한다. return (this == obj); } } 🟢 case01. equals 오버라이딩 하지 않은 경우 Name 객체의 내부 데이터가 같아도 equals로 비교하면 메모리 주소가 다르다. 이름01과 이름02는 동일하지 않다고 판단된다. @DisplayName("같은 값을 가져도 동일하지 않다고..

💬 언어/이펙티브 자바

[이펙티브 자바] Item 22 - 인터페이스 타입을 정의하는 용도로만 사용하라

Item 22 인터페이스 타입을 정의하는 용도로만 사용하라 🟧 인터페이스는 타입을 정의한다. 인터페이스를 사용하면 메서드, 필드 등을 선언해야 한다. 인터페이스를 구현하는 클래스나 객체가 반드시 가져야하는 요구사항(시그니처 및 타입)을 명시해야 한다. 이러한 용도로서 인터페이스는 타입을 정의한다 할 수 있다. 아래는 interface Move, class Piece 가 있다. Piece는 Move의 구현체로 move() 메서드의 시그니처를 가지고 메서드를 구현한다. @DisplayName("인터페이스는 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할을 한다.") @Test void interface_reference() { // Move를 구현한 Piece를 참조할 수 있다. final Move m..

💬 언어/이펙티브 자바

[이펙티브 자바] Item 20 - 추상 클래스보다는 인터페이스를 우선하라

Item 20 추상 클래스보다는 인터페이스를 우선하라 🟧 추상 클래스, 인터페이스 - 상속과 확장 추상 클래스 다중 상속이 불가능하다. 한 번 상속하면 이후에 확장하기 힘들다. 인터페이스 다중 상속이 가능하다. 기능을 추가하기 용이하다. 🤔 그러면 계속해서 확장가능한 인터페이스만 사용하면 되잖아 ?? (제목부터 인터페이스를 우선시하라는데 ??) 왜 그런 말이 나왔는지 일단 더 알아보자구요 ~ 🙅‍♂️ 먼저 추상 클래스와 인터페이스의 목적은 다릅니다. 🙅‍♂️ 🟧 목적이 다르고 차이점이 존재한다. 추상 클래스 상속받아 구현된 기능을 이용하고, 확장시킨다. 인터페이스 구현을 강제하기 때문에 같은 동작을 보장한다. 추상 클래스는 기존 기능을 이용해서 확장하고 인터페이스는 구현을 강제한다고..? 추상 클래스와 ..

💬 언어/이펙티브 자바

[이펙티브 자바] Item 49 - 매개변수가 유효한지 검사하라

Item 49 매개변수가 유효한지 검사하라 메서드나 생성자에 입력되는 매개변수들이 정상적인 데이터인지 검사하는 것은 중요합니다. 매개변수 검사를 제대로 하지 않는다면 다음과 같은 결과가 발생할 수 있습니다. 예상치 못한 동작이 발생할 수 있다. 잘못된 결과를 반환할 수 있다. 예외를 던지면서 애플리케이션 동작이 중단된다. 잘못될 수 있는 상황들을 예시로 보겠습니다. 🟧 예상치 못한 동작이 발생할 수 있다. 메서드는 정상적으로 실행됐으나 다른 객체를 잘못된 상태로 바꿔놓을 수 있습니다. Deck에서 카드를 뽑을 때 문제 없이 카드를 가져와야 정상적인 동작입니다. 하지만 덱을 생성할 때 빈 컬렉션이 매개변수로 들어갔습니다. Deck deck = new Deck(initData()); 아무런 문제가 없다고 생..

💬 언어/이펙티브 자바

[이펙티브 자바] Item 32 - 제네릭과 가변인수를 함께 쓸 때는 신중하라

 Item 32 제네릭과 가변인수를 함께 쓸 때는 신중하라 🟧 가변인수 (Varargs) 가변인수는 필요에 따라 매개변수의 개수를 동적으로 조정할 수 있는 기능입니다. 덕분에 varargs 메서드를 n번 오버로딩 하지않아도 됩니다. 가변인수 사용하는 방법은 타입... 매개변수명 으로 사용하면 됩니다. 가변인수는 파라미터로 넘겨진 값들을 컴파일러가 컴파일 타임에 배열을 만들어 처리해주는 방식입니다. 🟧 제네릭과 가변인수 위에서 요구사항이 들어왔습니다. "같은 타입의 데이터를 List로 반환하는 메서드를 만들어라." 기존에 만들어져 있는 Collection의 Api를 이용해도 되겠지만 직접 차근차근 구현 해보면서 제네릭과 가변인수를 사용하게 되는 과정을 보겠습니다. 버전 01. asListV1 버전 02...

💬 언어/이펙티브 자바

[이펙티브 자바] Item 26 - Raw Type은 사용하지 말라

Item 26 Raw Type을 사용하지 말라. ✅ Raw Type? Raw Type은 제네릭 타입에서 타입 파라미터를 사용하지 않은 때를 의미합니다. 오라클 공식 문서를 보면 다음과 같이 기재되어 있습니다. 4.8. Raw Types To facilitate interfacing with non-generic legacy code, it is possible to use as a type the erasure (§4.6) of a parameterized type (§4.5) or the erasure of an array type (§10.1) whose element type is a parameterized type. Such a type is called a raw type. 제네릭을 사용하지 ..

hyena0608
'💬 언어' 카테고리의 글 목록