전체 글 168

[TIL] 코드스쿼드 2022 백엔드 28일차 회고(6주차) - 객체의 역할과 책임

오늘은 무슨 일이? - 객체의 역할과 책임 저는 지금까지 앞으로 생길 수 있는 갑작스런 변경에 유연한 구조를 미리 만들어놓아야 한다고 생각했었습니다. 그래서 순수 자바 프로젝트를 하더라도 객체의 기능과 구현을 분리하려고 노력했습니다. 하지만, 결국 기능 만으로는 코드가 동작할 수 없기에, 어디선가는 어떤 구현을 사용할 것인지 선언을 해주어야 했습니다. 그러면 결국 객체간 기능만 아는 유연한 연관관계 형성이 불가능하다는 것을 뼈저리게 느꼈습니다. 'DI 컨테이너의 대단함을 이제야 느꼈습니다...' 그래서 고민하던 차에 객체의 역할과 책임에 더 집중하여 한 가지 일만 하도록 만들고 구조적인 복잡도를 줄여서, 나중에 다른 동료가 보더라도 쉽게 이해하여 리펙토링할 수 있는 코드를 만들어야겠다고 생..

컴퓨터시스템의 구조

이 글은 운영체제(2017) - (반효경 교수님) 강의를 보고 작성한 글 입니다. 운영체제란 무엇인가? 좁은 의미의 운영체제(커널) 운영체제의 핵심 부분으로, 메모리에 상주하는 부분 Readhat, What is kernal? 넓은 의미의 운영체제 커널 + 각종 주변 시스템 유틸리티를 포함한 개념 Linux system utilities Windows system utilities 운영체제의 목적 흔히 CPU를 컴퓨터의 두뇌라고 하지만, 교수님은 운영체제가 두뇌에 가까운 것 같다고 하셨습니다. - CPU 사람의 두뇌 운영체제 연산 O O O 기억 ▴ O O 판단 X O O 교수님이 뇌와 비교하시던 내용에서 운영체제는 어떤 연산을 하는지 궁금해서 어떤 내용인지 찾아봤습니다. 이중연산모드(커널모드, 사용자모..

운영체제 2022.02.16

[TIL] 코드스쿼드 2022 백엔드 27일차 회고(6주차)

오늘은 무슨 일이? 처음으로, PR 승인을 받아보다 어제는 처음으로 PR을 작성해봤는데, 오늘은 처음으로 호눅스로부터 간단한 코드 리뷰를 받았습니다. 그동안 리뷰에 대한 갈증이 많았던 터라 기대가 되었습니다. 동료들과도 자주 리뷰를 했지만, 동료들 끼리 조언할 수 있는 한계가 있기도 하고 더 경험이 많고 시야가 넓은 리뷰어로 부터의 리뷰가 절실했습니다. 호눅스 혼자 40명의 소스를 리뷰해야해서, 저에게 온 피드백은 간단했습니다. 하지만 나머지 동료들은 어떤 소스를 작성했고, 어떤 피드백을 받았는지 살펴보며 많은 도움을 얻었습니다. Upstream을 Origin으로 옮기며 그렇게 코드리뷰 및 RP 승인을 받고, 이제 Upstream에 있는 merge된 내 브랜치를 Origin 으로 옮겨오고, PR 이후의 ..

[TIL] 코드스쿼드 2022 백엔드 26일차 회고(6주차)

Weekly I Learned → Today I Learned 오늘부터 WIL이 아니라 TIL을 쓰기로 했습니다. 이유는 다음과 같은데요. 주 단위로 쓰려고 하니, 해당 날짜의 생각이 제대로 기록되지 않음. 매일 쓰지 않고, 주말에 몰아서 쓰게됨. 주말에 휴식 및 밀린 일들을 하다가 회고를 늦게 쓰게됨 회고를 하는 이유는 내가 잘한것을 지속하고, 못한것을 개선하기 위해서 라고 생각하는데 어느새 회고를 숙제처럼 하고있는 자신을 발견하게 되었습니다. 그래서 앞으로는 매일 조금씩 시간을 할당하여 회고에 투자하려고 합니다. 오늘은 무슨 일이? 코드스쿼드 마스터즈코스 백엔드 Java 클래스가 시작되는 첫날 이었습니다. 생각보다 단순한 미션이 주어졌는데, 호눅스가 학습내용을 정리할 여유를 가질 수 있게 배려해준 것..

Java char과 String의 차이 (feat. Constant Pool)

Java char과 String의 차이 (feat. Constant Pool) char과 String 간단 정리표 - char String 타입 Primitive Reference 저장위치 Stack Stack + Heap 초기값 타입에 따른 초기값 제공 null char char은 Primitive-type입니다. Primitive-type 변수는 Stack Frame에 저장되며, call-by-value라는 특징이 있는데요. call-by-value를 간단한 예제 코드로 알아보겠습니다. class CallByValueTest { public static void main(String[] args) { // stack의 charA변수 영역에 'A' 저장됨 char charA = '..

Java 2022.02.15

운영체제 개요

이 글은 운영체제(2017) - (반효경 교수님) 강의를 보고 작성한 글 입니다. 혹시 잘못된 내용이 있을 경우 편하게 댓글로 알려주시면 감사하겠습니다! 운영체제(Operating System, OS) 란? 컴퓨터와 하드웨어 바로 위에 설치되어, 사용자 및 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층 운영체제의 목적 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공 - 동시 사용자/프로그램들이 각각 독자적 컴퓨터를 사용하는 것 처럼 논리적으로 자원을 분리함 - 하드웨어를 다루는 복잡한 작업을 운영체제가 처리 컴퓨터 자원을 효율적으로 관리 CPU, 메모리, I/O 장치를 효율적으로 관리함 주어진 자원으로 최대한의 성능을 내도록 → 효율성 특정 사용자/프로그램이 자원을 독점하지 않도록 관리 → ..

운영체제 2022.02.08

클린코드 1장, 2장 정리

1장. 깨끗한 코드 나쁜코드는 회사를 망하게할 수도 있다. 프로젝트 재설계는 꿈일 뿐이다. (차세대 프로젝트는 너무 너무 힘든 일이다.) 나쁜 코드의 원인을 밖에서 찾지 말고, 나에게서 찾자. (프로그래머는 좋은 코드를 사수해야하는 책임이 있다.) 기한을 맞추려고 어쩔수 없이 나쁜 코드를 작성한다고 합리화 하지 말자. (사실, 나쁜 코드에 발목이 잡혀 일정은 더 늦어지는 경우가 많다.) 좋은 코드를 작성하려면, 좋은 코드가 무엇인지 반드시 알아야 한다. 유명인들이 말한 깨끗한 코드란? 비야네 스트롭스트룹(C++ 창시자) 논리가 간단해야 버그가 숨어들지 못한다 의존성을 최대한 줄여야 유지보수가 쉽다 오류는 명백한 전략에 의거하여 철저히 처리한다 나쁜 코드는 나쁜 코드를 유혹 한다(깨진 유리창 이론) 깨끗한..

이것저것 2022.02.03

[WIL] 코드스쿼드 2022 백엔드 4주차 회고(2022.01.24~28)

이번주엔 무슨일이? 01.24 월 - 구현에 너무 매몰되지 말자 CS과정 4주차에 돌입했는데, 그 동안 피로도 쌓이고 긴장감도 조금 풀린 느낌이 있었습니다. 그래서 집중이 잠시 안되었는데, 공부하고 빨리 구현해보자는 생각에 집중할 수 있었습니다. 이전에는 느끼지 못했는데, 미션들을 진행하면서 저는 코드를 작성하는것을 좋아한다고 느끼게 되었는데요. 그런데 문제는 코드를 빨리 작성하고 싶어서, 학습을 덜한 상태로 구현을 시작하는일들이 자주 있었습니다. 그래서 이번 미션부터는 공부화 구현의 밸런스를 맞추면서 진행하자고 다짐했습니다. 이번 미션은 운영체제의 프로세스와 스레드 관리방식이었는데, 운영체제 강의중 가장 유명한 반효경 교수님의 강의를 듣고 내용을 정리해본 다음 미션에 돌입했습니다. 01.25 화 - 학..

[WIL] 코드스쿼드 2022 백엔드 3주차 회고(2022.01.17~21)

이번주엔 무슨일이? 01.17 월 : 메모리 모델..😵 이번 주는 케이,선을로,Shine,Meenzino,부카,Lucid,Dave,donggi,Hanse와 함께하게 되었습니다. 메모리 모델을 구현하는 미션이었는데, 그동안 기본적인 내용에 대한 공부에 소홀했던 제 자신을 반성하게 되었습니다. 운영체제에서 메모리를 어떻게 관리하고, CPU는 어떻게 물리적인 메모리에 접근하는지 공부하게된 유익한 시간을 보냈습니다. 01.18 화 : 과연 이해했나?🧐 스스로 메모리 모델에 대해 어느 정도 이해를 했다고 생각하고 생각하고 미션 구현에 착수했습니다. 하지만, 구현은 또 다른 문제였고 이를 어떤 구조로 해결해야할지 감이 잡히지 않았습니다. 그렇게 삽질만 하고 있다가, JK가 강의에서 메모리 관리 방식이 발전해온 과정..

JVM과 Garbage Collector

JVM의 구조 클래스 로더 런타임에 클래스 파일에서 바이트코드를 읽어 메모리에 저장합니다. 로딩 : 클래스를 읽어오는 과정 링크 : 참조 포인터를 연결하는 과정 초기화 : static 자원들을 초기화하고 변수에 할당합니다. 런타임 데이터 영역 Method Area, Heap, Stack, PC Register, Native Method Stack Method Area : 모든 스레드가 공유하는 영역으로, 클래스들의 정보 및 바이트 코드들을 저장합니다. Heap : 런타임에 동적으로 할당되는 영역으로, instance들이 주로 저장됩니다. Thread : 각 스레드는 아래 3개의 영역을 각자 가지게 됩니다. Stack : 스택프레임이 저장되는 공간으로, 지역변수, 메소드 매개변수, 메소드 정보 등이 저장됩..

Java 2022.01.24