분류 전체보기 49

[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

[커널아카데미] 백엔드 12기 5주차 - 회고 및 공부한 내용 정리

회고[커널아카데미] 백 Intro이번 주는 낯선 개념을 많이 배워서 틀을 세우는데 시간이 생각보다 오래 걸린 듯하다. 빨리 잊어버리고 바로 복습하는 것의 중요성을 느낀 주였다. # 낯설거나 어려운 개념은 자주 많이 봐서 납득당하기 자바를 배울 때 지네릭, 람다와 스트림, 입출력 부분을 깊게 공부하지 않아서 수업에서 배울 때 이해 되는 것 같다가도 천천히 다시 볼 때는 궁금증이 계속 생겼다. 특히 규칙은 받아들여야 하는데 머릿속에 들어가 있지 않으면 다음 내용을 공부하면서 왜 안될까? 라는 생각 때문에 진도 나가는데 차질이 있었다. 예시로, Ch15.입출력에서 '스트림' 자체가 모호하게 다가왔는데 계속 '입력 스트림을 통해 자바 애플리케이션으로 데이터를 가져옴.' 과 같이 주석에 작성하면서 공부를 했다..

회고 2025.04.27

[커널아카데미] 백엔드 12기 4주차 - 회고 및 공부한 내용 정리

Intro이번 주는 Collection Framework 진도를 나가면서 클래스와 메서드의 타입과 상속으로 인한 오버라이딩이 어떻게 되는지 궁금하여 소스코드를 들여다 보는데 많은 시간을 소요했다. 그래서 진도를 나가는데 차질이 생겨서, 수업을 들으면서도 조바심이 났던 일주일이었던 것 같다. # 항상 진도가 우선이다.공부를 하다가 궁금증이 생기면 이를 깊게 파고들어 해결하는 습관이 있는데, 진도를 나갈 것이 없다면 좋은 습관이라고 강사님께서 말씀해주셨다. 하지만, 진도를 다 나가지 않은 상태에서 Java API를 구체적으로 보는 것은 우선 순위를 따졌을 때 좋지 않다고 하셨다.또한 이번 주 피어세션에서 나의 학습 고충을 말씀 드렸더니, 1) 너무 궁금해서 다음 일을 못하겠다면, 일주일에 깊게 해결할 궁..

회고 2025.04.20

[Operating System] '동기화 되어있다'는 게 뭐예요?

Intro자바 수업을 들으면서 '어떤 클래스가 동기화 되어있다.' 라는 말을 자주 들었다. 이에 깊게 생각하지 않고 공부를 하던 중 다음 문제 때문에 StringBuilder를 보다가 동기화가 나와서 '동기화 되어있다' 의 정확한 의미를 알고자 글을 작성하게 되었다. 궁금해진 이유StringBuilder의 동기화 되어있다는게 뭘까?HashSet 클래스에 toString() 메서드가 오버라이딩 되어있지 않다. 그럼 어디에 toString()이 오버라이딩 되어있기에 저장된 값이 '[ 1, 3, 2 ] 처럼 대괄호로 값을 출력할까'에 대한 궁금증으로 조상 클래스를 타고 가보니 AbstractCollection 클래스에서 toString()이 오버라이딩 된 것을 확인했다. 'StringBuilder를 쓴 이..

Operating System 2025.04.17

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

[커널아카데미] 백엔드 12기 3주차 - 회고 및 공부한 내용 정리

Intro 커널 아카데미 3주차를 접어들면서 공부하는 습관이 익숙해졌다. 학습 시간을 더욱 늘리고 싶은데 7시만 되면 진이 빠져서 체력을 늘리는게 필요하다는 생각이 많이 드는 시점이다. 한 주를 지내면서 느낀점은 다음과 같다.   느낀 점# 기초가 있어야 응용이 되는구나온라인 강의와 실시간 강의를 듣고 실습하는 것만으로는 부족하다. 자바의 정석 책을 이해가 될 때까지 보고 그 다음에 실습을 하나하나 진행하다 보니, 뒷 내용을 봤을 때 앞에서 한 얘기가 연결되어 이해하는 데 도움이 되었다. 특히 실습하면서 응용이 되는 것 같다. # 이론과 코드로 보는 것은 다르다자바의 정석 연습문제를 풀다가 내가 생각한 답과 실행결과가 달라서 왜 다른가에 대한 답을 GPT에게 바로 얻고 싶지 않고, 수업에서 배운 내용을 ..

회고 2025.04.13

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

왜 디버깅으로 초기화 실행 흐름을 확인하게 되었나? 과제로 자바의 정석 연습 문제를 풀다가 객체를 그림으로 그려보고, '상속 관계인 두 클래스에 중복된 멤버가 있을 때 어느 클래스 타입 참조변수로 접근하느냐에 따라 값이 달라질 수 있다'를 이해는 하고 있었느나, 문제를 풀어보니 생각한 답과 코드 실행결과가 달랐다. 초기화 순서는 제대로 이해한 상태이다.  내가 생각한 답은 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

[커널아카데미] 백엔드 12기 1주차 - Git, Github 기본 원리 및 명령어 사용 방법

Git 이란?정의 분산 버전 관리 시스템- 분산 : 소스코드가 여러 곳에 퍼져있는 형태 - 버전 관리 : 이전 버전으로 rollback하기 위하 history 관리 원리  내용 기반으로 숫자로 변환(임베딩)해 해시값으로 파일을 관리내용이란 학생 이름과 성적이 담긴 텍스트 파일 'student_score.txt' 가 있을 때, 'Alice' : 90, 'Bob' : 80의 내용을 의미한다.git은 파일관리할 때 이름이 같은 파일이어도 파일 내용으로 비교파일이 1G 일 때 어떻게 비교할것인가? 유사성을 확인파일내용(텍스트)을 숫자로 바꿔 연관성을 비교GIT의 경우 내용이 같은지만 확인해시값 및 실제 데이터(내용)들은 .git 폴더의 objects 폴더 내에 압축된 상태로 저장된다.  [참고: https://..

Git 2025.03.29