전체 글

전체 글

    [Spring] 스프링 핵심 원리 기본편 - 4. 스프링 컨테이너와 빈

    4. 스프링 컨테이너와 빈 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext : 스프링 컨테이너, 인터페이스 스프링 컨테이너를 생성할 때는 구성 정보를 지정해주어야 한다 @Bean 이 붙은 애들을 하나씩 호출 → 메서드 이름을 빈 이름으로, 반환하는 객체를 빈 객체로 등록 빈 이름은 항상 다른 이름을 부여 스프링 빈 의존관계 설정 설정 정보(AppcConfig)를 참고해서 의존관계 주입 스프링은 빈을 생성하고 의존관계를 주입하는 단계가 나누어져 있음 → 자바 코드로 스프링 빈을 등록하면 생성자를 호출하면서 의존관계 주입도 한꺼번에 처리 컨테이너에 등..

    [Spring] 스프링 핵심 원리 이해2 - 객체 지향 원리 적용

    스프링 핵심 원리 기본편 할인 정책을 바꾸려면 OrderServiceImpl 코드를 변경해야 함 역할과 구현을 충실하게 분리O 다형성 활용O, 인터페이스와 구현 객체를 분리함 OCP, DIP 객체 지향설계 원칙을 충실히 준수한 것처럼 보이지만 사실은 아님 DIP: 주문서비스 클라이언트(OrderServiceImpl)은 DiscountPolicy 인터페이스에 의존하면서 DIP를 지킨 것 같은데? 추상인터페이스 뿐만 아니라 구현 클래스에도 의존하고 있음 추상 인터페이스: DiscountPolicy 구현 클래스: FixDiscountPolicy, RateDiscountPolicy OCP: 변경하지 않고 확장? 지금은 기능을 확장해서 변경하면 클라이언트 코드에 영향을 줌 DIP 위반 → 추상(인터페이스)만 의존..

    [백준] 7579 - 앱 (자바 Java)

    [Gold III] 앱 - 7579 문제 링크 성능 요약 메모리: 17628 KB, 시간: 156 ms 분류 다이나믹 프로그래밍(dp), 배낭 문제(knapsack) 문제 설명 우리는 스마트폰을 사용하면서 여러 가지 앱(App)을 실행하게 된다. 대개의 경우 화면에 보이는 ‘실행 중’인 앱은 하나뿐이지만 보이지 않는 상태로 많은 앱이 '활성화'되어 있다. 앱들이 활성화 되어 있다는 것은 화면에 보이지 않더라도 메인 메모리에 직전의 상태가 기록되어 있는 것을 말한다. 현재 실행 중이 아니더라도 이렇게 메모리에 남겨두는 이유는 사용자가 이전에 실행하던 앱을 다시 불러올 때에 직전의 상태를 메인 메모리로부터 읽어 들여 실행 준비를 빠르게 마치기 위해서이다. 하지만 스마트폰의 메모리는 제한적이기 때문에 한번이라..

    [백준] 17244 - 아맞다우산 (자바 Java)

    [Gold II] 아맞다우산 - 17244 문제 링크 성능 요약 메모리: 99772 KB, 시간: 360 ms 분류 너비 우선 탐색(bfs), 비트마스킹(bitmask), 브루트포스 알고리즘(bruteforcing), 그래프 이론(graphs), 그래프 탐색(graph_traversal) 문제 설명 경재씨는 저녁 약속을 가기 전 챙기지 않은 물건들이 있는 지 확인하고 있다. 필요한 물건은 전부 챙긴 것 같았고 외출 후 돌아오는 길에 경재씨는 외쳤다. "아 맞다 우산!!!" 경재 씨는 매번 외출하고 나서야 어떤 물건을 집에 놓고 왔다는 것을 떠올릴 때마다 자책감에 시달리는 것이 너무 싫었다. 외출이 잦은 경재 씨는 반복되는 일을 근절하기 위해 꼭 챙겨야 할 물건들을 정리해보았다. 하지만 지갑, 스마트폰, ..

    [네트워크] 10. 전송 계층

    [네트워크] 10. 전송 계층

    10. 전송 계층 UDP 프로토콜 UDP: User Datagram Protocol, 인터넷에서 사용하는 프로토콜 중 구조가 가장 간단 IP 프로토콜을 이용해 비연결형 서비스 지원 특징 비연결형 서비스 제공 헤더와 전송 데이터에 대한 체크섬 기능 제공 Best Effort 전달 방식 지원 cf. 체크섬 기능: IP 프로토콜은 데이터에 대한 변형 오류의 검출 기능x, 데이터 공간에 UDP 프로토콜의 헤더와 데이터가 캡슐화 cf. Best Effort: UDP는 IP 프로토콜에 전송한 데이터그램이 목적지까지 제대로 도착했는지 확인하지 않음 → TCP보다 신뢰성이 떨어진다 TCP보다 데이터 처리는 빠름 → 데이터 전송 시간에 민감한 응용 환경에서 유리 1. UDP 헤더 구조 Source Port/Destina..

    [네트워크] 9. TCP 프로토콜

    [네트워크] 9. TCP 프로토콜

    9. TCP 프로토콜 01 전송 계층의 기능 전송 계층: 데이터 링크 계층과 특징 유사 데이터 링크 계층: 물리적인 전송 선로로 직접 연결된 두 물리적 호스트(컴퓨터나 라우터) 사이의 데이터 전송 담당 전송 계층: 네트워크 끝단에 위치하는 통신 주체가 중간의 논리적인 선로(라우터로 연결된 컴퓨터 네트워크)를 통해 데이터를 주고받음 ** 네트워크에서는 시간 지연 현상의 처리가 중요 네트워크를 통해 데이터를 전송할 때 송수신 호스트 사이에 전송 지연 발생 → 중간 네트워크가 전송 과정에서 데이터를 보관하는 효과 발생 네트워크는 입출력 사이에 시간 지연을 주니까 논리적으로 기억 장치의 기능을 함 → 네트워크 = 잠재적 기억장치 1. 전송 계층의 주요 기능 흐름 제어 양 끝단의 송수신 호스트에서 실행되는 네트워..

    [네트워크] 8. 네트워크 계층

    [네트워크] 8. 네트워크 계층

    8. 네트워크 계층 01 IPv6 프로토콜 현재의 IP 프로토콜은 32비트의 주소 공간 지원 → 이론 상으로 최대 $2^{32}$개의 호스트를 수용 IPv6: 호스트의 주소 공간 대폭 확장 주요 변경 사항 주소 공간 확장 주소 표시 공간: 32비트 → 128비트 이론적으로 $2^{128}$개까지 지원 유비쿼터스 장비(개인이 무선으로 연결)가 보급되는 환경에도 쉽게 대처 헤더 구조 단순화 불필요한 필드 제외, 확장 헤더 형식 과도한 오류 제어와 같은 오버헤드를 줄여 프로토콜의 전송 효율을 높임 흐름 제어 기능 지원 흐름 제어 기능 지원 필드(Flow Label) 도입 → 일정 범위 내에서 예측 가능한 데이터 흐름 지원 하나의 연속 스트림으로 전송해야 하는 연관 패킷의 전송 기능 지원 멀티미디어 응용 환경 ..

    [네트워크] 7. IP 프로토콜

    [네트워크] 7. IP 프로토콜

    7. IP 프로토콜 01 네트워크 계층의 기능 기본 기능: 송수신 호스트 사이의 패킷 전달 경로를 선택하는 라우팅 주요 기능 라우팅: 송수신 호스트 사이의 패킷 전달 경로 선택 혼잡 제어: 혼잡(네트워크에 패킷 수가 과도하게 증가) 현상을 예방하거나 제거 패킷의 분할과 병합 패킷 분할: 큰 데이터를 여러 패킷으로 나누는 과정 패킷 병합: 목적지에서 분할된 패킷을 다시 모으는 과정 1. 연결형 서비스와 비연결형 서비스 비연결형 서비스 패킷들이 독자적인 경로로 수신 호스트까지 전송 패킷의 전달 순서, 패킷 분실 여부 등에서 연결형 서비스보다 신뢰성이 떨어짐 자체적으로 오류 제어와 흐름 제어 기능을 더 많이 수행해야 함 패킷이 도착하는 순서가 일정x → 전송 계층은 수신한 패킷의 순서를 재조정 ex. IP 프..

    [백준] 9466 - 텀 프로젝트 (자바 Java)

    [Gold III] 텀 프로젝트 - 9466 문제 링크 성능 요약 메모리: 303204 KB, 시간: 1344 ms 분류 깊이 우선 탐색(dfs), 그래프 이론(graphs), 그래프 탐색(graph_traversal) 문제 설명 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을 수도 있다. 프로젝트 팀을 구성하기 위해, 모든 학생들은 프로젝트를 함께하고 싶은 학생을 선택해야 한다. (단, 단 한 명만 선택할 수 있다.) 혼자 하고 싶어하는 학생은 자기 자신을 선택하는 것도 가능하다. 학생들이(s1, s2, ..., sr)이라 할 때, r=1이고 s1이 s1을 선택하는..

    [스프링/자바] 좋은 객체 지향 설계의 5가지 원칙: SOLID

    인프런 강의 '스프링 핵심 원리 - 기본편' 을 보고 정리한 내용입니다. 단순히 객체 지향 프로그래밍에 대한 개념만 이해하다가 강의를 들으니까 이제서야 객체 지향 설계가 무엇인지에 대한 개념이 생기는 것 같다. 특히 단순히 인터페이스와 클래스를 구현하는 것만으로는 SOLID 원칙을 모두 지킬 수 없다는 점이 크게 와닿았다. 스프링에 대한 필요성을 이해하는 데 좋은 것 같다. 다들 왜 이 강의를 추천하는 지 알 것 같음.. SOLID SRP: 단일 책임 원칙(single responsibility principle) 한 클래스는 하나의 책임만 가져야 한다 하나의 책임은 모호한 개념이다. SRP를 판단할 수 있는 중요한 기준은 변경 - 변경이 있을 때 파급 효과가 적으면 SRP를 잘 따른 것 한 클래스가 여..

출처: https://gmnam.tistory.com/157 [Voyager:티스토리]