전체 글
객체지향 5원칙, SOLID
우아한 테크코스에서 @손너잘이 객체지향 5원칙에 대한 스터디를 열어주셔서, 뭣도 모르지만 일단 참여를 눌렀다. (난 항상 뭣도 몰라도 참여를 누른다...). 그래서 우선은 SOLID에 대해서 찾아본 내용들을 적어보려고 한다! 이론을 먼저 작성한 뒤, 내 경험(짧지만)에 빗대어 어떤 이슈가 있었는지?에 대해서도 아이디어를 적어볼까 생각한다 😋시작에 앞서..SOLID는 좋은 객체 지향 설계를 위한 5가지 원칙이라고 흔히들 말한다. 객체 지향은 무엇이고 또 좋은 객체 지향 설계는 무엇일까? 객체지향이란 핵심 의존성들을 역전시킴으로써 경직된 코드나 취약한 코드 및 재사용 불가능 코드가 되지 않게 하는 식으로 의존체들을 관리하는 일이며, 이를 위해 프로그램을 어떻게 설계해야하는지에 대한 개념이자 방법론이다. 이 ..
[머신러닝 기초] How to train Neural Network?
어떻게 Neural Network를 학습시킬 수 있을까? Neural net은 두 가지 방향의 계산을 통해서 학습이 이루어진다. forward propagation: 현재 weight에 대해 loss를 계산한다. back propagation: loss를 뒤에서부터 앞으로 보내면서 가중치를 업데이트한다. Backpropagation backpropagation(역전파)이란 역방향으로 오차를 전파시키면서 각 층의 가중치를 업데이트하고 최적의 학습 결과를 찾아가는 방법이다. 역전파를 이용한 가중치 업데이트 절차는 아래와 같이 요약할 수 있다. 1. 주어진 가중치 값을 이용해 출력층의 출력값을 계산함. 2. 오차를 각 가중치로 미분한 값을 기존 가중치에서 빼준다. (여기서 경사 하강법을 적용하며, 역전파를 통..
자주 쓰이는 AssertJ 메서드
TDD를 처음 하면서, AssertJ를 사용하게 되었는데 쓰면서 자주 쓰이는 부분들을 남겨놓으려 한다. (맨날 검색하기 때문..ㅎ) assertThat assertThat은 함께 사용할 수 있는 유용한 메서드가 몇가지 된다. 필요에 따라서 사용하면 될 듯 ! assertThat(3).isBetween(2,5); assertThat(actual).isEqualTo(expected); assertThat(3).isGreaterThan(1); assertThat(3).isGreaterThanOrEqualTo()assertEqauls assertEquals(actual, expected); // `actual`은 `expected`와 같나요?assertTrue, assertFalse assertTrue(x); ..
[논문 리뷰] SRCNN - Image Super-Resolution Using Deep Convolutional Networks
논문 바로가기 arxiv.org/pdf/1501.00092.pdf 이 논문에서는 딥러닝을 이용한 Single Image Super-Resolution 방법을 제안하고 있다. direct로 low/high-resolution image 사이의 매핑 방법을 end-to-end로 학습시킨다. Mapping 방법은 CNN을 이용하며 low-resolution의 input을 high-resolution의 output으로 만들어낸다. SRCNN은 위 그림과 같이 크게 3가지로 구성되어있다. 1. Patch extraction and Representation 이 과정에서 우리는 저해상 이미지로부터 patch를 추출해내며 고차원의 벡터로 representation하는 과정을 거친다. 이 때, 이 벡터들은 피쳐맵으로 ..
[정보처리기사] 파트별 요약
문제 풀다 틀린 내용 위주로 요약한 내용입니다! 모든 내용을 담고 있지 않다는 점 유의해주시고, Ctrl+F로 필요한 내용만 찾아 보시는 것을 추천 드립니다 😄 Part.1 소프트웨어 설계 스크럼 개발 프로세스 제품 백로그 설정 -> 스프린트 백로그 설정 -> 스프린트 수행 -> 스프린트 회고 -> 데일리 미팅 수행 스크럼의 특성 특정 언어나 방법론에 의존적이지 않으며 넓은 응용 범위의 개발 기법 소프트웨어 개발 방법론 종류 구조적 방법론: 폭포수 모델 정보공학 방법론: 데이터나 모델링을 기반으로 한 프로토타입의 개발 방법론 객체지향 방법론 컴포넌트 기반 방법론 통신 프로토콜 기본 구성 요소 구문, 타이밍, 의미 이 타이밍에 이 말은 무슨 뜻이지? 사물의 유형 구조 사물: 시스템의 개념적, 물리적 요소 ..
[programmers] 네트워크 python
🐳 링크 프로그래머스 네트워크 🐕 문제 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다. 컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 네트워크의 개수를 return 하도록 solution 함수를 작성하시오. 🐾 풀이 방법 컴퓨터의 번호를 기준으로 탐색한다. 먼저, 컴퓨터의 수 만큼 visit이라는 방문 배열을 만든다. 해당 번호의 컴퓨터를 방문했다면 vi..
[programmers] 타겟 넘버 python
🐳 링크 프로그래머스 타겟넘버 🐕 문제 n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3 +1+1+1+1-1 = 3 사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요. 🐾 풀이 방법 상태 트리를 생각해보면, 각 numbers의 원소에 대해서 취할 수 있는 경우의 수는 더하거나, 빼거나 둘 중 하나이다..
[백준] 3190. 뱀 python
🐳 링크 백준 3190번 뱀 🐕 문제 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임은 NxN 정사각 보드위에서 진행되고, 몇몇 칸에는 사과가 놓여져 있다. 보드의 상하좌우 끝에 벽이 있다. 게임이 시작할때 뱀은 맨위 맨좌측에 위치하고 뱀의 길이는 1 이다. 뱀은 처음에 오른쪽을 향한다. 뱀은 매 초마다 이동을 하는데 다음과 같은 규칙을 따른다. 먼저 뱀은 몸길이를 늘려 머리를 다음칸에 위치시킨다. 만약 이동한 칸에 사과가 있다면, 그 칸에 있던 사과가 없어지고 꼬리는 움직이지 않는다. 만약 이동한 칸에 사과가 없다면, 몸길이를 줄여서 꼬리가 위치한 칸을 비워..
[백준] 2563. 색종이 python
🐳 링크 백준 2563번 색종이 🐕 문제 가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오. 그림 출처: https://www.acmicpc.net/problem/2563 예를 들어 흰색 도화지 위에 세 장의 검은색 색종이를 그림과 같은 모양으로 붙였다면 검은색 영역의 넓이는 260이 된다. 🐾 풀이 방법 매우 단순하게, 2*2 색종이의 넓이를 계산한다고 생각해보자. 이때, 색종이의 넓이는 2*2 = 4로 계산할 수도 있고, 색종이를 모..
[백준] 1965. 상자 넣기 python
🐳 링크 백준 1965번 상자넣기 🐕 문제 정육면체 모양의 상자가 일렬로 늘어서 있다. 상자마다 크기가 주어져 있는데, 앞에 있는 상자의 크기가 뒤에 있는 상자의 크기보다 작으면, 앞에 있는 상자를 뒤에 있는 상자 안에 넣을 수가 있다. 예를 들어 앞에서부터 순서대로 크기가 (1, 5, 2, 3, 7)인 5개의 상자가 있다면, 크기 1인 상자를 크기 5인 상자에 넣고, 다시 이 상자를 크기 7인 상자 안에 넣을 수 있다. 하지만 이렇게 상자를 넣을 수 있는 방법은 여러 가지가 있을 수 있다. 앞의 예에서 차례대로 크기가 1, 2, 3, 7인 상자를 선택하면 총 4개의 상자가 한 개의 상자에 들어가게 된다. 상자의 크기가 주어질 때, 한 번에 넣을 수 있는 최대의 상자 개수를 출력하는 프로그램을 작성하시오..