override overload

Override VS Overload

Overriding

상속에서 나온 개념
부모 클래스의 메소드를 하위 클래스에서 재정의 하는 것

Overloading

같은 이름의 메소드를 여러개 정의하는 것
매개 변수의 타입이 다르거나 갯수가 달라야 한다.
리턴 타입과 접근 제어자는 영향을 주지 않는다.

다형성

하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 말한다.

자료구조 트리

Tree

노드로 이어진 자료 구조

  1. 하나의 루트 노드를 갖는다.
  2. 루트 노드는 0개 이상의 자식 노드를 갖는다.
  3. 비선형 자료구조로 계층적 관계를 표현한다. (ex: 디렉토리)

용어

  • 루트노드 : 부모가 없는 노드
  • 단말노드(leaf node) : 자식이 없는 노드
  • 내부노드(internal node) : 단말 노드가 아닌 노드
  • 간선(edge) : 노드를 연결하는 선
  • 형제(sibling) : 같은 부모를 가지는 노드
  • 노드의 크기(size) : 모든 노드의 갯수
  • 노드의 깊이(depth) : 루트에서 특정 노드까지 진입하는데 거쳐야 하는 간선의 수
  • 노드의 레벨 : 트리의 특정 깊이를 가지는 노드의 집합

    ?

  • 노드의 차수(degree) : 하위 트리 개수 / 간선 수 = 각 노드가 가진 가지의 수
  • 트리의 차수(degree of tree): 트리의 최대 차수
  • 트리의 높이(height) : 루트 노드에서 가장 깊이 있는 노드의 깊이

특징

  • 그래프의 한 종류이며, '최소 연결 트리'라고 불린다
  • 트리는 계층 모델이다
  • 노드가 N개인 트리는 항상 N-1개의 간선을 가진다
  • 루트에서 특정 노드로 가는 경로는 유일하다
  • 임의의 두 노드간의 경로도 유일하다
  • 한개의 루트 노드를 가지며, 자식 노드는 하나의 부모 노드를 가진다

더 공부할 내용

  • 순회는 Pre-order, In-order, Post-order로 이루어진다.
  • 이진 트리, 이진 탐색 트리, 균형 트리, 비균형 트리, 이진 힙 등
  • 완전 이진 트리, 전 이진 트리, 포화 이진 트리

7layer

OSI 7 Layer

국제표준화 기구에서 개발한 모듈.
이론적으로 네트워크의 역할을 계층별로 나눠서 설명하는 것

인캡슐레이션

상위계층에서 온 데이터에 헤더와 트레일러를 씌워 캡슐화를 하는데, 헤더에는 주로 송신자와 수신자, 트레일러에는 주로 오류검출을 위한 데이터를 씌운다.

OSI MODEL

Host Layer

|Layer|Data|Layer|Desc|Desc2|
|7|Data|Application|Network Process to Application|사용자가 편리하게 사용할 수 있는 UI 제공|
|6|Data|Presentation|Data representation and Encryption|어플리케이션 별로 이해 가능한 포맷으로 데이터를 변환해주며, 데이터 암호화, 복호화 압축등의 기능도 제공|
|5|Data|Session|Interhost communication|양 끝단의 응용프로세스가 통신을 관리하기 위한 방법을 제공한다|
|4|Segment|Transport|End-to-End Connection and Reliability|서비스를 구분하고 데이터의 전송을 담당하는 계층. 상위계층에서 넘어온 데이터를 안전하게 전송하도록 제어기능을 제공하고, 수신한 데이터를 정확한 어플리케이션으로 전달하는 역할|

Media Layer

|Layer|Data|Layer|Desc|Desc2|
|3|Packet|Network|Path Determination and IP (Logical Addressing)|논리적 주소를 기반으로 데이터 전송 경로를 결정하는 계층. 통신이 가능한 물리적인 구역을 논리적으로 구분시켜 식별하게 해줌. 경로를 결정하는 역할도 있다.|
|2|Frames|Data Link|Mac and LLC (Physical addressing)|물리적으로 구성된 네트워크 환경이며, 통신 프로토콜을 지원해주는 계층|
|1|Bits|Physical|Media, Signal and Binary Transmission|데이터링크 계층에서 받는 bit열을 전기신호(0, 1)로 전송하는 역할|

OSI Model VS TCP/IP Model

자료구조 힙

자료구조 Heap

우선 순위 큐(데이터들은 우선순위를 가지고 있고, 높은 우선순위가 먼저 나간다.)를 위하여 만들어진 자료구조
배열, 연결리스트, 힙을 이용하여 힙을 구현할 수 있다.

  • 완전 이진트리의 일종으로 우선순위 큐를 위하여 만들어진 자료구조이다.
  • 힙은 일종의 반 정렬 상태(느슨한 정렬 상태)를 유지한다.
  • 부모노드의 키 값이 자식 노드의 키 값보다 항상 큰(작은) 이진 트리

