💡동시성과 병렬성에 대하여 학습한 내용을 기록하였습니다.동시성(Concurrency)여러 작업을 실행할 수 있는 능력을 의미하며, 실제로는 한 번의 하나의 작업을 수행하더라도 작업 간 빠르게 전환함으로써 동시에 여러 작업이 진행되는 것처럼 보이게 합니다.CPU가 여러 작업을 짧은 시간 간격으로 번갈아가며 실행하기 때문에, 마치 여러 작업이 동시에 수행되는 것처럼 보입니다.특징프로세스 간 빠른 전환으로 CPU 자원을 최대한 활용할 수 있습니다.하지만 여러 작업이 같은 자원에 접근할 때 데이터 경합 문제 발생이 있을 수 있으며, 이를 해결하기 위한 동기화가 필요합니다.단일 코어동시성은 하드웨어적으로 병렬 처리가 지원되지 않는 단일 코어에서도 구현 가능합니다.[Core] : CPU에 내장된 처리회로로 명령어..
💡 우아한테크코스 과정에서 학습했던 점진적 리팩터링에 대해 복습하였습니다! 레거시 코드 리팩토링레거시 코드 리팩토링은 기존의 코드베이스를 개선하는 과정입니다.주된 목적은 코드의 기능을 변경하지 않으면서 코드의 구조를 더 깔끔하게하고 유지보수가 용이하게 만드는 것입니다.보통 오래된 시스템에서 작성된 코드에 필요합니다.레거시 코드읽기 어려움코드가 복잡하거나 문서화가 부족하여 이해하기 어렵다유지보수 어려움코드의 수정이나 기능 추가가 힘들고 버그가 발생하기 쉽다테스트 부족충분한 테스트가 없어서 코드 변경 시 예상치 못한 문제를 일으킬 수 있다점진적인 리팩터링한 번에 많은 코드를 바꾸는 것이 아닌, 여러 작은 단계로 나누어 변경하는 방법입니다.기존의 테스트 코드가 깨지지 않는 상태로 리팩터링을 실행합니다.컴파일..
💡 리뷰 활동을 하면서 디미터의 법칙을 상기시켜보라는 리뷰를 받게 되었습니다. 객체 지향 프로그래밍에서 중요하게 적용되는 디미터의 법칙에 대하여 학습하였습니다. 디미터의 법칙?Law of Demeter어떤 객체가 다른 객체에 대해 지나치게 많이 알다보니, 결합도가 높아지고 좋지 못한 설계가 발생합니다.이를 개선하고자 객체에게 내부 값을 숨기는 대신 함수를 공개하도록 하는 것이 디미터의 법칙입니다.다른 객체가 어떠한 내부 값을 가지고 있는지 속사정을 몰라아 햔다는 뜻으로, 아래와 같이 불리기도 합니다.Don’t Talk to Stranger (낯선 이에게 말하지 마라)Principle of lesat knowledge (최소 지식 원칙)또한 직관적인 이해를 위해서 여러 개의 .(도트)를 사용하지 않도록 ..
💡 프로그래밍 언어, 특히 Java 언어에서 사용되는 Compile, Decompile에 대한 내용과 코틀린 코드를 자바 코드로 Decompile하는 과정을 실습하였습니다. Compile?사람이 이해하는 언어를 컴퓨터가 이해하는 언어로 바꾸는 과정을 컴파일이라고 합니다.0과 1로 모든 명령어를 이해할 수 있는 컴퓨터에게 언어를 이해 시켜줄 수 있도록 번역해주는 과정을 거칩니다.또한 원시코드를 목적코드를 바꿔주는 과정을 컴파일이라 합니다.원시코드 : 인간이 알아볼 수 있는 코드 (.java..)목적코드 : 컴퓨터가 이해하는 코드, 기계어 (.class..)컴파일 과정이 필요한 이유JVM에서는 byte code(.class)를 실행할 때 compile 과정에서 진행한 일을 다시 진행하는 과정 없이 실행만 ..
5장 가독성 높은 코드를 작성하라서술형 명칭 사용서술적이지 않은 이름은 코드를 읽기 어렵게 만든다.주석문으로 서술적인 이름을 대체할 수 없다.주석문에 대한 유지보수도 필요해진다.클래스가 수백 줄의 길이를 가진다면, 주석을 찾기 위해 스크롤 해야한다.중복된 주석문은 유해할 수 있다.코드가 수행하는 작업을 설명하는 주석문을 추가한 경우 코드가 변경하면 주석문을 수정해야 하는 상황이 생긴다.주석문이 이해하기 어려운 코드가 있다.String generateId(String[] data) { // data[0]은 성이고, data[1]부터는 이름이다}헬퍼 함수를 사용하여 가독성이 높은 코드를 쉽게 작성할 수 있다.String generateId(String[] data) { return firstName(dat..
콘보이 현상(convoy effect) 콘보이 현상이란 작업 시간이 긴 프로세스가 먼저 큐에 도착해서 다른 프로세스의 실행 시간이 전부 늦춰져 효율이 떨어지는 현상입니다. FCFS(first- come firts served) 스케줄링은 비선점으로, 순차적으로 먼저 큐에 들어온 작업부터 실행하므로 콘보이 현상이 발생합니다. 선점형 스케줄링과 비선점형 스케줄링 선점형은 하나의 프로세스가 다른 프로세스 대신에 CPU를 차지할 수 있음을 말하고, 비선점형은 하나의 프로세스가 끝나지 않으면 다른 프로세스는 CPU를 사용할 수 없음을 말합니다. 동기와 비동기 동기는 순차적, 직렬적으로 테스크를 수행하고, 비동기는 병렬적으로 테스크를 수행합니다. 동기(synchronous)는 서버에 데이터를 요청하고 데이터가 응답..