전체 글 42

JVM 은 무엇인가.

JDK, JRE, JVMJVM을 설명하려면 먼저 JDK에 대해 먼저 설명해야한다.간략하게 설명하면 다음과 같다.JDK : Java로 애플리케이션을 개발하기위한 SDK. 개발할때 필요.JRE : 바이트 코드(정확히는 .class 파일. Java가 아니어도 됨.)를 실행하기 위한 환경.JVM : 바이트 코드를 실행시키는 가상 컴퓨터.질문! 왜 굳이 JDK, JRE를 구분하여 만들었을까요?목적이 다르다.JDK는 개발자용으로 제공하는 소프트웨어고JRE는 실행만을 위한 소프트웨어다.그래서 JDK를 보면 JRE를 포함한 개발도구들이 포함되어있다.우리가 흔히 사용하는 java, javac(컴파일러), jar 같은 명령어들 (bin 경로에 존재하는)이 개발 툴에 속한다. (bin 경로에 있다고 모두 JDK 에 해당하는..

Java 2026.03.11

Java의 탄생

Java 의 탄생.1990년대 초에는 WWW의 성장과 함께 인터넷 시장이 급속도로 성장하게 됨.Java는 Sun Microsystems에서 제임스 고슬링이 원래 네트워크 장치 임베디드 시스템을 위한 소프트웨어 개발 연구 프로젝트로 시작했음.목표는 작고, 신뢰성을 보장하고, 이식 가능하고, 분산 환경을 지원하며, 실시간으로 동작하는 운영 플랫폼을 만드는것.이 프로젝트는 C++로 시작되었으나 여러 문제들을 직면하고 새로운 언어를 만들게됨.그게 Java다.그럼 C++은 어떤 문제가 있었을까?플랫폼 종속성 문제하드웨어·운영체제·GUI 환경이 제각각이라 동일한 프로그램을 여러 버전으로 만들어야 했음.C++은 플랫폼 종속적이었기 때문에 이식성이 떨어졌음.👉 Java는 JVM을 통해 플랫폼 독립성을 확보.메모리 관..

Java 2026.03.11

[네이버 부스트 캠프] 웹/모바일 10기 전체 과정 후기

전체 과정이 끝이 났다. 처음에 이 일정표를 봤을때 2026년 2월은 절대 안올거같았는데 결국 오는구나.후기를 쓰면 감정적것에 대해 쓸것도 엄청 많긴하지만 일단 나는 T니까 팩트 위주로 먼저 살펴보자. 나는 목표를 달성했는가?이는 내가 처음 캠프 시작할때 이루고자했던 목표였다.사실 뭘 썼는지도 기억이 잘 안난다. (작년 6월쯤 작성한거니까...)그래도 이를 참고해 주요한 몇개들을 살펴보자. 주도적인 학습처음과 비교해보면 정말 많이 변했다.이전에는 그저 어디 강의에서 나오는 목차, 책에서는 챕터 위주로만 찾아봤다.심지어 찾아보는 자료들도 한글로 이쁘게 정리해놓은것만 수동적으로 받아들였다.그래서 이해대신 암기를 주로 했던거같다. 부캠을 진행하면서는 처음으로 공식문서란것을 찾아봤다.그 서비스를 만든 사람의 의..

활동 2026.02.11

vsc에서 vim 적용시 한글깨짐과 이동문제 (윈도우11)

vsc에는 vim 이라는 좋은 plugin이 있다.근데 문제는 한글쓸때 버벅임이라던지,한글을 쓰고 분명 영문으로 전환해주고 hj로 이동해주는데 갑자기 한글이 튀어나오는 문제가 발생했다. 먼저 시도해본건 im-select 을 설치해 제어해보려고했다.daipeihust/im-select: 📟 Switch your input method through terminalmac 기준으로는 잘 해결되는듯 싶다. Vim 입력모드 노말모드 전환시 한/영 자동 전환하기 | 김병훈 블로그 근데 나는 잘되는듯 싶다가도 자판 배열의 한글과 영어가 꼬이며 자꾸 버그가 발생했다. 플러그인 재설치부터 vsc 재설치까지 삽질하다가 화나서 그냥 한글을 포기할까도 싶었다. (그래도 영어만 쓸수는 없으니까..) 문제가 되는 상황을 다시 ..

private 2025.07.10

[네이버 부스트 캠프] 웹/모바일 10기 베이직 과정 후기

네이버 부스트 캠프?유명한 기업에서 진행중인 데브 코스들이 있다.그 중에서도 난 네이버에서 운영하는 부스트 캠프에 참여했다. 참여하게된 가장 큰 이유는 AI 시대에 살아남는 개발자를 양성한다는 키워드 때문이었다.며칠전 소위 네카라쿠배에 다니는 유망한 개발자 친구와 이야기를 나눈적이 있다.그 친구 말로는 요즘 AI 발전 속도가 너무나 빨라 개발자가 필요없는 시대가 올거라고 했다.나같아도 그저그런 신입 개발자를 뽑는것보다 AI 솔루션을 활용한 바이브 코딩으로 제품을 생산하는게 싸게 먹힐것이다. 그래서 나는 이러한 작금의 현실속에 어떻게해야 살아남을까라는 생각으로 네이버 부스트 캠프에 참여했다. 공식 페이지들은 다음과 같다.Web·Mobile 메인 부스트캠프 웹·모바일, boostcamp : 네이버 블로그 ..

활동 2025.07.07

Stream API(임시저장용)

Stream 이란?람다식이 편리한 방법 정도라고 생각된다면,스트림은 완전히 새로운 패러다임아다.데이터를 파이프라이닝하여 마치 액체가 흐르듯이 요소들을 처리한다.Stream 도입 배경Stream은 Java 언어에 함수형 프로그래밍을 제공하기 위해 도입되었다. 그렇다면 다시함수형 프로그래밍은 무엇인가?위키백과에서는 다음과 같이 정의한다.함수형 프로그래밍(函數型 프로그래밍, functional programming)은 자료 처리를 수학적 함수의 계산으로 취급하고상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다. 핵심은 수학적 함수다. (이를 순수 함수라고도 한다.)근데 우리는 이미 (프로그래밍에서의) 함수를 사용하고있지 않나?수학적 함수와 프로그래밍의 함수의 가장 큰 차이는 부수효과(side eff..

Java 2024.08.08

vim 기본 명령어 저장

shortcut 을 통일하자.입력모드i : 커서 앞에 입력 (insert)a : 커서 뒤에 입력 (append)o : 커서 아랫줄 입력이동w : 다음 단어b : 이전 단어ctrl+( : 다음 문단ctrl+) : 이전 문단gg : 문서 맨 위G : 문서 맨 아래0: 문장 맨 앞 (home)^ : 공백 제외한 맨 앞$ : 문장 맨 뒤 (end)편집dd : 한줄 삭제2dd : 2줄 삭제dw : 한 단어 삭제diw : 커서에 해당하는 단어 삭제(i는 in)shift+d : 커서 위치부터 문장 맨끝까지 삭제x : 한 글자 삭제yy : 한줄 복제p : 붙여 넣기+p : 윈도우 붙여넣기u : 취소(언두)ctrl+r : 재실행(리두)비주얼모드복사 붙여넣기할때 사용. 드래그 기능이 있음.hjkl 로 이동 가능.v : 한..

private 2024.08.05

[객체지향설계원칙] DIP

DIPDependency Inversion Principle.의존관계 역전 원칙이다.이름에서 느껴지듯 의존관계가 역전된다는 말이다. A->B 처럼 A가 B를 의존한다고 할때AA와 B 사이에 C를 추가해 A,B 모두 새로운 C에 의존한다는 말이다.A-> C  서적에서는 고수준 모델이 저수준 모델을 의존하는 것이 아닌새로운 인터페이스를 추가해 고수준, 저수준 모두 인터페이스에 의존해야한다. 라고 정의되어 있다. 구체적으로 살펴보자.DIP 적용 전공장 클래스에서 여러 일꾼들을 데리고 일을 한다고 해보자.그러면 공장 클래스는 Boy, Girl, Robot 클래스에 의존하게된다.(의존한다는 말은 공장 클래스를 생성하기 위해서는 Boy, Girl, Robot 클래스들이 필요하다는 말이다.) 일꾼들 클래스들은 열심히..

Java 2024.05.31

[객체지향설계원칙] ISP

ISPInterface Segregation Principle.클라이언트에서 인터페이스를 사용할때해당 클라이언트에서 사용할 메서드만 의존해야한다.즉 인터페이스를 범용으로 만들지 말라는 원칙이다. 넓게 보면 SRP(단일 책임 원칙) 범주에 속한다고도 볼 수 있습니다.ISP 적용 전예를들어 다음과 같이 일꾼이 될수있는 인터페이스가 존재합니다.// Workable 인터페이스: 모든 메서드를 포함public interface Workable { void startWork(); void stopWork(); void focus(); void sleep(); void wakeUp(); void eat(); void drink();} 일꾼으로서 필요한 다양한 메서드가 있죠. 그리..

Java 2024.05.31

[객체지향설계원칙] LSP

LSPLiskov Substitution Principle이전 SRP, OCP 와 달리 이름으로 어떤 의미인지 파악하기가 힘듭니다.하지만 핵심은 간단합니다. 하위 클래스가 상위 클래스를 완벽히 대체해야한다.= 상위 클래스의 명세를 하위 클래스가 정확히 이행해야한다.= 상위 클래스를 하위 클래스로 변경해도 정상 동작해야한다. 즉 클래스를 상속했을때 상위 클래스의 동작을 잘 수행해야한다는 말입니다. List 예제우리는 List를 사용할때 타입은 List로 선언하고구현체는 ArrayList or LinkedList 를 사용합니다. (Vector는 단일스레드 환경에서 잘 사용x) 그래서 다음과 같이 특정 모듈을 만들때List 타입으로 선언하여 사용하면실제로 호출할때 ArrayList 인지 LinkedList인지..

Java 2024.05.29