컴퓨터는 작업을 끝낸뒤 결과값을 메모리에 저장한다. 여기서 많은 경우 프로세서의 수행 시간에 비해 메모리 접근 시간이 훨씬 오래 걸리기 때문에 전체 수행 시간의 병목은 얼마나 많이 메모리에 접근했는가로 결정된다. 캐시 메모리는 프로세서와 주 메로리 사이에 작게 존재하지만 처리 속도는 빠른 기억 장치입니다. 프로세서가 어떤 자료를 필요로 할 때 만약 캐시 메모리에 최신의 그 자료가 존재한다면 프로세서는 굳이 주 메모리에서 자료를 가지고 올 필요없이 바로 캐시 메모리에서 가져옴으로서 컴퓨터의 수행 시간을 줄이는 데 큰 기여를 합니다. 캐시 메모리의 크기를 무한정 키우는 것은 금전적으로 큰 부담이 되는 일이기 때문에 그 크기는 대체로 주 메모리의 크기보다 훨씬 작다. 따라서 캐시 메모리를 사용하면 필연적으로 ..
정보/The 공부
지금까지 나는 상속을 단순히 재사용하는 것들이 있으면 공통적으로 묶어주기 위해 상속을 생각했다. 하지만 정말 우연한 기회로 조합이라는 것을 알게되었다. 이 영상을보다 댓글을 보니 이런 댓글이 있었다. 리팩토링 할때도 느꼈지만 상속을 사용하면 중복코드를 제거할 수 있고 확장도 쉽게 가능하고 계층구조에 유리하니 편해서 사용했던 것 같다. 하지만 위 댓글처럼 만약 상속을 통해서 엄청난 규모의 프로젝트를 했는데 최상층에 있는 부모클래스에 변동이 생기면 거기에 연관된 모든 자식클래스는 강하게 영향을 받고 결국 전부 수정을 해줘야한다. 자바스크립에서도 부모클래스에서 input 값이 stirng을 받을 것을 예상하고 로직을 만들고 상속을 통해 자식 클래스들을 여러개를 만들었는데 어느날 array로 바뀌다면 그에 따른..
이번 스터디를 하면서 이런 피드백을 받았다. 피드백을 받게된 근원은 문제조건이다. 이 에러 문자를 같이 출력하기위해 "[ERROR]"만 따로 상수로 만들어 사용했는데 커스텀 에러를 사용한다면 에러를 만들때마다 이런 수고로움이 사라지고 유지보수도 수월해진다고 하셨다. 미션도 끝나고 시간도 여유로워서 천천히 공부를 해보았다. 사실 이전에 사용했던 것처럼 throw "[ERROR] 숫자만 입력할 수 있습니다." 이렇게 사용해도된다 왜냐하면 throw의 인수엔 아무런 제약이 없기 때문에 커스텀에러로 구성하여 사용할 필요가 없다. 그럼에도 만들면 좋은 이유는 커스텀에러에는 큰 장점이 있다. 바로 직관성이다. 우리가 단순히 어떤 작업을 할때 Error라고만 뜬다면 이게 무슨에러인지 어디서 발생한 에러인지 에러가 딱..
input값이 조건에 맞는 값인지 확인하는 메서드들을 Lotto 클래스에 넣어 이 Lotto클래스가 쓰인 곳은 전부 사용자의 input값이 알맞은 값이라는 것을 보장한다고 나혼자만 생각한게 문제였다. Lotto의 메서드들로 구분할 수 있게 하는게 아니라 상속을 통해 용도에맞는 클래스명을 명명하여 구분할 수 있게 해줘야했다. 그래야 다른분들이 볼때도 클래스가 하는 역할을 명확하게 이해할 수 있고 코드도 분산되어 유지보수가 더 수월할 것이다. 이번 3주차 스터디는 정말 2주차 스터디보다 다들 엄청나게 발전하셔서 깜짝놀랐다. 각각의 코드들 마다 특색이 있고 배울점들이 정말 많았다. 피어리뷰를 하면서 "와 이렇게 처리하는게 가독성도 좋고 성능도 좋아지구나 4주차 미션에 나도 저런 방식으로 구현해봐야겠다."라는 ..
이번 문제를 풀면서 처음 보는 용어가 나왔다. 도메인 로직에 단위 테스트? 도메인 로직이 뭐지 ?? 싶었다. 내가아는 도메인은 인터넷 도메인 밖에없는데 도메인이 무슨 뜻이있었나 해서 찾아봤는데 (지식,활동의) 영역[분야], 범위 같은 뜻이 있었다. 아하 어떤 영역 로직의 단위 테스트를 구현하라는 뜻인가 ? 문맥상 함수 또는 클래스 또는 작은 기능별로 단위 테스트를 하라는 뜻 같았다. 하지만 이건 미루어짐작이고 실제 IT업계에서는 정확히 무슨의미로 사용하는지 궁금해서 더 찾아보았다. 도메인이란 문제 영역을 뜻하는 게 가장 일반적인 것 같았다. 확장하여 도메인 로직은 "현실 세상의 문제"를 해결하는 코드를 의미한다고 볼 수도있을 것 같다. 그렇다면 우리는 로또과제를 해결해야한다. 도메인 로직에 단위 테스트를..
이번 3주차에도 어김없이 수요일날 과제메일이 도착했다. 메일을 쭉 읽다가 잘 이해가 가지 않았다. 클래스(객체)를 분리하는 연습??????????? 클래스를 어떤 기준으로 분리하지 ? 함수처럼 분리하는 것인가 ? 명확하게 이해가 되지않아서 일단 무작정 찾아보았다. 그런데 그중에서도 아래 영상에서 해답을 찾을 수 있었다. 이 아래의 글은 "[OKKYCON: 2018] 박재성 - 의식적인 연습으로 TDD, 리팩토링 연습하기" 영상을 정리한 글 입니다. 의식적인 연습이란 ? 연습을 많이 하면 실력이 높아질 것이라고 생각 끊임없이 연습, 연습, 연습 하지만 무조건 연습한다고 실력 늘지 않는다. 1차 프로그래머와 10년차 프로그래머가 있을 때 진짜 10년차 프로그래머가 프로그램 역량이 더 뛰어나다고 장담할 수 있..
TDD Test-deriven development (테스트 주도 개발) 1. 개념 개발(코드 작성)전 테스트 코드를 먼저 작성하는 개발 방식 또는 개발 방법론중 하나 2. TDD하는 방법 코드를 작성하기 전에 특정한 기능에 한해서 기능을 조금 더 세분화 해서 딱 하나의 케이스의 대해서 테스트를 코드를 먼저 작성한다. 테스트 수행하는데 당연히 실패함 왜냐 ? 아직 기능을 구현하지 않았기 때문이다. 따라서 이 실패한 테스트가 성공할 정도의 조금의 양만 하는 코드를 작성해서 테스트를 다시 수행해서 성공하도록 만든다. 이렇게 하나의 테스트가 완성이되면 다음 기능으로넘어가서 그 기능에 해당하는 테스트를 작성하고 테스트를 수행해서 실패하면 이 실패한 코드가 성공할 수 있을 만큼의 코드를 작성해서 다시 테스트를 수..
우테코 프리코스 과제를 하다가 기능요구사항에 이런 조건이 있었다. 사용자가 잘못된 값을 입력한 경우 throw문을 사용해 예외를 발생시킨후 애플리케이션은 종료되어야 한다. if 문과 return으로 함수를 끝내면 되지 않나 ? throw는 뭐가 다른걸까? 라는 생각이들었다. 먼저 공식문서를 찾아보았다. 1. Throw 개념 throw문은 사용자 정의 예외를 발생(throw)할 수 있습니다. 예외가 발생하면 현재 함수의 실행이 중지되고 throw 이후의 명령문은 실행되지 않습니다. 제어 흐름은 콜스택의 첫 번째 catch 블록으로 전달됩니다. 호출자 함수 사이에 catch 블록이 없으면 프로그램이 종료됩니다. function getRectArea(width, height) { if (isNaN(width)..