IT강의 97

Java 상속 기초

이번 시간에는 상속을 Java로 살펴보겠습니다. 상속 (Inheritance) - "기존꺼 그대로 가져와서 쓰자!" - 기존에 있던 클래스의 변수, 함수를 물려받아 새로운 클래스를 작성하는 것을 의미합니다. - 기존에 있던 변수, 함수를 그대로 가져와서 쓴다고 이해하면 되고 새로 추가할 수도 있습니다. - 기존에 있던 함수를 재구현 할 수도 있는데, 이것을 '메소드 오버라이딩 (Method Overriding)' 이라고 합니다. 자세한 설명은 아래 링크에서 볼 수 있습니다. https://sharpcoder.tistory.com/175 그렇다면 상속을 사용하는 이유는 무엇일까요? 바로 코드의 재사용성을 높이고 코드 유지 보수를 쉽게 할 수 있도록 하기 위해서 입니다. 만약 상속을 사용하지 않고 따로따로 ..

Java 메소드 오버로딩

이번 시간에는 메소드 오버로딩을 Java로 살펴보겠습니다. 메소드 오버로딩 (Method Overloading) - "동명이인!" - 함수 이름만 같고 매개 변수, 리턴 타입 등은 다른 것을 의미합니다 - 변형, 변질되는 특성이 있으므로 Polymorphism(다형성)에 해당합니다 맨 위의 그림을 Java로 구현하였습니다. (소스 코드는 맨 밑에서 다운받을 수 있습니다) 위의 코드를 실행하겠습니다. 함수를 어떻게 호출하느냐에 따라 실행되는 함수가 달라집니다. 따라서 실행 결과는 위와 같습니다. [소스 코드] https://github.com/jhs951101/JavaOverloading [출처] 위키백과: 메소드 오버로딩

Java 메소드 오버라이딩

이번 시간에는 메소드 오버라이딩을 Java로 살펴보겠습니다. 메소드 오버라이딩 (Method Overriding) - "전에 있는 걸 갈아 엎어버리자!" - 슈퍼 클래스에서 구현된 함수를 서브 클래스에서 재구현하는 것을 의미합니다 - 완전히 같은 두 함수가 슈퍼 클래스(부모 클래스)와 서브 클래스(자식 클래스)에 각각 있다고 이해하면 됩니다 - 변형, 변질되는 특성이 있으므로 Polymorphism(다형성)에 해당합니다 맨 위의 그림을 일부 Java로 구현하였습니다. (소스 코드는 맨 밑에서 다운받을 수 있습니다) 클래스 A, B, C 가 있고 'A→B→C' 로 상속 받고 있습니다. 다시 말해, A가 슈퍼 클래스 입니다. 슈퍼 클래스 A에 func() 함수가 있고, 서브 클래스 B, C에 재구현 되어 있..

크루스칼 알고리즘 (2) - 소스 코드

샤핑 지훈심 / 주로 IT 강의를 진행하는 공간입니다 ㅋㅋ 비즈니스 문의(프로그래밍 외주, 강연 등) 및 기타 질문은 아래의 이메일 참고 바랍니다. spg1101@naver.com www.youtube.com 이번 시간에는 크루스칼 알고리즘을 소스 코드로 살펴보겠습니다. [동작 원리] 구체적인 동작 원리는 아래의 링크로 들어가서 이해하기 바랍니다. 노드 내의 알파벳을 숫자로 바꾼 것만 제외하면 똑같습니다. https://sharpcoder.tistory.com/161 [소스 코드] 아래의 링크에서 다운로드 가능합니다 https://github.com/jhs951101/Kruskal [결과 화면]

다익스트라 알고리즘 (2) - 소스 코드

샤핑 지훈심 / 주로 IT 강의를 진행하는 공간입니다 ㅋㅋ 비즈니스 문의(프로그래밍 외주, 강연 등) 및 기타 질문은 아래의 이메일 참고 바랍니다. spg1101@naver.com www.youtube.com 이번 시간에는 다익스트라 알고리즘을 소스 코드로 살펴보겠습니다. [동작 원리] 구체적인 동작 원리는 아래의 링크로 들어가서 이해하기 바랍니다. 노드 내의 알파벳을 숫자로 바꾼 것만 제외하면 똑같습니다. https://sharpcoder.tistory.com/162 [소스 코드] 아래의 링크에서 다운로드 가능합니다 https://github.com/jhs951101/Dijkstra [결과 화면]

트리와 그래프의 차이

