분류 전체보기
-
객체 지향이 추구하는것을 이해하고 클래스를 설계하기 위한 지식, 디자인 패턴개발/생각 2022. 5. 16. 17:33
책은 생각 정리에 큰 도움이 된다. 내가 객체지향을 아는데 몰랐던 이유를 이제 조금 알게 되었다. 객체 지향 언어 (Object-oriented programming, OOP) 객체 지향에 대한 이야기는 개발을 공부할 때, 어떤 경로로든 알게 된다. 심지어 대학교에서도 가르쳐주는 개념이다. 하지만 그 깊이와 그 중요성을 알려주는 곳이 적을 뿐더러, 이해의 필요성을 호소하는 사람은 더더욱 없었다. 하물며 지금의 내가 공부할 때 당시의 나에게 가르쳐주려고 시도했다 한들 그 필요성을 제대로 깨달을 수 있었을까? 클래스, 객체(인스턴스), 메서드(메소드), 메시지 객체 지향의 구성 요소의 사전적인 의미는 누구나 배운다. 이게 무엇이냐 물었을 때 그럴싸한 대답을 할 수 있다. 속성과 행위, 그리고 그 연관 관계들..
-
google test 로 C++ 단위 테스트 진행기개발/C, C++ 2022. 5. 8. 15:26
테스트 코드를 도입해야겠다고 생각하고, 순전히 하루정도 정말 테스트 코드에 대한 고민을 할 기회가 생겼다. 리눅스 환경에서 C++ 의 테스트 코드를 작성할 때, 어떤 개념으로 이 테스트 코드가 동작하는지 내가 이해한 바를 적어두려고 한다. 환경은 CentOS 7에 c++ 11 테스트는 google test 를 사용하기로 했다. 테스트 프로젝트로 단위 테스트가 없는 프로젝트에 단위 테스트를 넣는 과정은 이 글을 참고하면 된다. 예제 프로젝트에 테스트 코드를 추가하는 과정과 동작을 직접 확인할 수 있다. https://bearnet.tistory.com/22 myclass.o dbconn.cpp -(컴파일)--> dbconn.o main.cpp -(컴파일)--> main.o myclass.o dbconn.o..
-
테스트 코드의 필요성을 깨닫다개발/생각 2022. 5. 6. 16:53
개발자가 되어 일을 하다가 나름의 경험이 생기고 나서 생긴 일이다. 프로그램의 동작은 내가 생각한게 맞고, 내가 가정한 상황이 전부고, 내가 테스트한 환경이 전부라고 생각하는 오만방자한 순간이 오고, 그 어마무시한 자신감을 코드에 싣게되었다. 어느 순간 깨달았을까, 내가 코드를 작성하면 절대적으로 버그를 생산하고, 의도한 기능에 맞지도 않을때가 많다는것을 깨닫고 코드를 작성하는것이 공포스러운 순간이 왔다. 이를 극복하기 위해 코드를 조심히(?) 작성한다는 정말 말도안되는 생각을 했지만 그 공포감에 휩싸인 사람이 코드를 조심히 작성해도 버그는 멈추지 못하는것은 당연했고, 더 깊은 공포에 사로잡히는 계기가 되었을 뿐이다. 스스로의 오만방자했음을 깨닫고 공포감의 우물을 박차고 나가는데는 여러 글이 도움이 되었..
-
해시 테이블개발 2020. 3. 27. 17:46
배경 컴퓨터 공학에서 해시 테이블(혹은 해시 맵 또는 연관 배열)은 데이터를 해시한 결과를 키로 사용해서 값을 찾을 수 있는(Mapping 하는) key-value 자료구조 중 하나이다. 탐색을 수행할 때 평균적으로 O(1) 정도의 알고리즘 복잡도를 기대할 수 있다. 다만 구현 방법이나 데이터의 입력에 따라 최악의 수행속도가 O(N) 까지 늘어날 수 있는 만큼 구현 시 고려해야 할 사항을 조사하고 필요한 요구사항에 따라 실제 인터페이스만 노출하는 방식으로 개발하여 본다. 기반자료 여러 자료구조의 평균 기능 수행 속도 접근 탐색 삽입 삭제 배열 O(1) O(N) O(N) O(N) 스택 O(N) O(N) O(1) O(1) 큐 O(N) O(N) O(1) O(1) 양방향 링크드 리스트 O(N) O(N) O(1)..
-
Vim, CLI 환경에 최적화된 Text Editor 설정 내용유틸리티 2020. 2. 27. 13:20
2020년도에 무슨 vim 이냐 라는 말을 제가 직접 할줄 알았으나 현업에서는 Nano의 처참한 보급률 덕분에 vim을 쓸수밖에 없음을 깨달았습니다. 제 아무리 표준에서 제외되고 오래되었다 한들 Nano를 사용하겠다고 고집을 부리기엔 어려운 점이 많았습니다. https://www.vim.org/download.php download : vim online Downloading Vim Vim is available for many different systems and there are several versions. This page will help you decide what to download. Most popular: Details and options for: Mirrors Alternativ..
-
소켓 프로그래밍 기초 용어개발/네트워크 프로그래밍 2020. 2. 27. 13:01
서버(Server) - 서비스를 제공(Serve) 하는 개체 (er) 클라이언트(Client) - 서비스를 이용하는 고객(Client) 소켓(Socket) - TCP/IP로 소통을 하기 위한 것 버퍼(Buffer) - 소켓을 통해 연결된 장치가 TCP/IP로 데이터를 보내고 받기 위한 메모리의 임시공간 (처리X) IP 주소 (IP Address) - 소켓을 가진 '컴퓨터'를 찾아가기 위한 번호 프로토콜 (Protocol) - 통신 규약. 즉, 장치가 소통을 하기위해 어떤 방식으로 소통할것인가 TCP (Transport Control Protocol) - 신뢰성을 가진 연결 프로토콜 UDP (User Datagram Protocol) - 신뢰성을 덜 가진 비연결 프로토콜 포트 번호 - IP주소를 찾아 컴퓨..