본문 바로가기

분류 전체보기502

3. SOLID 원칙 1. 좋은 객체지향 프로그램을 만드는 방법 - 이전 포스팅에서 좋은 객체지향이란 다형성을 잘 유지하며 개발하는 것이라고 했다. - 단순하게 역할과 구현을 분리하면 되는것 아닌가? 생각할 수 있다. - 그러나 프로그램의 사이즈가 커질수록, 코드가 서로 얽히면서 객체지향을 유지하기 어려워진다. - 이처럼, 큰 규모의 프로그램에서도 좋은 객체지향 프로그래밍을 할 수 있도록 제시된 규칙이 있다. 2. SOLID 원칙 a) 개요 - 클린 코드의 저자인 Robert Martin이 정리한 좋은 객체지향 프로그래밍의 5가지 원칙 - SOLID는 다섯가지 원칙의 앞글자를 따서 만들어진 이름이다.(SRP, OCP, LSP, ISP, DIP) b) SRP(Single Responsibility Principle, 단일 책임.. 2022. 1. 26.
2. 다형성(Polymorphism)과 객체지향 프로그래밍(OOP) 0. 결론 - Spring과 객체지향 프로그래밍의 핵심은 다형성에 있다. - 다형성을 객체지향 프로그래밍의 특성 중 하나라고 말하지만, 다형성으로 인해 객체지향 프로그래밍의 개념이 완성된다. - 그렇다면 다형성이 무엇인지, 왜 객체지향의 핵심인지 알아보자. 1. 객체지향 프로그래밍(OOP)이란? - 객체지향 프로그래밍이란, → 독립적인 단위(객체)가 협력하여 데이터를 처리하는 프로그램 구조를 갖는 것 → 독립적인 단위(객체) 간의 관계가 유연하여 부품을 교체하듯, 프로그램의 구조변경이 쉬운 것 - 즉, 자동차를 만드는 것처럼 프로그램(App)을 만드는 것이다. - 자동차는 수많은 부품의 조합으로 이루어진 결과물이다. - 이처럼 코드를 역할에 따라 분리하고, 하나의 부품으로써 조합하여 App이라는 결과물로.. 2022. 1. 24.
1. Maven과 Gradle이란? 1. Spring 프로젝트 만들기 - 이전에는 하나부터 열까지 Spring 환경을 직접 설정했다. - 하지만, 환경설정이 자동화되어 있는 Spring Boot를 사용하면서 프로젝트 또한 자동화를 거쳐 생성한다. - 그 방법이 아래의 사이트를 사용하여 Spring 프로젝트를 만드는 것이다. https://start.spring.io/ a) Maven & Gradle - 프로젝트 생성을 시작하면, 맨 처음에 Maven과 Gradle을 선택하게 된다. 이들은 무엇일까? - Maven과 Gradle 모두 자바 프로젝트에서 사용되는 빌드 자동화 및 관리 시스템이다. a-1) Maven의 특징 - Maven은 XML을 기반으로 한 빌드 자동화 시스템이다. - Maven은 사용하는 라이브러리와 해당 라이브러리와 연관.. 2022. 1. 23.
2021년 회고록 - 은은하게 달리기 1) 21년의 시작 19년 6월, 개발자의 길을 걷기 시작한 이래로 어느새 2022년이 되었다. 국비를 수료하니 20년 5월이 되었고, 인고의 구직활동 끝에 개발자 인턴쉽을 시작했을 때가 20년 12월이었다. 그렇게 21년을 맞이했다. 2) 21년을 돌아보며 2021년 동안 나는 다음과 같은 시간을 보냈다. - 3개월 간의 개발자 인턴쉽 종료(20년 12월 ~ 21년 2월) - 4개월 간의 스타트업 도전기(21년 4월 ~ 21년 7월) - 7개월 간의 카페 알바(21년 5월 ~21년 11월) - IT 대기업 도전기(21년 8월 ~ ) 위의 기록을 적고나서 1년이라는 시간 동안 "나 꽤나 부지런히 살았구나"라며 기뻐했다. 다행이다. 시간을 헛되이 보내지 않았다는 것이. 뿌듯했다. 그 누구도 아닌 내가 그 .. 2022. 1. 1.
함수형 프로그래밍에 대하여 0. 개요 - 언어와 상관없이, 알고리즘 공부를 하다 보면 내가 10줄로 짠 코드를 누군가는 3줄로 짜는 것을 보며 현타가 올 때가 많다. - 이 7줄의 차이는 언어에 대한 이해도의 차이에서 온다고 생각한다. - 최근 파이썬과 자바스크립트 같은 함수형 프로그래밍 언어가 주목을 받으면서, 파이썬을 파이썬답게 쓰자는 말이 많이 들린다. - 어떻게 해야 사용하는 언어답게, 그 언어에 최적화된 기술들을 이용하여 코드를 짤 수 있을까? - 그 시작은 언어에 대한 특성을 이해하는 것에서 시작된다고 생각하여 이번 포스팅을 준비했다. 1. 함수형 프로그래밍이란? - 함수형 프로그래밍은 절차 지향적 언어보다 시대적으로 앞서 등장한 언어의 형태다. - 함수형 언어는 수학적 사고방식을 필요로 하기에, 사람의 사고방식에 가까.. 2021. 12. 29.
파이썬 - packing/unpacking 1. Packing - packing은 여러개의 객체를 하나의 객체로 합쳐주는 기능이다. - packing에는 2가지가 존재한다. a) 위치인자(*) packing - print('a', 'b', 'c') - print 함수는 매개변수의 갯수에 대한 제약이 없다. 이것이 가능한 이유가 packing이다. - 즉, 함수의 인자(=매개변수)의 갯수를 유연하게 지정할 때 사용한다. - 위치인자(*)를 매개변수 앞에 붙이면 packing을 사용한다. - 위치인자를 사용하면 다수의 값들을 tuple로 관리한다. 예시 - 위치인자) def test_packing(*args): print(type(args)) print(args) test_packing(1,2,3,4,5) b) 키워드인자(**) packing - 키.. 2021. 12. 26.
알고리즘 개념 총정리 - 탐색 및 기타 1. 탐색 (Search) a) 너비우선탐색(Breadth First Search, BFS) - Graph의 모든 노드를 탐색하는 알고리즘으로, 완전탐색에 포함된다. - 동일한 level의 형제노드를 우선적으로 탐색하는 방법 - need_visit Queue와 visited Queue를 이용하여 방문할 노드와 방문한 노드의 정보를 관리한다. - Vertex와 Arc의 수에 따라 O(V + A)의 시간복잡도를 가진다. b) 깊이우선탐색(Deapth First Search, DFS) - Graph의 모든 노드를 탐색하는 알고리즘으로, 완전탐색에 포함된다. - 하나의 노드를 시작으로 자식노드를 순차적으로 말단노드까지 탐색한다. - 말단노드까지 탐색을 했다면, 시작노드의 위치로 돌아와 동일한 방법으로 다른 형제.. 2021. 12. 23.
알고리즘 개념 총정리 - 정렬 a) 버블 정렬(Bubble Sort) - 인접한 요소끼리 크기 비교를 하며 swap과정을 통해 정렬한다. - 더이상 swap이 발생하지 않는 상태까지 정렬과정을 반복한다. - O(n^2)의 시간복잡도를 가진다. b) 삽입 정렬(Insertion Sort) - 가장 좌측의 요소를 기준으로 다른 요소와 비교하며 swap과정을 통해 정렬한다. - 기준 요소보다 작은 요소들은 기준요소의 좌측에, 큰 요소들은 기준요소의 우측에 정리하는 과정을 반복한다. - O(n^2)의 시간복잡도를 가진다. c) 선택 정렬(Selection Sort) - 가장 좌측 요소의 위치를 포인터로, 포인터가 가리키는 요소보다 작은 요소를 찾아 swap하며 정렬한다. - swap이 한번 일어날 때마다, 포인터의 위치는 오른쪽으로 한칸씩 .. 2021. 12. 23.
성장에 대한 고민 1. 개요 얼마 전, 7개월 간의 카페 알바를 마무리했다. 공부에 전념하고 싶었고, 알바를 하는 것이 방해가 된다고 판단하여 내린 결정이었다. 아르바이트를 그만두고 약간의 휴식기간을 가진 뒤, 새로운 공부 계획을 짰다. 내가 계획한 하루 루틴은 이랬다. - 오전에 개발서적 읽고 정리하기 / 주말에는 정리한 것 포스팅하기 - 매일 알고리즘, 자료구조 공부하기 (매일 커밋하기) - 매일 기술면접 1개씩 준비하기 실제로 열심히 했고, 정해진 모든 일과를 끝내기 위해서 노력했다. 그러나 얼마 지나지 않고 의구심이 들었다. " 이게 내가 개발자로서 정말 성장하는 것일까? " " 성장과정이라 포장하고 취준을 숙제하듯이 하는 것 아닐까? " 2. 진짜 성장 뒤를 돌아봤을 때, 내가 하고 있던 것들은 그저 행위에 집착.. 2021. 12. 5.