분류 전체보기 210

[프로그래머스] 신규 아이디 추천

https://programmers.co.kr/learn/courses/30/lessons/72410 class Solution { public String solution(String new_id) { String answer = new_id //1. 소문자로 치환 .toLowerCase() //2. 알파벳 소문자, 숫자, -, _, . 제외하고 모든 문자 제거 .replaceAll("[^\\.\\-_0-9a-z]", "") //3. 마침표.이 2번 이상 연속된 부분 하나로 치환 .replaceAll("[.]+", "."); //4. 마침표가 처음이나 끝에 위치한다면 제거 if (answer.startsWith(".")) answer = answer.substring(1); if (answer.ends..

Language/JAVA 2022.01.29

20220129 개발일지

오늘은 개인과제의 페이지들은 모두 구현하는 것으로 목표를 정했다. 게시판 글쓰기(/write)를 다른 페이지로 분리하고, detail페이지를 완성하였다. 첫날 진행하면서 페이지 구현방식에 고민이 있었는데, 페이지 로드는 기본적으로 타임리프를 사용하여 controller에서 해당 html을 return해주는 식으로 했고, 그 다음에 ajax를 통해 필요한 데이터들을 restcontroller 방식으로 불러왔다. 게시글 상세보기같은 경우에는 게시글 박스에 링크를 걸어서 누르면 /detail로 이동하게 하였고, 조회할 게시글 id값도 보내주었다. 다음과 같이 url로 하면 해당 url에 접속했을 때 detail.html이 return되도록 controller에 작성해주어야 한다. 혹은 detail.html을 ..

20220128 개발일지

주특기 2주차가 시작되었다. 이번 주의 개인과제는 첫주와 유사한 게시판이지만 여기에 로그인 등 Spring security 기능을 추가하는 것이었다. 심화 2주차 강의 중 소셜로그인(카카오로그인) 구현 전까지 강의를 들으면서 개인 과제의 로그인 기능을 먼저 구현했다. 그리고 주특기 1주차에 작업한 내용을 바탕으로 기본 페이지를 구현하였다. 이번에는 개인과제 샘플이 있어서 어떤 식으로 구현해야할 지 방향 잡기가 쉬웠다. 개인과제에서 구현해야 할 기능들과 조건이 많아서 쉽지 않아보인다. 크게 고민되는 부분은 다음과 같다. 1. 페이지 구현방식 : 타임리프? json? 먼저 고민했던 부분은 페이지 구현방식이었다. 타임리프를 쓸 것인지가 가장 고민이 되는 부분이었다. 심화강의에서는 페이지 이동은 타임리프를 사용..

#Spring security

#설정 build.gradle // 스프링 시큐리티 implementation 'org.springframework.boot:spring-boot-starter-security'​ 스프링 시큐리티 활성화 : 기존의 configure을 override해서 원하는 기능으로 구현 import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org...

서버/Spring boot 2022.01.28

#DI, IoC, Bean

#DI 강한 결합이란? 다음과 같이 각각 새로운(new) 생성자를 만들어 구현하는 것. 문제점 : 일부 변경시 모든 코드를 다 수정해주어야 함 → 느슨한 결합을 지향 느슨한 결합 새로운 생성자를 만드는 것이 아니라 이미 생성된 객체를 가져다 씀! Repository에 객체 repository1를 만들고 Service는 이 객체를, 그리고 Controller는 이 service객체를 가져다 사용한다. Class Service1 { private final Repository1 repitory1; // repository1 객체 사용 public Service1(Repository1 repository1) { this.repository1 = new Repository1(); this.repository1 ..

서버/Spring boot 2022.01.28

20220127 개발일지 #원페이지 게시판 controller/service 분리

오늘은 3주차 마지막날이다. 개인과제는 이미 제출했고, 팀과제는 수정/추가했다. 알고리즘 문제를 몇 문제 풀고, 어제부터 보기 시작한 Spring 심화편 강의를 이어들었다. 심화편 강의에서 이번에 Spring 시작하면서 느꼈던 의문들이 거의 해소되었다. 내용도 많고 복잡하지만, 왜 Spring을 사용해야 하는지에 대해 Spring을 안쓰는 것부터 시작하는게 좋았다. controller나 service, repo의 경우에도 먼저 안써보고 쓸 경우 어떻게 바꿀 수 있는지, 스프링의 중요 개념인 DI를 쓰면 어떻게 코드가 변하고 장점은 무엇인지 비교해주어서 좋았다. 1주차 강의를 오늘까지 듣고 마무리하고, 배운 내용을 바탕으로 추가로 만든 원페이지 게시판 코드를 일부 수정했다. 처음에 멀티페이지로 만들면서 좋..

[프로그래머스] 시저 암호

처음에 n이 커서 알파벳 범위를 여러 번 도는 경우를 생각하지 못해서 통과하지 못했다. n 대신 26으로 나눈 값 k를 더해줘서 알파벳 범위 안에서만 돌도록 조정해주었고, 대문자와 소문자로 경우를 나누어서 Z나 z는 추가로 -26을 해주었다. class Solution { public String solution(String s, int n) { String answer = ""; //char배열로 바꿈 char[] arr = s.toCharArray(); for (int i = 0; i < arr.length; i++) { //알파벳 안에서만 돌면 되므로 26으로 나누어서 나머지값만 더함 int k = n % 26; //대문자인데 더했을 때 'Z'보다 크거나, 소문자인데 더했을 때 'z'보다 크면 -2..

Language/JAVA 2022.01.27

#문자열 포함여부 확인, 치환 + 자주 쓰는 정규식 패턴

문자열 포함여부 확인 s.contains("문자") : true/false, 대소문자 구분 s.indexOf("문자") : 특정 문자의 위치를 반환, 찾지 못하면 -1을 반환한다. s.matches("문자") : true/false, 정규식 사용 가능 문자 대체 함수 s.replace(찾을 문자열-CharSequence target-, 바꿀 문자열-CharSequence replacement-) s.replaceAll(찾을 문자열-String regex-, 바꿀 문자열-String replacement-) 자주쓰는 정규식 패턴 숫자만 : ^[0-9]*$ 영문만 : ^[a-zA-Z]*$ 영문만, 띄어쓰기가능 : /^[a-zA-Z\s]+$/ 한글만 : ^[가-힣]*$ 한글만,띄어쓰기가능 : /^[가-힣\s]..

Language/JAVA 2022.01.27

[프로그래머스] 숫자 문자열과 영단어

https://programmers.co.kr/learn/courses/30/lessons/81301 문자열에 포함된 영단어가 있을 때 이를 숫자로 바꿔주는 문제이다. 처음에는 배열로 변환해서 바꿔야 한다고 생각해서, 이걸 어떻게 배열로 바꾸지 고민했는데 문자열을 대체할 수 있는 replace를 사용해서 해당하는 문자의 값을 바꾸면 된다. class Solution { public int solution(String s) { String[] arr = new String[]{"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; for (int i = 0; i < arr.length; i++) { //포함하고 있을 ..

Language/JAVA 2022.01.27

[프로그래머스] 문자열 내림차순으로 배치하기

https://programmers.co.kr/learn/courses/30/lessons/12917 문자열을 char배열로 전환해서 정렬 후 다시 String으로 만들어주었다. import java.util.Arrays; class Solution { public String solution(String s) { String answer = ""; char[] arr = s.toCharArray(); Arrays.sort(arr); for (int i = arr.length-1; i >= 0; i--) { answer += arr[i]; } return answer; } } 마지막에 for문으로 돌려주었는데, StringBuilder를 사용할 수 있다. public class ReverseStr { p..

Language/JAVA 2022.01.27