분류 전체보기 162

[JAVA] List, Set은 선언된 변수만으로 컬렉션의 내용이 찍힌다

Collection 인터페이스는 List와 Set 인터페이스의 공통된 부분을 뽑아 정의한 것이다. 이 Collection 인터페이스를 일부 구현한 게 추상 클래스인 AbstractCollection이고, 그 아래 AbstractList와  AbstractSet이 있다. 이들 또한 추상 클래스들이고 우리가 많이 사용하는 ArrayList, HashSet 등이 이들을 상속하여 사용하고 있다.  어찌됐건 내가 궁금했던 것은 List와 Set 인스턴스를 출력할 때 왜 변수만으로 객체 주소가 아니라 컬렉션의 내용이 출력되는지였다. 그 이유는 아래와 같이 이들의 조상인 AbstractCollection에서 toString() 메서드를 오버라이드했기 때문이다. 예제를 보면 쉽게 이해할 수 있다. 작성된 코드는 자바의..

JAVA 2025.01.11

[network] 혼자 공부하는 네트워크 4-3 ECN: 명시적 혼잡 알림

ECN(Explicit Congestion Notification): 명시적 혼잡 알림중간 노드의 도움으로 혼잡을 제어TCP의 혼잡 제어 - 오로지 송신 호스트의 몫; 혼잡 감지, 혼잡 윈도우 계산, 재전송그에 반해 ECN은 혼잡을 회피하기 위해 네트워크 중간 장치(주로 라우터)의 도움을 받는다오늘날의 네트워크 환경에서 적극적으로 활용됨 왼쪽은 IPv4 헤더, 오른쪽은 TCP 헤더의 모습이다. 여기서 왼쪽 헤더의 서비스 유형에 있는 두 개의 ECN 비트가 '11'로 설정된 채 수신지 호스트로 전달되면 수신지 쪽에서는 중간에서 라우터가 혼잡을 감지했음을 확인할 수 있는 것이다. 그런 후 수신지 쪽에서 다시 송신지 쪽으로 TCP 세그먼트의 ECE(ECN-Echo) 플래그에 1을 세팅하여 보낸다. 이것은 수신..

network 2025.01.06

[network] 혼자 공부하는 네트워크 04-3 TCP의 오류, 흐름, 혼잡 제어

전송 계층의 TCP 프로토콜의 핵심은 다음과 같다. TCP의 기능재전송을 기반으로 다양한 오류를 제어흐름 제어를 통해 처리할 수 있을 만큼의 데이터 송수신혼잡 제어를 통해 네트워크가 혼잡한 정도에 따라 전송량 조① 오류 제어'전송 계층의 TCP, UDP 세그먼트에는 체크섬 필드가 있는데 이것만으로 충분하지 않을까?' 라는 질문에 '그렇지 않다'로 답할 수 있다. 체크섬 필드는 데이터가 훼손되었는지의 여부만 나타내기 때문이다. 패킷이 유실되었거나, 또는 잘못 전송되었거나, 순서에 어긋나게 전송되는 것은 체크섬 필드만으로 오류를 검출하기 어렵다. 그러면 TCP는 언제 오류가 난 것을 알아채고 재전송할까?중복된 ACK 세그먼트를 수신했을 때타임아웃이 발생했을 때 (이게 더 나쁘다) 이렇게 오류가 검출되면 T..

network 2025.01.06

[network] 혼자 공부하는 네트워크 04-2 TCP와 UDP (250414)

강의는 몇 번 들었지만 전처럼 기록을 열심히 해 두지는 않아서 몇 개월이 지난 후에 다시 쓴다. TCP 통신 단계TCP는 통신(데이터 송수신)하기 전에 연결을 수립하고 통신이 끝나면 연결을 종료한다MSS (Maximum Segment Size) 단위MSS - TCP로 전송할 수 있는 최대 페이로드 크기TCP 헤더 크기는 제외 (MTU는 헤더의 크기까지 포함)TCP 세그먼트 구조송신지 포트, 수신지 포트순서 번호확인 응답 번호제어 비트 - ACK, SYN, FIN윈도우① 송신지 포트, 수신지 포트송수신하는 포트 번호② 순서 번호 (sequence number)순서 번호가 명시되는 필드순서 번호 = 초기 순서 번호 + 송신한 바이트 수송수신되는 세그먼트 데이터의 첫 바이트에 부여되는 번호세그먼트의 올바른 송..

network 2025.01.06

[JAVA] 객체지향 프로그래밍의 이해 - 2

