목록전체 글 (49)
오늘부터 공부한다
스택과 큐는 자료구조에서 가장 먼저 배우는, 가장 기본적인 자료구조이다. 알고리즘에서 많이 쓰인다는 자료구조들이 점차 배열로 해결가능해지자 자료구조를 이해하지 않고 코딩을하는 사람이 늘기 시작했다. 하지만 자료구조의 개념을 인지하고 활용하면 분명 코드와 개발에 도움이 될것이라 생각하기에 이 글을 작성해본다. 스택, 큐 대부분의 사람들 모두가 스택과 큐의 차이점을 말하라고 하면, 스택은 후입선출(LIFO), 큐는 선입선출(FIFO)라고 말한다. 후입선출은 가장 늦게 넣은 데이터가 가장 빨리 나가는 것. 선입선출은 가장 빨리 넣은 데이터가 가장 빨리 나간다는 뜻이다. 아마 이보다 더 쉽게 설명할 수 있는 글은 없는 것 같다. 하지만 작성자는 여기서 조금 더 설명해 보겠다. 1. 스택 스택은 객체들의 집합소로..
압축은 데이터 크기를 줄여서 저장공간을 더욱더 잘 활용하기 위한 기술이다. 파일을 압축할 때에는 압축 알고리즘을 사용하여 압축을 하게 되는데, 압축된 파일을 손상 없이 원래대로 되돌릴 수 있다면 이를 비손실 압축(Lossless Data Compression)이라 하고, 원래대로 복원할 수 없다면 손실 압축(Loss Data Compression)이라 한다. 쉽게 생각하자면 .zip, .7z와 같이 파일을 바꾸더라도 내용이 변하지 않는 것을 무손실 압축이라고 하고 .avi, .jpg, .gif와 같이 바꿀 수 있는 멀티미디어들을 손실 압축이라고 한다. 1. 무손실 압축 무손실 압축은 앞서 설명한 압축 프로그램 (알집, 7zip, 반디집)같은 프로그램으로 압축하는 프로그램을 뜻한다. 압축을 하더라도 원본 ..
코딩할 때는 뺄 수 없는 서비스 중 하나가 GitHub이다. GitHub는 내가 코딩 공부를 하면서 꾸준히 사용해라는 가르침을받았다. (물론 계정만 만들고 사용하지 않았다.) 그래서 이번에는 본격적으로 GitHub를 사용해보고, 코드를 정리하려고 한다. GitHub란? 소프트웨어 개발 프로젝트를 위한 소스코드 관리 서비스다. 소스를 열람하고, 버그 관리, SNS등 개발자에게 필요한 대부분의 서비스를 다 지원한다. GitHub사용을 위한 기초 지식 1. 로컬 저장소와 원격 저장소 GitHub 저장소는 파일이나 디렉토리를 저장하는 장소이다. 변경 이력을 관리하는 곳으로, 디렉토리에 있는 파일 등의 변경 내역을 기록할 수 있다. 2. 커밋과 푸시 커밋 (commit) : 파일을 추가하거나 변경 내용을 저장소에..
글쓴이는 자바스크립트로 코딩을 하던 도중, 논리적으로는 옳지만 배열에 중복되는 값이 꾸준히 들어가는 에러를 마주했다. 꾸준한 삽질을 통해 얕은 복사와 깊은 복사에 대해 알게되었다. 왜 이걸 이제 알았을까? 나는 지금이라도 까먹지 않도록 얕은 복사와 깊은 복사에 대해 공부하고 기록하기로 했다. 객체의 복사는 얕은 복사(swallow copy)와 깊은 복사 (deep copy)로 나뉜다. 1. 얕은 복사란? 얕은 복사는 배열을 복사하지만 복사한 객체가 바뀌면서 참조되고 있는 배열 또한 변하는 것이다. 1 2 3 4 5 6 7 var array = [1,2,3,4]; var shallowCopy = array; shallowCopy [0] = 5; console.log(shallowCopy); // 결과값: ..
BCNF는 제 3 정규화 + 모든 결정자(X)가 후보키인 정규형이다. 제 3 정규형에는 후보키가 여러 개 존재하고, 후보키들이 서로 중첩되는 경우에만 사용할 수 있다. 기본키는 (학번, 과목명)이다. 따라서 이는 담당교수의 결정자가 된다. 결정자를 결정하는 다른 경우를 살펴본다. 1. 학번일 경우, 171749은 데이터베이스, 네트워크를 가졌으며, =담당 교수도 홍길동, 유관순으로 X에 따라 Y가 결정되지 않는다. 따라서 학번은 결정자가 아니다. 2. 과목명일 경우, 데이터베이스가 홍길동과 이순신을 가르킨다. 따라서 담당교수를 결정하지 않는다. 과멱명 또한 학번이 다르기에 과목명은 결정자가 아니다. 3. 담당교수의 경우, 홍길동 -> 데이터베이스, 이순신 -> 데이터베이스, 유관순 -> 네트워크로 담당교..
그래프 1) 2개 이상의 경로가 가능하다. 노드들 사이에 무방향/방향에서 양방향 경로를 가질 수 있다. 2) self-loop 뿐 아니라 loop/circuit 모두 가능하다. 3) 루트 노드라는 개념이 없다 4) 부모-자식 관계라는 개념이 없다 5) 그래프의 순회는 DFS나 BFS로 이루어진다. 6) 그래프는 Cyclic 혹은 Acyclic이다. 7) 그래프는 크게 방향 그래프와 무방향 그래프가 있다. 8) 간선의 유무는 그래프에 따라 다르다. 9) 그래프는 네트워크 모델이다 트리 1) 트리는 그래프의 특별한 케이스이며 "최소 연결 트리"라고도 불린다. 두 개의 정점 사이에 반드시 1개의 경로만을 가진다. 2) loop나 circuit이 없다. 당연히 self-loop도 없다. 3) 한 개의 루트 노드..
WBS는 프로젝트 범위와 최종산출물을 세부요소로 분할한 계층적 구조도라고 정의한다. -프로젝트의 요소를 산출물의 관점에서 계층적으로 그룹화 한 것으로프로젝트의 범위를 정의, 개발하고 검증하는 도구다. - 즉, WBS에 표현되지 않으면 프로젝트 범위가 아닌 것으로 간주할 수 있도록 구조적인 표현을 통하여 하위 그룹 또는 수준(Level)으로 갈수록 상세하게 기술한다. 말은 어렵지만 단순하게 말하면 프로젝트 일정관리라고 표현할 수 있다. WBS의 역할 전체 큰 업무를 분류하여 구성 요소로 만든 후 각 요소를 평가, 일정별 계획, 그것을 완수할 수 있는 사람에게 할당해주는 역할을 수행한다. 본래 목적의 WBS 의 경우에는 담당자, 예산 등 프로젝트에 들어갈 수 있는 자원들을 기입하여 해당 내용을 적극적으로 관..
빅데이터는 우리가 자주 듣는 용어다. 이름 그대로 수많은 데이터들의 집합이라는 뜻이다. 빅데이터의 특징은 크기(Volume), 다양성(Variety), 속도(Velocity)로 요약할 수 있다. 데이터의 물리적인 크기를 말하는 - Volume 데이터의 형태 유뮤와 연산 가능 여부에 따라 나눠지는 데이터의 다양성 - Variety 그리고 이들을 빠르게 분석하고 처리하는 속도인 - Velocity로 나뉜다. 실시간으로 생성되는 데이터의 크기와 특징이 다양한 만큼, 이를 활용하는 속도 또한 빼놓을 수 없는 요소가 되었다. 최근에는 정확성(Veracity), 가변성(variavility), 가치(Value), 시각화(Visualization)등의 속성이 추가되어 불리기도 한다. 빅데이터는 우리가 사용하는 스마트..
결합도와 응집도는 모듈의 독립성을 판단하는 두 가지 지표이다. 결합도(또는 의존도)는 어떤 모듈이 다른 모듈에 의존 정도를 말한다. 응집도는 모듈 내부의 기능적인 집중 정도라고 할 수 있다. 이상적인 모듈화는 결합도는 낮을 수록, 응집도는 높을 수록 "유지보수성이 높다"라고 할 수 있다. 결합도가 높은 클래스의 문제점 연관된 다른 클래스가 변경되면 더불어 변경이 필요하다 수정하려는 클래스를 이해하기 위해 연관된 클래스를 함께 이해해야한다. 다른 프로그램에서의 클래스를 재사용하기 힘들다. 응집도가 낮은 클래스의 문제점 이해하기 어려움 재사용하기 힘듦 유지보수가 어려움 다른 클래스의 변화에 민감함 결합도(Coupling) 위에서 설명했듯이 소프트웨어 공학에서의 결합도는 모듈과 모듈간의 상호 의존을 말한다. ..
서브넷 마스크와 서브넷팅 계산 방법 하나의 네트워크에 16,777,214개의 호스트 IP를 할당할 수 있는 A 클래스 는 엄청나게 큰 규모의 국제적인 기업 또는 단체가 아니라면 매우 비효율적이다. 만약 이 장치가 4개가 있는 가정집에 A 클래스를 그대로 부여한다면 Network Address와 Broadcast Address까지 포함하여 6개가 사용되고 남은 16,777,208개는 아무도 사용하지 않고 낭비된다. 이러한 문제를 해결하기 위해 IP를 사용하는 네트워크 장치들의 수에 따라 효율적으로 사용할 수 있는 서브넷(Subnet)이 등장하게 되었다. 서브넷 마스크는 IP주소 체계의 Network ID와 Host ID를 서브넷 마스크를 통해 변경하여서 '네트워크 영역을 분리 또는 합체' 시키는 개념이다...