이번 시간에는 트리와 그래프의 차이를 살펴보겠습니다. 트리와 그래프 모두 각 노드가 불규칙적으로 연결되어 있는 구조이지만 차이가 있습니다. 트리 (Tree) - "엄격한 상하 관계" - 간선에 방향이 정해져 있고 부모-자식 관계가 존재합니다. 따라서 해당 노드보다 상위에 있다면 '부모 노드(parent node)' 라고 하고 하위에 있다면 '자식 노드(child node)' 라고 합니다. 위에 b를 기준으로 a는 부모 노드 이고 d는 자식 노드 입니다. - 만약 직속 상위 노드가 같고 레벨이 같다면 '형제 노드(sibling node)' 라고 합니다. 위에 e를 기준으로 f는 직속 상위 노드(c)가 동일하고 레벨이 같으므로 형제 노드 입니다. - 트리에서 가장 위에 있는 노드 하나를 '루트 노드(뿌리 노..

연결 리스트의 종류

이번 시간에는 연결 리스트의 종류를 살펴보겠습니다. 연걸 리스트는 각 노드가 한 줄로 연결되어 있는 구조이지만 종류마다 차이가 있습니다. (1) 단순 연결 리스트 (Linked List) - 연결선의 방향이 단방향이고 맨 마지막 노드가 NULL 값을 가리킵니다. - 장점 - 구현하기 쉽고 구조도 간단합니다. - 단점 - 이전 노드에 접근할 수 없으므로 접근성이 떨어집니다. - 맨 마지막 노드가 NULL 값을 가리키므로 NULL 포인터 에러가 발생할 수 있습니다. (2) 원형 연결 리스트 (Circular Linked List) - 연결선의 방향이 단방향이고 맨 마지막 노드가 맨 처음 노드를 가리킵니다. 따라서 연결된 형태가 원형이 되므로 '원형' 이라고 부르는 것입니다. - 장점 - 구현하기 쉽고 구조도..

스택과 큐의 차이

이번 시간에는 스택과 큐의 차이를 살펴보겠습니다. 스택과 큐 모두 데이터들의 나열 구조이지만 차이가 있습니다. 스택 (Stack) - "밥 먹고 구토한다 ㅡㅡ;" - 가장 나중에 들어온 것이 먼저 나가는 데이터 나열 구조입니다. 즉 LIFO(Last-In-First-Out) 방식을 사용합니다. - 데이터를 삽입하는 과정을 Push 라고 하고 제거하는 과정을 Pop 이라고 합니다. 큐 (Queue) - "밥 먹고 ㄸ 싼다 ㅋㅋ" - 가장 먼저 들어온 것이 먼저 나가는 데이터 나열 구조입니다. 즉 FIFO(First-In-First-Out) 방식을 사용합니다. - 데이터를 삽입하는 과정을 Enqueue 라고 하고 제거하는 과정을 Dequeue 라고 합니다.

다익스트라 알고리즘 (1) - 동작 원리

이번 시간에는 다익스트라 알고리즘의 동작 원리를 살펴보겠습니다. 다익스트라 알고리즘(Dijkstra Algorithm) - "둘러보면서 작은 값으로 바꾸자" - 그래프의 출발점에서부터 각각 최단 경로를 찾는 알고리즘 입니다. - 가장 좋아보이는 것부터 찾아가므로 그리디 알고리즘에 해당합니다. 위의 그래프에 데이크스트라 알고리즘을 적용할 것입니다. 초반에는 노드 값(S에서 *까지의 거리)을 모두 ∞로 둡니다. 우선 시작점인 S에 포커스를 둡니다 포커스에서부터 주위를 둘러보면서 값을 비교할 것입니다. 만약 '포커스된 노드 값 + 간선 값' 이 '발견된 노드 값' 보다 더 작으면 더 작은 값(더한 값)으로 대체합니다. 위의 사진의 경우 아래와 같습니다. 포커스된 노드 (S) : 0 간선 (S-e) : 4 발견..

크루스칼 알고리즘 (1) - 동작 원리

이번 시간에는 크루스칼 알고리즘의 동작 원리를 살펴보겠습니다. 크루스칼 알고리즘(Kruskal Algorithm) - "가장 작은 값부터 잇자" - 간선 비용이 가장 적은 것부터 이어나가되 사이클이 형성되지 않게 하는 최단 경로 알고리즘 입니다. 가장 좋은 것부터 찾아나가므로 그리디 알고리즘에 해당합니다. 위의 그래프를 비용이 가장 적은 것부터 차례대로 이어나갈 것입니다. 비용이 가장 적은 1을 잇습니다 그 다음으로 적은 2를 잇습니다 그 다음으로 적은 3을 잇습니다 그 다음으로 적은 4를 잇습니다. 같은 비용인 간선이 2개 있을 때는 왼쪽 상단에 있는 것부터 잇도록 하겠습니다. (오른쪽에서부터 이어도 상관 없습니다) 두 번째 4를 잇습니다 그 다음으로 적은 5를 이었으나 사이클이 형성되므로 제외합니다 ..

728x90
반응형
LIST