자료구조 Heap의 종류

  • 최대 힙(max heap)
  • 부모 노드의 키 값이 자식 노드의 키 값보다 크거나 같은 완전 이진 트리
  • 최소 힙(min heap)
  • 부모 노드의 키 값이 자식 노드의 키 값보다 작거나 같은 완전 이진 트리

Heap 구현 (배열)

  • 부모노드와 자식 노드의 관계
  • 0번째 배열 인덱스는 사용하지 않는다.
  • root 부모의 배열 인덱스는 1
  • 왼쪽 자식의 배열 인덱스 = 부모 배열 인덱스 * 2
  • 오른쪽 자식의 배열 인덱스 = 부모 배열 인덱스 * 2 + 1
  • 부모 배열 인덱스 = (자식의 배열 인덱스) / 2

Heap 삽입 (배열)

  1. 새로운 노드는 부모노드와 조건을 비교후 삽입한다.
  2. 마지막 노드까지 비교후 삽입이 완료된다.
  3. 마지막 노드에 도달하면, 부모 노드와 비교후 부모보다 클 경우 교환을 반복한다.

Heap 삭제 (배열)

  1. 최대 힙에서 최대값은 루트 노드이므로 루트 노드를 삭제한다.
  2. 루트노드에는 힙의 마지막 노드(배열의 마지막 위치 노드)로 교체한다.
  3. 루트노드를 자식노드와 비교하여 큰 값과 교체 하며 재구성한다.

사례

네트워크 트래필 제어
운영체제 작업 스캐줄링

자료구조 처리순서 비교

스택

  • 가장 최근에 들어온 데이터

  • 가장 먼저 들어온 데이터

    우선선위 큐(Priority Queue)

  • 우선순위가 높은 데이터

2021-10-03-[CS 메모리]-힙 vs 스택 메모리

CS ??

한동한 세상 돌아가는 일에서 멀어진거 같다는 생각이 들었다. CS CS 뭐 이러길래 CS가 뭐냐고 물었더니
CS (Computer Science)라고 한다고 한다. 그래서 검색을 해봤더니 컴공에서 배우는 커리큘럼이라고 한다는데.. 다들 그렇게 쓰는데, 나만 모른다면 안되자나.

암튼 프로그래머스로 뭔가 검증을 받을 일이 있었는데, 현타가 왔다. 툴에대한 이질감도 좀 들었고, 검색제한과 어시스턴스의 기능이 빠진곳에서의 현실자각이라고 할까...
앞으로 열흘간 기본부터 다시 한번 다지는 시간을 가져보려고 한다.

스택 VS 힙

운영체제로부터 할당받는 메모리 공간

  1. 코드영역
  2. 데이터 영역
  3. 힙 영역
  4. 스택 영역

메모리

주소 메모리
~ 스택 영역 컴파일타임 - 함수 호출과 관계되는 지역변수와 매개변수가 저장. 함수의 호출시 할당. 완료시 소멸
힙 영역 런타임 - 동적 할당(malloc)
데이터 영역 전역/정적 변수, 문자열 상수 저장
0 코드 실행할 프로그램 코드(어셈블리)

스택

스택 영역은 메모리의 높은 주소에서 낮은 주소로 할당됨.
스택영역에 저장되는 함수의 호출 정보를 스택 프레임(stack frame)이라고 함

장점

  1. 데이터 액세스가 빠른편이고, 변수를 명시적으로 할당/해제할 필요가 없다.
  2. 하나의 명령으로 메모리 조작/주소 조작이 가능하다.

    단점

  3. OS에 따라 스택 크기 제한이 있다.
  4. 변수의 크기를 조정할 수 없다.

힙 영역은 메모리의 낮은 주소에서 높은 주소로 할당됨.
사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다.

장점

  1. 메모리 크기에 제한이 없다.
  2. 필요한 크기를 미리 알 수 없는 경우에 사용이 가능하다.

단점

  1. 데이터 액세스가 느린편이고, 메모리 관리를 해야 한다.
  2. 힙 손상 가능성
    • 이중 해제, 해제 후 사용 등
  3. 힙 경합으로 인한 속도 저하
    • 두 개 이상의 쓰레드에서 동시에 데이터 액세스 경합이 발생할 경우

스택 오버플로우

스택은 지역변수를 사용하고 소멸하기 때문에, 스택과 힙이 충돌하는 오버플로우 발생 가능성

2021-10-03-[CS 디자인패턴] MVC, MVP, MVVM

디자인 패턴

