fragile and resilient

전체 글 36

[Effective java] equals 일반 규약

1편과 2편은 이어지는 하나의 내용입니다.equals()의 재정의가 필요한 상황은 언제일까요?두 객체가 물리적으로 같은지가 아니라 논리적인 동치성을 확인해야 하는데, 상위 클래스의 equals가 논리적 동치성을 비교할 수 있도록 재정의되지 않았을 때입니다. (동치란 “같다"는 개념을 추상화한 것입니다. : https://namu.wiki/w/동치관계 ) 만약 equals()를 사용하려는 개발자가 있다면, 사용 의도는 객체의 주소가 같은 지를 알고 싶은 것이 아니라, 값이 같은 지를 알고 싶은 것일겁니다.String name1 = new String("woowacourse"); String name2 = new String("woowacourse"); System.out.println(name1 == na..

Java 2022.02.17

[Java] 불변 객체(Immutable Object)란 무엇일까?

불변 객체란 무엇일까요 ? 불변 객체란 객체가 생성된 이후에 상태를 바꿀 수 없는 객체를 말합니다. 즉, 힙 영역에서 객체가 가리키고 있는 데이터 자체의 변화가 불가능한 것을 말합니다. 그럼 불변 객체 설명에 앞서, 이해를 돕기 위해 간단히 자바 메모리 구조의 힙 영역에 대해 알아보겠습니다. 사진 출처: JVM 구조 자바 메모리 영역(Runtime Data Area)은 크게 메소드 영역, 힙 영역, 스택 영역으로 나뉘게 됩니다. Method 우선 메소드 영역은 클래스 로더에서 클래스들을 읽어 클래스 별로 런타임 상수풀, 필드, 메소드, 생성자 등을 분류해서 저장하게 됩니다. 메소드 영역은 JVM(Java Virtual Machine)이 시작할 때 생성되고, 모든 Thread가 공유하는 영역입니다. Hea..

카테고리 없음 2022.02.15

[Git] Branch 관리 (Merge, Rebase)

브랜치는 독립적인 개발을 가능하게 해줍니다. 그림을 보며 브랜치를 관리하는 방법에 대해 알아봅시다! git branch testing 먼저 testing이라는 새 브랜치를 생성하면, 새로 생성한 testing 브랜티도 마지막 커밋을 가리키고 있습니다. HEAD는 현재 작업중인 브랜치(master)를 가리키는 포인터입니다. git checkout testing 명령어를 입력하면, HEAD가 testing 브랜치를 가리키게 됩니다. 1. Merge 위의 그림이 초기 히스토리라고 가정해봅시다. 이후 master 브랜치에서 iss53 브랜치와 hotfix 브랜치를 생성하고, 각각 하나의 commit을 하면 히스토리가 위의 그림처럼 됩니다. hotfix 브랜치를 master 브랜치에 합치는 것은, 현재 브랜치 포..

정리 2022.02.14

[Git] git 영역 및 상태

Git 영역 수행 과정 Working tree에서 파일을 수정한다. Staging Area에 commit할 스냅샷들을 생성한다. Staging Area에 존재하는 파일들을 Git directory에 commit한다. checkout 명령어를 통해 원하는 버전으로 돌아갈 수 있다. git directory에 commit한 것은 local에 존재하는 것이기 때문에, remote repository에 저장해야 한다. Status working directory의 파일은 Tracked와 Untracked로 나뉘게 된다. Tracked: git이 관리하고 있는 파일. Untraked: git이 관리하고 있지 않는 파일. Tracked된 파일은 Unmodified, Modified, Staged 상태 중 하나이다...

정리 2022.02.14

처음부터 잘 하고 싶어!

어릴 적부터 동물 다큐멘터리를 좋아했다. 사실 모든 종류의 다큐멘터리를 좋아한다.여담으로 어릴 때 나는 박물학자가 되고 싶었다. 거대한 크기의 동물, 곤충 백과사전이 여러 갈래로 찢어질 때까지 읽었다. 부모님께서 관련된 책을 많이 사주셨었고, 자연사박물관과 체험관도 많이 데리고 가주셨다.나와 오빠는 어릴 때 성향도 관심사도 비슷했는데, 나는 관찰을 좋아했다면 오빠는 분석하려는 성향이 강했다. 오빠의 초등학교 장래희망은 항상 과학자였다.우리는 부모님을 졸라 망원경을 사서 같이 별을 관찰하기도 하고, 현미경을 사서 밖에서 잡아 온 온갖 곤충과 식물을 관찰했었다. 어느 날은 개미 굴을 만들어서 개미들의 하루를 함께 관찰하기도 하고, 또 어느 날은 집에서 돋보기로 햇빛을 모아 불 피우는 실험(?)을 하다가 혼나..

생각 2021.12.14

[OS] CPU Scheduling

CPU 스케줄링이란 쉽게 말해, 어떤 프로세스가 CPU를 할당받을 것인지의 순서를 정하는 과정이다. 1. Preemptive Scheduling (선점형 스케줄링)어떤 프로세스가 CPU를 할당받아 실행중이더라도 OS가 CPU를 강제로 뺏을 수 있는 (해당 프로세스를 쫓아낼 수 있는) 스케줄링 방식2. Non-preemptive Scheduling (비선점형 스케줄링)어떤 프로세스가 CPU를 점유하면 다른 프로세스가 빼앗을 수 없는 스케줄링 방식(자발적으로 빠져나오는 것만 가능)Decision making for cpu-schedulingrunning state ➔ waiting state (ex. I/O 요청)running state ➔ ready state (ex. interrupt)waitting s..

CS 2021.01.31