본문 바로가기

IT78

안드로이드 클린 아키텍처 최근 회사에서 프로젝트를 진행하면서 '클린 아키텍쳐'라는 것을 처음 들었다. 물론 클린 아키텍쳐라는 용어에서 오는 느낌에서부터, 코드를 깔끔하고, 객체 지향적으로 짜기 위한 아키텍쳐일 것이라는 느낌이 오기는 했다. 그런 의미에서 안드로이드 클린 아키텍쳐에 대해 알아보자. 클린 아키텍처란? 2012년 Uncle Bob은 Clean Architecture라는 새로운 소프트웨어 아키텍처 패턴을 발표했습니다. 그는 이 패턴을 활용한다면 SW 개발의 체계적인 구조와 계층들을 분할함에 따라 이전보다 효율적으로 프로그램을 구현가능할 것이라고 말했습니다. 출처: https://juyeop.tistory.com/25 [글 쓰는 개발자의 꿈] Uncle Bob이라는 사람이 발표한 것으로, 엔터프라이즈에서 논의되고 있던 내.. 2020. 12. 18.
TDD란? 익히 들어온 TDD..에 대해서 알아보고자 한다! TDD는 뭔가 개인적으로 코딩 테스트 당시에 나오는 테스트 케이스 확장자 파일? 로 은근 봐왔던 것 같다. 실제로 개발 과정에서 테스트 케이스를 만들었고, 이러한 테스트를 통과하기 위한 코드를 짜는 것을 TDD라고 한다. TDD에 대해 자세히 알아보자! TDD란? Test Driven Development. 테스트 주도 개발. 테스트가 개발을 이끌어나가는 것을 의미한다. 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나이다. 먼저 요구사항을 검증하는 자동화된 테스트 케이스를 작성하고, 그 테스트 케이스를 통과하기 위한 코드를 생성한다. 그리고 해당 코드를 리팩토링하는 기법이다. 위의 과정을 간단히 이미지로 표현하면 다음과 같다. TDD .. 2020. 12. 9.
머신러닝과 딥러닝의 차이 면접을 보면서 받았던 질문에 대해 정리해보는 시간을 갖고자 한다. 면접을 보면서 해당 직무 중에선 관심분야가 AI 이다.. 라고 말을 했다가 굉장히 많은 질문을 받았었다. 그중 흐지부지하게 대답한 것이 있다면 단호하게 말할 수 있을 정도로 ~하는 상황에서 딥러닝과 머신러닝 중 무엇을 선택하시겠습니까? 라는 질문에서 다소 어처구니 없는 답변을 했던 것 같다(..) 면접 결과는 나오지 않았지만 개인의 궁금증 해결을 위해 해보는 차이점 알아보기! 간단히 말해서 인공지능 내에 머신러닝이, 그리고 머신러닝에 딥러닝이 포함되는 형태이다. 구체적인 차이점은 다음과 같다. 머신러닝 통계적인 경험을 통해 문제의 해법을 찾아가는 인간의 특징을 기계에 적용한 것이다. 그러나 인간의 실수까지도 기계가 그대로 학습한다는 단점이.. 2020. 11. 30.
www.도메인.com 을 치면 일어나는 일 면접 단골 질문이다. 사실 몰랐었지만 (..) 면접 스터디를 하면서 알게 되었고, 실제로 내가 진행했던 몇 회사의 필기 테스트에서도 비슷한 문제를 본 경험이 있다. 서버와 클라이언트 측면에서 설명할 수 있는 것이 좋다. IP 주소란? 컴퓨터 네트워크에서 장치들이 서로를 인식하고 통신을 하기 위해서 사용하는 특수한 번호이다. IP 주소를 줄여서 IP라고 부르기도 하지만 IP는 인터넷 규약 자체를 가리키는 말이기 때문에 엄밀하게는 구별해야 한다. 요즘 사용되는 IP 주소는 *IPv4지만 주소가 부족해짐에 따라 IPv6 주소가 널리 사용되고 있다. *IPv4는 오늘날 일반적으로 사용하는 IP 주소이다. 범위는 32비트로 0 ~ 255 사이의 십진수 넷을 쓰고 .으로 구분하여 나타낸다. 따라서 0.0.0.0 ~.. 2020. 11. 22.
손코딩 면접 준비 재귀를 이용한 피보나치 메모이제이션을 이용한 피보나치 재귀를 이용한 팩토리얼 문제 10회 1~10까지 랜덤한 숫자를 출력하여 중복된 숫자가 있을 경우 true, false를 반환 1000보다 작은 숫자 중 3과 5의 배수의 총합을 구하는 프로그램 주어진 정수배열에서 0을 가장 왼쪽으로 배치하는 함수 (추가 메모리공간 X, in-place) 배열을 오름차순으로 정렬해서 리턴하는 함수 임의의 string이 주어질 때 reverse 큐로 스택 구현하기 스택으로 큐 구현하기 최대 공약수와 최소 공배수를 구하는 알고리즘 n개의 배열에서 k(k 2020. 10. 28.
20.10.20 면접 스터디 데이터베이스에서 인덱스란? 인덱스를 사용하는 이유? 그렇다면 인덱스를 무조건 사용하는 것이 좋은가요? 아니라면 왜 인가요? 인덱스로 지정하면 좋은 Column은 어떤 것인가요? 인덱스를 사용하는 알고리즘에는 무엇이 있나요? 데이터베이스의 칼럼을 색인화하는 것을 인덱스라고 한다. 인덱스를 사용하게 되면 테이블을 풀스캔하지 않고도 빠르게 조회할 수 있게되는 것이 장점이다. 그러나 DML (INSERT, DELETE, UPDATE)이 일어나게 되면 오히려 성능이 떨어질 수 있다. 그 예로, 10만 개 이상의 레코드가 존재할 때 10개의 레코드만 남기고 DELETE 연산을 하게 되면 실제 데이터는 10개인 반면에 인덱스는 여전히 남아있어서 실제 데이터보다 많은 용량을 차지하고 있을 수도 있게된다. 따라서 인덱스.. 2020. 10. 26.
싱글톤 패턴 (Singleton Pattern) 이전에 게임 개발을 하면서, 싱글톤 패턴을 사용하여 개발한 적이 있다. 기본 Base Class를 모든 객체들이 갖고있고, 그 객체로 전체 게임을 컨트롤 할 수 있게끔 만들었는데 (Game Controller로 사용함) 막연하게 하나의 객체를 모든 객체들이 갖고있다. 라는 점만 무의식 중에 알고있어서, 명확한 정의를 알지 못해서 면접 준비를 하면서 정리된 말로 답할 수 없던 개념중에 하나이다. 아무튼 그렇다보니 한 번쯤 짚고 넘어갈 필요가 있어보여서 정리해본다. 싱글톤 패턴! 싱글톤 패턴이란? 단 하나의 객체를 생성하고, 생성된 객체를 어디서든 참조할 수 있도록 하는 패턴. 여기서 주의할 점은 클래스를 static(전역 변수)으로 선언하는 것이 아닌, 동적으로 생성하고 heap 영역에서 GC로 관리하도록.. 2020. 10. 26.
얕은 복사와 깊은 복사 오늘은 얕은 복사와 깊은 복사에 대해 알아보려한다. C++과 Java를 사용해왔기 때문에, 즉 객체지향 언어들을 사용해왔기 때문에 항상 주의해야하던 부분이기도 하다. 각각의 언어의 얕은 복사와 깊은 복사, 그리고 그 의미에 대해 알아보자. 얕은 복사(Shallow Copy)란? 간단히 말해서 동일한 클래스의 객체를 만들어서, 기존 객체가 가리키고 있는 지점을 동시에 가르키도록 만드는 것이다. (얕은 복사된 객체와, 원본 객체는 동일한 메모리 공간을 참조하고 있는 것이다) 일반적으로 객체를 복사할 때, 동일한 클래스의 새 인스턴스를 만들고, 모든 필드(변수/함수)들을 새 인스턴스에 복사하고 반환하게 된다. 이것은 얕은 복사에 해당한다. 자바에서는 Clone 함수를 사용하게 되면 얕은 복사가 일어난다. 얕은.. 2020. 10. 19.
20.10.16 면접 스터디 정규화와 비정규화 정규화의 의미와 하는 이유에 대해 설명하시오. 정규화의 장점과 단점 비정규화의 의미와 하는 이유에 대해 설명하시오. 비정규화의 장점과 단점 정규화는 관계형 데이터베이스에서 중복을 최소화하기 위해 데이터를 구조화하는 작업이다. 제1정규형, 제2정규형, 제3정규형, BC정규형, 제4정규형, 제5정규형이 존재한다. 정규화는 데이터베이스를 사용하다보면 갱신 이상, 삽입 이상, 삭제 이상과 같은 것들이 발생할 수 있는데, 이를 방지하여 데이터 무결성을 보장하기 위해 정규화를 하게 된다. 제1정규형 : 도메인이 원자값 제2정규형 : 부분적 함수 종속 제거 제3정규형 : 이행적 함수 종속 제거 BC정규형 : 결정자이면서 후보키가 아닌 것 제거 제4정규형 : 다치 종속 제거 제5정규형 : 조인 종속성.. 2020. 10. 16.
20.10.12 면접 스터디 1. TCP & UDP TCP와 UDP의 차이점은 무엇인가요? TCP와 UDP 각각의 사용하는 서비스는 무엇인가요? TCP와 UDP는 실제 데이터 단위를 받기 위해 IP를 사용하는 프로토콜이다. TCP의 경우에는 연결형 서비스이고, 높은 신뢰성 갖고있다. UDP보다 속도가 느립니다. 그러다보니 연속성보다 신뢰성있는 전송이 중요할 때 사용한다. http, email 등에 사용된다. UDP는 여러 컴퓨터를 거치지 않고 데이터를 주고 받을 컴퓨터끼리 직접 연결할 때 사용한다. 따라서 UDP는 목적지에 도달하지 않을 수도 있는 특성이 있어서 비신뢰적이고 안정적이지 않다. 그러나 TCP보다 속도가 매우 빠르고 편해서 데이터 유실이 일어나도 상관이 없는 스트리밍이나 화면 전송에 사용된다. 2. 로드밸런싱 서버에 많.. 2020. 10. 12.