자바 9

[알고리즘] 프로그래머스 - H-Index

1. 조건 2. 내 생각 처음에는 완전탐색과 비슷하게 문제를 풀이하면 풀릴줄 알고 반복문을 두 개를 사용해 하나의 수와 배열안에 들어있는 전체의 수를 비교하여 count를 올려주면 될거라고 생각했지만 두 번의 반복문과 조건문을 합쳐서 사용하며 코드의 복잡도와 점점 어떤 방식으로 풀어야 하는지 헷갈리기 시작했다. 특히 count를 어떤 상황에 해줘야 하는지 헷갈리는 부분이 많아 문제를 다시 읽어보고 h에대한 조건을 다시 확인하였다. 3. 실행 결과 import java.util.Arrays; class Solution { public int solution(int[] citations) { int answer = 0; Arrays.sort(citations); for (int i=0; i< citation..

자바 알고리즘 2023.05.19

Spring - MVC 패턴

Spring을 공부하면 꼭 알아야 하는 것이 MVC이다. 여기서 말하는 MVC란 M (Model) - 데이터와 비즈니스 로직을 담당하는 부분. 데이터베이스와 연동하여 데이터를 가져오고 저장. → Service와 같다. V (View) - 사용자에게 보여지는 UI(User Interface)를 담당하는 부분. HTML, CSS, JavaScript 등을 이용하여 화면 구성. C (Controller) - 모델과 뷰를 연결해주는 부분으로, 클라이언트의 요청을 받아 해당 요청에 맞는 로직을 처리하고, 결과를 뷰에 전달. 아래에서 게시판의 글 생성을 예로 코드를 만들어 보겠다. @RestController // json 형태로 객체 데이터 반환?, IOC 컨테이너에 등록. @RequiredArgsConstruc..

Spring 2023.03.08

Spring - 입문

사용자의 요청을 처리한 후, 지정된 뷰에 모델 객체를 넘겨준다. 클라이언트의 요청에 대해 어떤 처리를 할지 Service로 넘겨준다. Service에서 처리된 내용을 View로 넘겨준다. URL마다 처리해야 할 기능을 정해놓은 API를 모아놓은 클래스이다. 클라이언트가 API로 요청을 보내면, 서버에서 기능을 처리한 후 API를 통해 결과를 보내준다. 사용자와 상호작용을 처리하는 Presentation 계층에 속해 있다. #1 - Java 객체가 Controller 역할을 한다고 알려주는 어노테이션. #2 - 각각의 레이어는 자기와 인접한 레이어와 직접 소통 / ContentService 객체를 가지고 있기에 2-1와 같은 서비스 로직 호출 가능. #3 - 특정 요청에 호출될 메소드를 지정하는 어노테이션..

Spring 2023.02.24

객체지향적 설계를 위한 5가지 SOLID 원칙

단일 책임 원칙 위반 증상 기능 변경이 발생했을 때 연쇄적으로 코드를 수정해야 합니다. 기능이 너무 복잡해서 재사용하기 어렵습니다. 메서드의 크기가 비대해 집니다 해결 방법 기능별로 클래스를 구현한다. 상속을 통해 각 클래스들을 이용한다. public class AddOperation { public int operate(int firstNumber, int secondNumber){ return firstNumber + secondNumber; } }// 덧셈 클래스 구현 public class SubstractOperation { public int operate(int firstNumber, int secondNumber){ return firstNumber - secondNumber; } }// ..

Java 2023.02.24

자바 - 객체지향

흔히 자바는 객체지향언어 이고 중요한 것은 "객체" 라고 많이들 말한다. 그러면 객체는 무엇이고 객체지향언어의 장점은 무엇인가?? 라는 궁금함이 있다. 객체 자바에서 instance 라고 불리며 사전적 정의는 "실제로 존재하는 것" 이다. 하지만 자바를 공부하며 이게 무슨 소린지 이해가 안되기도 한다. 단순히 자바 클래스에 저장된 내용대로 메모리에 생성된 것 이라고 생각하자. 우리집에 있는 TV를 예로 쉽게 말하자면 TV의 속성(색깔, 브랜드 등)이 다 다르고 기능(전원켜는 기능 및 채널을 옮기는 기능)들이 있을 것이다. 여기서 속성 = 변수 | 기능 = 메서드 선언 이라고 알고 넘어가면 이해하기 쉽다. 이러한 것들을 "클래스"에 기본적으로 담아두고 main에서 객체 생성 후 가져다 사용하거나 변경할 수..

TIL 2023.02.21

[알고리즘] 프로그래머스 - 모의고사

문제를 확인하고 어떤 방법으로 풀어야 하나 생각을 해봤다. 가장 먼저 1번, 2번, 3번 수포자가 찍는 방식에 규칙이 존재했고 각각 5번 8번 10번씩 숫자가 반복 되는 것 이었다. int[] answer = new int[3]; // 수포자들이 각각 문제를 맞춘 개수가 들어갈 배열 (수포자가 3명이기에 길이는3) int[] arr = {}; // 정답이 들어갈 배열 int[] case1 = {1,2,3,4,5}; int[] case2 = {2,1,2,3,2,4,2,5}; int[] case3 = {3,3,1,1,2,2,4,4,5,5}; 그래서 각각의 배열을 만들어 문제를 찍는 규칙을 담아줬고 이 배열과 값을 넣어주는 answers 배열의 값이 일치하는 갯수를 찾는 순서가 필요했다. for (int i=..

자바 알고리즘 2023.02.18

[알고리즘] 프로그래머스 - 정수 내림차순으로 배치하기

프로그래머스 정수 내림차순으로 배치하기 문제를 보고 쉽게 풀릴 것 이라고 생각했다. 입력받은 정수 n을 내림차순 정렬해 리턴하면 끝 이라고 생각했지만 코드로 만드는 것은 쉬운 일이 아니었고 어떻게 풀어야할지 생각을 먼저 하고 풀어봤다. import java.util.*; class Solution { public long solution(long n) { long answer = 0; String nString = Long.toString(n); // n > 문자열로 변환 String[] arr = new String[nString.length()]; // 문자열 인덱스값 넣어줄 배열 생성 String result = ""; // System.out.println(nString); for (int i=0..

자바 알고리즘 2023.02.16

해커톤 프로젝트 경험

오늘은 항해를 하며 22시간의 해커톤 프로젝트를 진행한다. 해커톤 프로젝트가 무엇인지 아무것도 알지 못한채 아침이 되었고 어쩌다보니 프로젝트 아이템을 구상하고 api 명세서 또한 작성했다. 만들자 해서 만들었지만 사실 뭐가 뭔지 잘 모른채로 만들기도 한 것 같다. 그래도 이렇게 하나하나 써보면서 눈으로 직접 기능과 url, db 등 확인할 수 있었고 생각을 조금 더 해보는 기회가 되주었다. 그리고 와이어프레임 또한 만들어보며 페이지가 어떻게 생겼고 어떤식으로 진행해야 하는지 조금씩 감이 잡이기 시작한 것 같다. 직접 손으로 구상해보며 api 명세서에대해 조금 더 알고 싶다는 욕심이 생겼고 앞으로 프로젝트나 무언가 기능을 구현하는데 있어 많은 생각을 해봐야할 것 같다.

TIL 2023.02.12

검색기능 만들기.

도서 사이트에서 크롤링해온 데이터를 목록에 보여주고 원하는 책 이름을 검색하고 싶었다. 검색을 위한 정석?은 쿼리스트링을 사용하는 것 이었고 flask로 구현하는 나는 ajax와 조건, 반복문을 통해 만들기로 했다. 기능 구현을 위해 먼저 생각했던 것은 저장된 데이터를 받아와 if문을 사용해 검색 기능을 구현하는 것 이었고 데이터부터 가져왔다. search라는 변수로 웹에서 입력하는 검색어를 가져왔고 db에 저장된 전체 정보는 response로 받아왔다. 그리고 if문을 활용해 search가 db에 있는지 판별해 temp_html을 실행했다. 처음부터 includes를 이용했다면 위 코드처럼 간결하게 만들 수 있었지만 처음에는 다른 시도를 했었기에 위의 코드를 만들기까지 시간이 오래 걸렸다. 저장된 db..

TIL 2023.02.10