본문 바로가기

전체 글176

알고리즘 - 부분집합 - 비트마스킹을 활용한 부분집합 public class 부분집합_비트마스킹{ static String[] items = {"A", "B", "C"}; public static void main(String[] args) { //비트마스킹을 이용해보자 int N = items.length; //i는 모든 부분집합을 의미한다. for(int i = 0 ; i 2023. 3. 26.
(Java)백준 11729. 하노이 탑 이동 순서 1. 문제 조건 어릴 때 많이 해보던 하노이탑!! 내가 정말 좋아하던 놀이였다 ,, 그냥 내가 알고 있던 하노이탑 규칙 그 자체 ! 원판을 옮긴 총 개수와 옮긴 과정(원판이 원래 있던 위치 원판을 옮긴 목적지)를 각각 순차적으로 출력해야 했다. 2. 아이디어 하노이 수열의 점화식을 외워본 적이 없어서 하노이 수열의 규칙부터 찾아봐야 했다. 많은 관찰과 고민을 거듭한 끝에 점화식을 찾았고, 하노이를 옮기는 과정에 전체 솔루션 내에 작은 솔루션들을 구분할 수 있게 됐다. 알고리즘 스터디원들에게 웹엑스로 필기하며 설명해준 과정도 아래 첨부한다. 내가 사고한 과정을 최대한 그대로 설명해주려고 노력했다. 규칙을 찾아간 과정은 우선, 원판 개수에 따라서 이동 과정이나 하노이 수를 관찰하고 그 과정에서 규칙성을 발견.. 2023. 3. 26.
(Java)백준 24060 알고리즘 수업 - 병합 정렬 1 1. 문제 조건 문제 제목 그대로 주어진 수를 병합정렬을 이용해 푸는 문제. 숫자를 정렬 할 때마다 개수를 세서, K번째 정렬한 숫자를 출력해야 한다. 2. 아이디어 구현해놓은 병합 정렬을 활용하기 단, 전체를 정렬할 필요 없이, 문제의 조건이 충족되는 순간 모든 메서드를 멈추고 결과값을 출력해봤다. 3. 구현 package Silver4; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class Main_24060병합정렬1 { static int[] arr; stati.. 2023. 3. 26.
(스프링 핵심 원리 - 기본편) 2-(3) 회원 도메인 설계, (4) 회원 도메인 개발, (5) - 회원 도메인 설계 회원 데이터는 자체 DB 구축 또는 외부 시스템과 연동(미확정) - 회원 도메인 설계하기 클라이언트 회원 서비스 (역할) 회원가입 회원조회 회원 저장소 (회원 데이터에 접근하는 계층 따로 만들기, 인터페이스, 역할) 구현 => 메모리 회원 저장소 : 메모리니까 컴퓨터 껐다 켜면 날아가므로 개발용으로만 사용, 테스트하거나 로컬에서 개발할 때 사용. 이걸로 개발하다가 나중에 데이터베이스나 외부 시스템이 결정되면 그걸로 바꿔 끼울 것! DB 회원 저장소 외부 시스템 연동 회원 저장소 - 회원 클래스 다이어그램(실제 구현레벨로 내려오면!) - 회원 객체 다이어그램(객체가 실제로 참조하는 주소) 클라이언트 -> 회원서비스Impl -> 메모리 회원 저장소 ** 윈도우 환경에서 IntelliJ .. 2023. 3. 26.
(스프링 핵심 원리 - 기본편) 2-(1) 프로젝트 생성, (2) 비즈니스 요구사항과 설계 - 준비하기 JAVA11 IntelliJ 스프링 부트 스타터 사이트에서 스프링 프로젝터 생성 : https://start.spring.io - 프로젝트 열기 build.gradle 파일을 open as project * build.gradle 내에서 설정을 변경하면 반드시 옆에 코끼리 아이콘 눌러줘야 라이브러리 등이 변경 된다 !! - 실행해보기 - 설정 [File] - [Settings] - Gradle 검색 - 아래 사진처럼 [Build and run using]과 [Run tests usint]을 'IntelliJ IDEA'로 바꾸기 이렇게 설정하면 Gradle을 통해 실행하지 않고, IntelliJ로 바로 실행하기 때문에 조금 더 빠르다고 한다. - 비즈니스 요구사항 확인 회원 : 회원 가입, 조.. 2023. 3. 25.
(스프링 핵심 원리 - 기본편) 1-(5) 객체 지향 설계와 스프링 - 스프링과 객체지향 스프링은 다음 기술로 다형성 + OCP, DIP를 가능하게 지원 DI(Dependency Injection) : 의존관계, 의존성 주입 DI 컨테이너 제공 * OCP : 개방-폐쇄원칙 * DIP : 의존성 역전 원 클라이언트 코드의 변경 없이 기능 확장 쉽게 부품을 교체하듯이 개발 - 정리 모든 설계에 역할과 구현 분리할 것 애플리케이션 설계도 공연을 설계 하듯이 배역만 만들어두고 배우는 유연하게 변경할 수 있도록 하는 것이 좋은 객체 지향 설계 이상적인 건 모든 설계에 인터페이스를 부여하는것 2023. 3. 25.
(스프링 핵심 원리 - 기본편) 1-(4) 좋은 객체 지향 설계의 5가지 원칙(SOLID) - SOLID 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙 정리 1. SRP 단일 책임원칙 한 클래스는 하나의 책임만 하나의 책임 : 모호 / 클 수도 작을 수도 , 문맥, 상황에 따라 중요한 기준은 변경! 변경이 있을 때 파급 효과 적으면 OK. 2. OCP 개방-폐쇄 원칙 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 함 다형성을 활용하면 지킬 수 있음 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능 구현 문제점 구현 객체를 변경하려면 클라이언트 코드 변경해야 함 분명 다형성을 사용했는데 이 원칙을 지킬 수 없는데??? 객체를 생성하고 연관관계를 맺어주는 별도의 조립, 설정자가 필요함 => 이걸 스프링이 해준다 !! 3. LSP 리스코프 치환 원칙 .. 2023. 3. 24.
(스프링 핵심 원리 - 기본편) 1-(3) 좋은 객체지향 프로그래밍 - 객체지향 프로그래밍 컴퓨터 프로그램을 명령어 목록으로 보기보다는 여러 개의 독립된 단위인 객체들의 모임으로 파악하고자 하는 것. 객체는 메시지를 주고 받고 데이터 처리 가능 프로그램을 유연하고 변경이 용이(부품 갈아끼우듯이) 하게 만들기 때문에 대규모 개발에 많이 사용됨. - 다형성 실세계와 비교해보자. 세상을 역할과 구현으로 구분해본다면! 운전자 & 자동차 비유 운전자 & 자동차. 운전자 역할 / 자동차 역할. 이런 자동차 역할을 여러 자동차 회사의 자동차들이 구현 자동차가 바뀌어도 운전자에게 영향을 주지 않음 자동차 역할과 구현을 분리한건 바로 운전자를 위한 것. 자동차의 내부 구조를 운전자가 알 필요가 없고, 자동차가 바뀌어도 운전자는 바뀔 필요가 없다. => 대상을 바꾸지 않고 새로운 자동차를.. 2023. 3. 24.
(스프링 핵심 원리 - 기본편) 1-(2)스프링이란? - 스프링이란? 1. 스프링 생태계 필수 스프링 프레임워크 스프링 부트 : 여러 스프링 기술들을 편리하게 사용할 수 있도록 도와줌 선택 스프링 데이터 : 데이터 베이스들의 기본적인 CRUD는 다 비슷한데, 이 기능들을 편리하게 사용할 수 있도록 도와주는 기술 스프링 세션 : 세션 기능 편리하게 스프링 시큐리티 : 보안 관련 스프링 Rest Docs : API 문서를 편리하게 스프링 배치 스프링 클라우드 2. 스프링 프레임워크 핵심 기술 : 스프링 DI 컨테이너, AOP, 이벤트, 기타 등 웹 기술 : 스프링 MVC, 스프링 WebFlux 데이터 접근 기술 : 트랜잭션, JDBC, ORM 지원, XML 지원 기술 통합 : 캐시, 이메일, 원격접근, 스케줄링 테스트 : 스프링 기반 테스트 지원 언어 : 코틀.. 2023. 3. 24.
(스프링 핵심 원리 - 기본편) 1-(1)스프링의 탄생 - 스프링의 탄생 1. Spring 이전. EJB 사용 : 어렵고 복잡하고 느렸음. 인터페이스 의존적으로 설계해야하는게 복잡 , POJO : 위 EJB가 복잡하다보니 그냥 오래된 Java 방식을 쓰자 =>하이버네이트와 Rod Johnson이 안되겠다 ! 해서 오픈소스를 만듦. 하이버네이트 EJB 엔티티빈 기술 대체 JPA(Java Persistence API) : 새로운 표준이 됨 현재는 JPA가 표준 인터페이스로 있고, 그 구현체 들로 하이버네이트, EclipseLink 등이 있음. Rod Johnson 책 출간 EJB 문제점 지적함 책이 유명해지면서 책의 예제를 다른 개발자들이 사용하기 시작 유겐 휠러와 얀 카로프가 로드 존슨에게 오픈소스 프로젝트 제안 Spring 탄생 ~! 2. 스프링의 역사 겨울.. 2023. 3. 24.