[디자인패턴] 템플릿 메소드 패턴(TemplateMethodPattern) 알아보기
·
디자인패턴
템플릿 메소드 (template method)알고리즘의 골격을 상위클래스에 정의하는 것으로, 일부 단계만을 서브클래스에서 재정의하도록 강제합니다.패턴명 그대로 템플릿(틀)을 만들어서 해당 틀을 받아서 필요부분만 수정하는 것입니다.즉, 정의는 선조가 하고 구현은 후손이 하는 것을 의미하며, 알고리즘은 선조에 구현되어있기 때문에 후손이 어떻게 구현을 하더라도 알고리즘의 순서는 동일하게 실행시킬 수 있습니다. 간단히 코드로 확인해보겠습니다.추상화 전커피와 홍차를 제공하는 카페에서 메뉴얼에 따라 커피와 티를 만드는 클래스를 생성해보겠습니다.public class Coffee { void prepareRecipe() { boilWater(); brewCoffeeGrinds(); ..
[Java] Thread 동기화가 필요해.
·
JAVA
쓰레드 동기화쓰레드 동기화란?애플리케이션 내에서 멀티스레드로 동작을 하게 되면 스레드끼리 자원을 공유하며 작업하게 됩니다.이때, 공유 자원의 안정성을 위하여 하나의 쓰레드 작업 시 다른 쓰레드는 접근하지 못하도록 막는 것을 쓰레드 동기화 라고 합니다.동기화를 위해서는 임계영역과 잠금이 사용됩니다.임계영역 (critical section) : 오직 한 스레드만 접근을 보장하는 영역잠금 (Lock) : 임계 영역에 접근 시 락을 획득하고, 작업 완료 후 락을 반납하며 임계영역을 벗어납니다. 동기화를 사용하는 이유간단히 입출금으로 비교했볼 수 있습니다.통장에 10만원이 있다고 가정할 때, A가 통장에서 3만원을 출금하려고 시도하던 중 B가 동일한 통장에 들어와 2만원을 출금을 하고, A의 출금 작업을 완료했습..
[Java] Socket 통신 구현해보기(ServerSocket, Socket)
·
JAVA
SocketTCP/IP 기반 네트워크 통신에서 데이터 송수신의 마지막 접점을 의미합니다.프로토콜과 IP주소, 포트 넘버로 구성되며 클라이언트/서버 구조로 동작합니다. Socket 통신의 흐름서버 흐름소켓 생성IP와 Port번호를 설정하는 바인딩 작업 수행listen으로 클라이언트 요청 대기accept로 클라이언트와 연결데이터 송수신소켓 닫기클라이언트 흐름소켓 생성서버에 설정된 ip와 port로 연결데이터 송수신소켓 닫기 ServerSocket서버측에서 클라이언트의 접속을 대기하며 클라이언트 접속 시 접속을 허용하고 통신하기 위한 클래스입니다.실제 모든 작업은 SocketImpl 인스턴스가 수행하게 되며 생성자 호출 시 인스턴스를 생성합니다.내부 bind와 accept함수를 보면 모든 작업 수행 시 soc..
[멋쟁이사자처럼부트캠프 백엔드 자바 15기] 데이터베이스 JOIN
·
데이터베이스
간단한 ERD 분석city-countryCountryCode > country.code를 참조(1:N) 관계하나의 국가에는 여러 도시가 있을 수 있다. (국가: 도시)논리적 참조 관계 (점선) - 제약은 없고 단순 참조관계country - countrylanguageCountryCode > country.code를 참조(1:N) 관계 (국가: 언어)하나의 국가는 여러 언어를 가질 수 있다.실제 FK 존재 (실선) - 제약조건 자체가 데이터베이스에 명시되어 있는 것→ 실선과 점선의 차이는 제약조건(데이터 무결성)의 차이다.→ countrylanguage는 복합키(CountryCode, Language)를 가진다. ERD 점선과 실선의 차이점선 : 비식별관계부모테이블의 PK가 자식테이블의 일반 속성인 경우부..
[프로그래머스] 징검다리 건너기
·
코딩테스트 풀어보자!
프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제 풀이 과정처음에는 바로 생각나는 방법이 없어 완전탐색으로 풀어보았습니다. public int solution2(int[] stones, int k) { int answer = 0; while (go(stones, k)) { answer++; } return answer; } private boolean go(int[] stones, int k) { int before = 0; for (int i = 0; i k) return false; ..