java (6) 썸네일형 리스트형 디자인 패턴 1장: 전략 패턴(Strategy Pattern) 핵심: 자주 바뀌는 행동을 별도 객체로 분리하고, 필요할 때 교체해서 사용한다.『헤드 퍼스트 디자인 패턴』 Chapter 1에서는 오리 시뮬레이션 예제를 통해 전략 패턴(Strategy Pattern)을 설명한다.이 장에서 중요한 것은 패턴의 정의를 외우는 것이 아니라,기존 설계에서 무엇을 변경하기 어려웠고, 구조를 바꾸자 무엇이 쉬워졌는가?를 이해하는 것이다.1. 문제의 시작처음에는 여러 종류의 오리가 Duck 클래스를 상속받도록 설계한다.그런데 새로운 요구사항으로 Duck에 fly()를 추가하면 문제가 생긴다.class Duck { void fly() { System.out.println("날아요"); }}모든 하위 클래스가 fly()를 상속받기 때문에 고무 오리처럼 날면 안 .. 객체지향이란 무엇인가 ? + 프로젝트 분석 1. 객체지향이란?객체지향 프로그래밍은 프로그램을 단순히 데이터를 처리하는 함수의 집합으로 보는 것이 아니라, 각자 상태와 책임을 가진 객체들이 서로 협력하는 시스템으로 설계하는 방식이다.객체지향의 핵심은 단순히 class를 사용하는 데 있지 않다.어떤 객체에게 어떤 책임을 맡기고, 객체들이 어떤 메시지를 주고받으며 협력하게 할 것인가?큰 문제를 무조건 작은 함수로 쪼개는 것보다, 작은 문제를 스스로 해결할 수 있는 독립적인 객체를 만들고 이 객체들을 조합해 전체 문제를 해결하는 상향식 접근에 가깝다.2. 객체의 상태와 행동객체는 일반적으로 상태와 행동을 가진다.Object = State + Behavior은행 계좌를 예로 들어보자.public class BankAccount { private in.. [Docker] COPY·ENTRYPOINT 명령어와 Spring Boot 배포 실습 COPY : 파일 복사(이동) 의미 copy는 호스트 컴퓨터에 있는 파일을 복사해서 컨테이너로 전달한다 사용법# 문법COPY [호스트 컴퓨터에 있는 복사할 파일의 경로] [컨테이너에서 파일이 위치할 경로]# 예시COPY app.txt /app.txt 파일 복사해보기1. app.txt 파일 만들기 2. Dockerfile 만들어서 이미지 생성 및 컨테이너 실행Dockerfile FROM ubuntuCOPY app.txt /app.txtENTRYPOINT ["/bin/bash", "-c", "sleep 500"] # 디버깅용 코드 $ docker build -t my-server .$ docker run -d my-server$ docker exec -it [Container ID] bash$ ls .. 서버 IP를 변경했는데도 특정 서버가 구 IP로 접속하는 이유 상황레거시 환경, 특히 JVM 8 이하 환경에서 서버 배포를 마무리한 뒤 서버 IP를 변경했다.DNS 레코드도 수정했고 TTL도 300초로 낮췄다dig 명령어로 확인했을 때도 새 IP가 정상적으로 조회되었다하지만 시간이 충분이 지난 뒤에도 특정 서버에서만 여전히 구 IP로 호출되는 로그가 발견되었다 이 경우 단순히 DNS 레코드 문제라고 보기 어렵다OS 또는 애플리케이션 레벨의 캐시를 의심해야 한다 원인가장 유력한 원인은 JVM DNS 캐시다Java 애플리케이션은 InetAddress를 통해 도메인을 IP로 변환한다이때 JVM은 DNS 조회 결과를 내부적으로 캐싱한다문제는 Java 8 이하 환경에서 JVM DNS 캐시 정책이 예상보다 길게 유지될 수 있다는 점이다특히 보안 매니저 설정이나 java.sec.. Socket 통신과 Client-Server 구조 이해하기 네트워크 프로그램을 만들 때 자주 등장하는 개념이 Socket이다. Soekct은 서로 다른 컴퓨터나 프로그램이 네트워크를 통해 데이터를 주고받을 수 있도록 해 주는 통신의 출입구 역할을 한다 1. Socket이란 ? Socket은 네트워크에서 프로그램끼리 데이터를 주고받기 위한 통신 창구이다쉽게 말하면, 한 컴퓨터의 프로그램이 다른 컴퓨터의 프로그램과 통신할 수 있도록 연결해 주는 끝점이다 예를 들어 노트북에서 실행 중인 프로그램이 Raspberry Pi에서 실행 중인 프로그램과 데이터를 주고받는다면, 두 프로그램은 Socket을 통해 연결된다 노트북 프로그램 Raspberry Pi 프로그램 Socket은 다음과 같은 역할을 함네트워크 연결 생성데이터 송신데이터 수신연결 종료즉, Socket은 .. Java String, StringBuilder, StringBuffer 각각의 차이점 정리 Java에서 문자열을 다룰 때 자주 등장하는 클래스가 있다.- String- StringBuilder- StringBuffer 겉으로 보기에는 모두 문자열을 다루는 클래스처럼 보이지만, 내부 동작 방식과 사용 목적은 꽤나 다르다특히 문자열을 자주 변경하거나 이어 붙이는 코드에서는 어떤 크래스를 선택하느냐에 따라 성능 차이가 발생할 수 있다 이번 글에서는 String, StringBuilder, StringBuffer의 차이를 정리해 보겠다. 1. String String은 Java에서 가장 기본적으로 사용하는 문자열 클래스이다.String str = "hello";str = str + "Java"; 위 코드를 보면 str에 "Java"를 이어 붙인 것처럼 보인다하지만 실제로 기존 "Hello" 문자열이 .. 이전 1 다음