설계 문제에 대한 해답을 문서화 하기 위해 고안된 형식 방법이다. 건축학에서 부터 발전하였다.
Gof(Gang of Four)라 불리는 네명의 컴퓨터 과학 연구자들이 쓴 서적 'Design Patterns: Elements of Reusable Object-Oriented Software('재이용이 가능한 객체지향 소프트웨어의 요소')'이다.

MVC

graph LR
A(Action)-->C(Controller)
C(Controller)-->V(View)
C(Controller)-->M(Model)
M(Model)-->V(View)

Model, View, Controller로 구성되어 있다.

  1. Action은 Controller로 전달
  2. Controller는 사용자 Action을 학인하고, Model을 업데이트 한다.
  3. Controller는 Model을 표현할 View를 선택
  4. View는 Model을 이용해 화면을 표현한다.

특징

Controller는 1:n으로 view와 연결됨
Controller는 View를 선택할 뿐 직접 업데이트는 하지 않는다? (View는 Controller를 알지 못함)

장점

단순

단점

View와 Model의 의존성이 높다.

MVP

graph LR
A(Action)-->V(View)
P(Presenter)-->V(View)
V(View)-->P(Presenter)
P(Presenter)-->M(Model)
M(Model)-->P(Presenter)

Model, View, Presenter로 구성되어 있다.
Presenter는 View에서 요청한 정보로 Model을 가공하여 View에게 전달해 준다.

특징

Presenter는 View와 1:1 관계이다.

장점

  1. View와 Model의 의존성이 없다.

단점

  1. 복잡해 질수록 View와 Presenter 사이의 의존성이 강해진다.

MVVM

graph LR
A(Action)-->V(View)
V(View)-->VM(View Model)
VM(View Model)-->M(Model)
M(Model)-->VM(View Model)

Model, View, View Model로 구성되어 있다.
View Model은 View를 표현하기 위해 만든 View를 위한 Model이다.

특징

MVVM패턴은 Command 패턴과 Data Binding 두가지 패턴을 사용하여 구현되었다.
ViewModel과 View는 1:n 관계이다.

장점

  1. View와 Model 사이의 의존성을 없앴다.

단점

  1. View Model의 설계가 쉽지 않다.

Visual Studio Code에 git 설정

Visual Studio Code를 사용하여 javascript를 편집할 일이 생겼다.
(개인적으로 뭔가 해보고 싶은놈이 생겨서.. 소스 분석 및 테스트가 필요했다.)
편집툴이 뭐가 좋을까 고민하다가 Visual Studio Code를 선택했는데...

자잘 자잘하게 수정하다보니 어디를 고쳤는지 확인이 불가능해져서, git이 필요해졌다. svn만 사용하다보니.. git은 익숙하지 않은데 그것보다 어디있는지 찾을수가 없었다.

간단히 답을 드린다면, 위와 같이 설정에서 추가할 수가 있다.
그런데, 아무리 실행해도 실행이 되지 않는 것이였다.
(사실 Visual Studio Code를 다운받고 정상 실행이 안되서 좀 당황했었다.)
git 클라이언트를 설치했음에도 불구하고, git 설정이 되지 않은것처럼 보였다.
"난 개발자라고.." 분노가 치밀었다.

다른 블로그들을 보니 git scm을 설치하라고 하는데...
"난 개발자자나??" 라며 "macOS에는 디폴트로 git이 설치 되어 있는데??"라는 의심을 품었다.

git scm 설치 페이지

역시 이 문제가 아니였다.
스택오버플로어에 유능하신 분들이 내게 답을 주었다...
"새 맥북이라 XCode 설치를 완료 하지 않았기 때문이라는 것을"

Xcode 설치 완료후 정상 구동... 확인

그런데 또 다른 난관에 부딪혔다.

git 사용자 정보 설정창은 보이지 않았다.

어딨니? 로그인 하는 창아...

뭔가 싶어 SourceTree 를 설치해봤는데 정상동작 확인...
역시 설정문제라는 판단이 들어서 검색을 해보았더니... ㅠㅠ
역시 맘에 들지 않는 답변들만 있어서.. 아래 명령어로 가이드를 받아서 진행하면된다.

$ git commit
이메일 하고 사용자 이름 등록하면 실패가 나는데 아래와 같이 등록해주면 잘됨.

git config --global user.name "유저네임"

그리고, git commit을 다시 때려주면, git push를 하라고 함. 이때 패스워드 입력하면 잘됨.

참고로 시놀로지 나스 git 접속 방법은 다음과 같다.

ssh://(NAS에생성했던계정)@(NAS의 DDNS):(포워딩한 port)/volume1/homes/(사용자계정폴더)/(Repository 폴더명)