분류 전체보기 290

#10820 : 문자열 분석

풀이방법 2022.08.24 매우 간단한 문제이다. 주어진 문자열의 모든 글자에 대하여 if문을 사용해 공백, 소문자, 대문자, 숫자의 개수를 세면 된다. EDOC MT 팀대항전에서 푼 문제이다. 코드 Java(2022.08.24) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException{ // TODO Auto-generated method stub BufferedReader br = new BufferedReader(new InputStreamReader(..

#5533 : 유니크

풀이방법 사용된 것: HashSet 2022.08.24 중복체크를 해야 하므로 HashSet를 사용하여 풀었다. 참가자들이 3번의 게임에서 낸 숫자들을 일단 모두 읽어온다. 먼저, 각 회차마다 0점처리해야 하는 숫자를 해시셋에 넣어두는 작업을 한다. 회차가 3개이므로 해시셋 3개의 배열을 만든다. 이것을 dup라고 하겠다. 각 회차마다 참가자들이 낸 숫자들을 모두 훑으면서 중복되는 수를 그 회차를 담당하는 해시셋에 넣어둔다. 이제 점수를 계산한다. dup에 들어있는 숫자라면 0점을, 그렇지 않다면 낸 숫자만큼을 점수에 추가해주면 된다. EDOC MT 팀대항전에서 푼 문제이다. 코드 Java(2022.08.24) import java.io.BufferedReader; import java.io.IOExce..

2-5. 회원 도메인 실행과 테스트

저번 시간까지 회원 정보 관리와 관련된 도메인, 리포지토리, 서비스를 간단하게 만들었다. 아직 주문과 할인에 관련된 코드는 짜지 않았다. 이번 회차에서는 저번 시간까지 짠 것이 잘 동작하는지 테스트를 해본다. 먼저 순수 자바 코드로 테스트를 해보고, 그 다음에는 테스트를 돕는 프레임워크인 JUnit과, JUnit을 사용한 테스트 코드를 더 편리하게 해주는 라이브러리인 AssertJ를 사용하여 테스트할 것이다. 순수 자바 코드로 테스트해보기 junit과 assertj를 사용하지 않고 그냥 main에 순수하게 자바 코드를 적어서 실제 프로그램을 돌려본다. test가 아닌 main 폴더 내의 hello.core 안에 MemberApp 클래스를 만든다. 이 클래스에 main 메소드를 만들어주면 되는데 강사님께서..

2-4. 회원 도메인 개발

Grade Enum 만들기 회원 등급을 열거하는 enum인 Grade를 만들자. hello.core 하위에 member 패키지를 만든다. 그리고 그 안에 Grade라는 Enum을 만들어준다. Enum... 처음 써본다... 떨린다. 회원 등급은 일반 회원과 VIP 회원 두 가지이므로 이렇게 채워주면 된다. 회원 엔티티 클래스 만들기 회원 정보라는 것의 구조를 정의하는 회원 엔티티 클래스를 만든다. member 패키지 안에 Member 클래스를 만든다. 회원 정보에 포함되는 세 가지 필드인 id, name, grade를 적어준 다음, generate 기능 (윈도우 버전 Alt + Insert 단축키) 을 이용해 Member의 생성자를 만들고 세 가지 필드의 getter, setter도 모두 만들어준다. M..

IntelliJ에서, Project 윈도우의 표시 디렉토리를 변경하려면 어떻게 해야 하지?

이 글은 인프런 김영한 강사님의 스프링 핵심 원리 - 기본편 강의를 들으며 실습하다가 생긴 IntelliJ IDE 관련 문제에 대한 글이며... 나의 첫 스택 오버플로우 사용기이다. 원래 나의 Project 윈도우는 아래와 같이 core 디렉토리 하에 있는 파일들만을 표시했었다. 그런데 갑자기 아래와 같이 바탕화면 폴더 내에 있는 모든 파일을 보여주기 시작했다. 난 core 폴더만 보고 싶다고! 정확히 core 디렉토리를 선택해서 다시 열어보아도... 프로젝트를 아예 닫았다가 다시 열어보아도... 안 된다. 여기저기 살펴보고 settings를 뒤져봐도 고칠 방법을 찾지 못했다. 구글링을 해보았지만 나와 비슷한 사례를 찾을 수 없었고 애초에 어떤 키워드로 검색해야 하는지도 알 수 없었다. Project 윈..

2-3. 회원 도메인 설계

프로그램의 구성요소들이 어떻게 생겼고 서로 어떻게 연결되는지 다이어그램을 통해 살펴보는 시간이다. 다이어그램들을 보며 설명을 들으면 아주 이해가 쏙쏙 된다. 강의자료에 있는 다이어그램을 여기에 복붙해오는 것은 양심에 찔리므로, 다이어그램이 보고 싶을 땐 강의자료를 열어 살펴보기로 하고 여기에는 그렇게 다이어그램을 보며 복습을 할 때 필요한 내용을 간단하게 적어둬야겠다. 회원 도메인 협력 관계 익숙한 그림이다. 클라이언트는 회원 서비스에 의존한다. (입문 강의에서 배웠듯이, 서비스는 비즈니스 관점에서 필요한 기능을 정의한 클래스라는 것을 잊지 말자!) 회원 서비스는 회원가입, 회원조회 기능을 가지고 있다. 이 회원 서비스가 작동하려면 데이터 저장소가 필요하다. 우리는 하나의 데이터 저장소 인터페이스를 만들..

2-2. 비즈니스 요구사항과 설계

시작하기 전에 잡담 하나 하자면... (접은글) 더보기 스프링 입문 강의에 수강평을 적었더니 김영한 강사님께 하트와 답글을 받았다. 와우 자기 분야에서 매우 뛰어난 사람에게 응원을 전한 뒤 그 사람이 응원을 확인했다는 증거를 보는 것은 언제나 행복한 일이다. 무엇보다도... 굉장히 많은 수강평들을 하나하나 주기적으로 읽으신다는 게 존경스럽다. 거의 모든 수강평에 하루 이틀 내로 답글을 다셨던데... 어떻게 그러실 수가 있는지... 대단하시다. 이제 수업 내용을 보자. 이 회차는 앞으로 만들 예제의 비즈니스 요구사항 및 설계를 쫙 살피는 회차이다. 어떤 기능이 들어갈지, 그 기능에서 지켜야 할 것은 무엇인지 등을 본다. 우리에게 사이트 개발을 의뢰한 클라이언트가 요구한 사항은 다음과 같다. 회원정보 관련 ..

2-1. 프로젝트 생성

예제 실습을 시작한다. 입문 강의 때 회원 정보 관리 기능만 있는 예제를 제작했었는데, 이번에는 상품과 주문 정보까지 관리하는 프로그램을 만들 것이다. 저번처럼 간단한 예제이다. 이번 회차에서는 스프링 부트를 사용하여 프로젝트 생성까지만 진행한다. 스프링 부트 저번 입문 강의 때와 같이 https://start.spring.io/에 들어간다. 스프링 부트를 통해 프로젝트 준비를 끝낸 파일을 만들어주는 곳이다. 프로젝트: Gradle Project 언어: Java 스프링 부트 버전: 가장 최신의 정식 버전 (괄호가 붙지 않은 것) 프로젝트 메타데이터: 그룹 이름은 hello, 아티팩트는 core로 바꾸어주면 나머지는 자동으로 설정된다. 패키징: Jar Java: 건드리지 않고 기본 설정을 유지했다. 저번과..

1-5. 객체 지향 설계와 스프링

그래서 스프링과 객체 지향이 무슨 상관이 있는지 간단히 설명해주는 회차이다. 스프링 강의에 왜 객체 지향 이야기가 나오는가? 다형성에다가 OCP와 DIP까지 모두 가능하게 만들어주는 것이 스프링이기 때문이다. DI(의존성 주입), DI 컨테이너 제공 등의 기술을 통해 그렇게 한다. 덕분에 클라이언트 코드를 변경하지 않고 기능을 확장할 수 있으며, 부품을 교체하듯이 쉽게 개발할 수 있다. 어떤 불편함 때문에 스프링을 만들었는가? 스프링이라는 놈을 만들지 않더라도, 자바 코드를 아주 잘 짜서 스프링이 제공하는 그런 기술들을 직접 구현하면 OCP와 DIP를 준수할 수 있다. 그러나! 그러려면 할 것이 너무 많아진다. 개발을 좀더 편하고 깔끔하게 하려는 것 뿐인데, 이를 위해 본래의 핵심 코드보다 더 많은 양의..

1-4. 좋은 객체 지향 설계의 5가지 원칙(SOLID)

면접에서 물어볼 수도 있는 내용이라고 한다. SOLID란 저서 《클린 코드》로 유명한 로버트 마틴이 정리한 좋은 객체 지향 설계의 5가지 원칙. 좋은 객체 지향 설계가 어떤 것인지에 대한 개념은 이전에도 있었지만, 로버트 마틴이 이를 SOLID로 깔끔하게 정리해주었다. 1. SRP (Single Responsibility Principle): 단일 책임 원칙 2. OCP (Open/Closed Principle): 개방-폐쇄 원칙 3. LSP (Liskov Substitution Principle): 리스코프 치환 원칙 4. ISP (Interface Segregation Principle): 인터페이스 분리 원칙 5. DIP (Dependency Inversion Principle): 의존관계 역전 원..