Java 5

예술적인 코드 모음 (계속 업데이트)

주관적입니다.HashMap 클래스의 put() 메서드의 구현부 목적 : 튜닝. Hash 자료구조는 O(1) 성능을 목표로함. 읽고 쓰기가 빈번한 작업을 최소화할 필요있음방법 : 인스턴스 변수 읽기(접근) 1번으로 줄임.인스턴스 변수 접근 최소화하기 위해 바로 로컬 변수 (tab)에 대입.조건식을 항상 검사하므로, tab 에 table 참조변수에 저장된 주소가 대입됨. 첫 의문증 : 왜 대입문을 if문 조건식 내부에 작성했나? 밖에 있으면 안되나? 실제 Key와 Value를 저장하는 1차원 배열과 링크드 리스트로 구성된 객체 자체를 가리키기 위해 putVal() 메서드 내부에서 tab에 table 참조변수에 저장된 주소를 대입해야한다. 근데 코드 봤는데 'tab = table' 대입문이 없었다. 자세..

Java 2025.04.29

[Java] 바이트코드로 분석하는 new T()가 안되는 이유

Intro제네릭 타입 변수가 new T()로 인스턴스를 생성할 수 없는 이유를 자바의 바이트 코드 관점에서 분석해보자. 제네릭 클래스가 아닌 클래스의 new 키워드 적용new 키워드가 어떻게 생성할 클래스를 알고 있는지 확인할 코드 예제이다. 아래 코드를 컴파일 한 후 NewKeywordTest.class 클래스 파일을 만든다. package CH12_Generics_Enums_Annotation;public class NewKeywordTest { public static void main(String[] args) { String str; str = new String("HELLO TEST"); }} 'javap -v 클래스파일명' 명령어를 통해 (*.clas..

Java 2025.04.27

ArrayList 클래스의 remove() 메서드 파해치기

Intro자바의 정석 기초편의 ArrayList 실습을 진행하다, ArrayList 클래스의 오버로딩된 remove(Object o) 메서드를 직접 까보던 중에 'remove의 Object o 인자로 new Integer(1)을 줬는데, 어떻게 ArrayList에 저장된 new Integer(1) 객체와 주소 비교를 해서 지우는 거지?' 라는 코드를 보고 시작된 것이다. 사실 내용(1)을 비교하는 거라면 이해가 갔을 것이다. 하지만, 실제 ArrayList.java에 존재하는 'public boolean remove(Object o)' 는 Object 클래스의 equals()로 ArrayList에 저장된 Integer 객체와 인자로 받은 Integer 객체의 주소를 비교하고 있다. 문제 [28번 라인]..

Java 2025.04.15

디버깅으로 알아보는 변수 초기화 실행흐름

왜 디버깅으로 초기화 실행 흐름을 확인하게 되었나? 과제로 자바의 정석 연습 문제를 풀다가 객체를 그림으로 그려보고, '상속 관계인 두 클래스에 중복된 멤버가 있을 때 어느 클래스 타입 참조변수로 접근하느냐에 따라 값이 달라질 수 있다'를 이해는 하고 있었느나, 문제를 풀어보니 생각한 답과 코드 실행결과가 달랐다. 초기화 순서는 제대로 이해한 상태이다.  내가 생각한 답은 1000, 실행결과는 200 이다.   문제[ 연습문제 7장 7번 ] 다음 코드의 실행했을 때 호출되는 생성자의 순서와 실행결과를 적으시오.package CH07_OOP2.Excercise;class Parent { int x = 100; Parent() { this(200); } Parent(int ..

Java 2025.04.11

[커널아카데미] 백엔드 12기 2주차 - 자바의 정석 CH06.객체지향프로그래밍1

1. 객체지향언어정의기본 프로그래밍 언어에 규칙을 추가한 것 규칙 종류 - 41) 캡슐화2) 상속3) 추상화4) 다형성 프로그램앞으로 컴퓨터에서 실행될 명령문 집합 프로그래밍프로그램을 만드는 것 목적변경에 유리 방법1) 그룹화(분리)① 단일 책임 (1 책임)ex. 메서드는 한가지 일만 한다.② 변하지 않는 것 / 변하는 것- 성격이 다른 것은 분리한다.③ 중복된 것- 코드와 데이터 중복은 메서드를 통해 제거2) 관계 그룹화의 목적관련있는 그룹을 묶어서 더 복잡한 것들을 처리하기 위함역사C언어는 하드웨어와 소프트웨어가 동시에 발전하여 하드웨어를 변경하는 것에 어려움이 있었음.객체지향프로그래밍( OOP)는 목표는 하드웨어에 독립적으로 변경에 유리하게 만들고자 탄생이 되었음.코드 변경에 유리하고자 캡슐화, 상..

Java 2025.04.06