클래스의 관계는 크게 상속과 포함 관계가 있다. 상속은 기존의 클래스로 새로운 클래스를 작성하는 것으로 코드를 재사용한다.쉽게 생각해 두 클래스에 부모 - 자식 관계를 맺어주는 것이라고 볼 수 있다.자바는 충돌 위험 때문에 단일 상속만 허용한다 (c++은 다중 상속 허용)Object 클래스는 모든 클래스의 조상이다. 부모가 없는 클래스는 자동으로 Object 클래스를 상속받는다.(Object 클래스는 11개의 메서드를 가진다.)예를 들어 Point 클래스와 Point3D 클래스를 만들 때 Point3D 클래스를 어떻게 정의하느냐에 따른 상속 관계를 살펴보자. class Point { int x; int y;}class Point3D { // 1. Point 클래스와 독립적인 관계 int x; int y;..

[JAVA] 소수점 특정 자릿수까지 표현하기

1. Math.round()Math.round()는 실수를 정수로 반환해 주는 메서드다. 쉽게 말해 반올림을 해 준다고 볼 수 있는데 이 메서드로 실수를 특정 자릿수까지의 수로 표현해 줄 수 있다. 예를 들어 100.3564를 소수점 둘째 자릿수까지 표현해 100.36로 반환하도록 말이다. round()는 아래 공식 문서대로 int나 long 타입의 정수형을 반환하기 때문에 변형해 주어야 한다. 둘째 자릿수까지 원한다면 100을 곱하고 100.0으로 나누어 준다. 즉 소수점 수대로 곱해주고 나누어 주면 된다.     System.out.println(Math.round(100.3564 * 100) / 100.0); // 100.36System.out.println(Math.round(100.3564 * ..

JAVA 2025.01.02

[JAVA] static 키워드

static 키워드는 블록, 변수, 메서드, 클래스에 붙일 수 있다.  The static keyword in Java is used to share the same variable or method of a given class. ... . The static keyword belongs to the class rather than an instance of the class. The static keyword is used for a constant variable or a method that is the same for every instance of a class. ...  helps create class-level variables and methods. [출처: https://www.gee..

[JAVA] 객체지향 프로그래밍의 이해 - 1

객체지향 언어는 코드의 재사용성을 높이고, 유지보수를 용이하게 하고, 중복 코드를 제거하기 위한 목적으로 사용된다.객체지향 언어는 다음과 같은 4대 핵심 개념을 가진다.캡슐화상속추상화다형성클래스는 객체를 정의해 놓은 것이며, 객체를 생성하기 위해서 만든다.따라서 클래스를 (제품) 설계도라고 이해한다면 객체는 그 설계도에 따라 만든 제품이 된다. 이때 만든다고 하는 것은 프로그래밍 관점에서 "인스턴스화"한다고 표현한다. 설계도에 따라 개별 객체를 만드는 과정이다. 클래스 객체제품 설계도제품 객체는 속성(변수)과 기능(메서드)으로 구성된 것으로 볼 수 있다. 그래서 객체를 사용한다고 하는 것은, 객체가 가진 속성과 기능을 사용하는 것으로 이해할 수 있다.  클래스를 작성할 때 주의할 점은 다음과 같다.하나의..

병렬분산 요약 노트

병렬분산 from concurrent.futures import ThreadPoolExecutorThreadPoolExecutor스레드 시작 작업에 계산이 많이 필요스레드들의 풀을 생성해 해결스레드 한번 생성한 후 그 스레드에게 계속 작업 주어 실행 concurrent.futures 모듈 - Executor 클래스다양한 호출들을 병행적으로 동시에(concurrent) 실행Executor 객체 자체 executor = ThreadPoolExecutor(max_workers=3)ThreadPoolExecutor 객체에 스레드 전달: submit() 함수executor.submit(task) 작업 전달  컨텍스트 관리자와 함께 사용자동으로 ThreadPoolExecutor를 인스턴스화하여 사용with Thre..

memos 2024.12.18

[알고리즘] 그래프 최단거리 - 다익스트라(Dijkstra) 알고리즘

책 [Do it! 알고리즘 코딩 테스트 - 자바 편;김종관 지음]을 참고하여 작성하였습니다.  다익스트라(Dijkstra) 알고리즘출발 노드와 모든 노드 간의 최단 거리 탐색 (출발 노드와 도착 노드, 두 노드만이 아님)에지(가중치)는 모두 양수여야 한다시간 복잡도는 O(E * logV)그리디 알고리즘- 접근 방법그래프를 인접 행렬, 인접 리스트로 구현할 수 있지만 일반적인 경우에서 인접 리스트가 더 빠름, 하지만 상황에 따라 달라짐- 인접 행렬 O(V^2) - 밀집 그래프에 유리, 연결 노드 확인하는 데 O(1)- 인접 리스트 O(E * log V) - 희소 그래프에 유리, 연결 노드 확인하는 데 O(연결된 간선의 수)최단 거리 배열을 초기화 (최댓값으로 모두 채우기)거리 배열에 출발 노드 인덱스에 0..