Java 31

SOLID : 객체 지향 설계 5원칙

"SOLID"는 소프트웨어 개발에서 사용되는 객체 지향 프로그래밍과 설계의 원칙들을 가리키는 약어로 아래와 같다. SRP(Single Responsibility Principle): 단일 책임 원칙 OCP(Open Closed Priciple): 개방 폐쇄 원칙 LSP(Listov Substitution Priciple): 리스코프 치환 원칙 ISP(Interface Segregation Principle): 인터페이스 분리 원칙 DIP(Dependency Inversion Principle): 의존 역전 원칙 Single Responsibility Principle (SRP): 각 클래스는 하나의 책임만을 가져야 합니다. 이 원칙은 클래스가 변경되어야 하는 이유가 하나만 있어야 함을 의미합니다. SRP..

Backend 2023.05.12

openApi 활용(4) : servlet redirection, GeoLocation, 버튼 구현

지난 글에서 java 코드로 DB 연결을 성공하였고, 이번 글에서는 web application에서 DB에 접근하고, 가까운 거리 순으로 wifi 위치를 표시하기 위해서 client의 공인 ip를 확인하고, ip 기반으로 GeoLocatin api를 사용해 위도,경도로 변경하여 저장하였다. openApi 활용(3) DB 연동하기 지난 글에서 Gson 라이브러리를 사용해 get 호출로 받은 Json 데이터를 파싱하여 객체에 저장하였다. 이번 글에서는 MariaDB를 사용하여 java에서 객체를 데이터베이스를 저장한다. 1. DB 시스템 구성(Ma myu7769.tistory.com 리다이렉션으로 DB에 저장하기 jsp 파일에서 servlet 리다이렉션을 하여 init() 단계에서 전체 wifi 객체 를 g..

Backend 2023.04.17

openApi 활용(2) : gson

Gson은 Google에서 개발한 Java 기반의 라이브러리로, JSON 데이터와 자바 객체 간의 직렬화와 역직렬화를 수행하는데 사용됩니다. Gson은 JSON 데이터를 파싱하고, JSON 문자열을 자바 객체로 변환하고, 자바 객체를 JSON 문자열로 변환할 수 있습니다. Gson은 매우 간편하고 유연한 API를 제공하여 사용자가 JSON 데이터와 자바 객체 간의 변환을 쉽게 수행할 수 있습니다. Gson은 JSON 데이터에 대한 파싱을 수행하면서 예외를 처리하고, 개발자가 원하는 방식으로 오류를 처리할 수 있도록 해줍니다. Gson은 다른 라이브러리와의 통합도 용이하며, JSON 데이터와 자바 객체 간의 변환을 자주 수행하는 애플리케이션에서 매우 유용합니다. Gson은 오픈소스로 공개되어 있으며, 라이..

Backend 2023.04.11

openApi 활용(1) : okhttp3 사용해보기

Open API는 다른 소프트웨어 애플리케이션에서 사용할 수 있는 인터페이스를 제공하는 소프트웨어 API입니다. 오픈 API는 웹 애플리케이션, 모바일 애플리케이션 등에서 많이 사용됩니다. 개발자가 애플리케이션에서 제공하는 서비스에 대한 다른 사용자 또는 시스템이 접근할 수 있도록 하기 위해 사용됩니다. Open API는 다양한 형태로 제공됩니다. RESTful API, SOAP API 등이 있습니다. Open API를 사용하면 다른 애플리케이션에서 데이터를 가져오거나 기능을 수행할 수 있습니다. 예를 들어, 공공기관에서 제공하는 지하철 시간표, 날씨 정보 등의 데이터를 Open API로 제공하여 다른 애플리케이션에서 이용할 수 있도록 합니다. 이러한 Open API는 애플리케이션 개발자들이 쉽게 활용할..

Backend 2023.04.11

[java] 프로그래머스 : 등굣길

https://school.programmers.co.kr/learn/courses/30/lessons/42898 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 접근법 : n,m으로 DP 배열(n+1, m+1)을 만들고 웅덩이는 루트 계산에서 빼기 위해 0으로 처리해 경로 계산을 해준다. dp[i][j] += (dp[i-1][j]+dp[i][j-1]) 의 의미는 왼쪽에서 오는 경우와 위쪽에서 오는 경우를 합친 경우의 수이다 class Solution { public int solution(int m, int n, int[][] puddles) { i..

Java 2023.04.04

[java] 프로그래머스 : 정수 삼각형

https://school.programmers.co.kr/learn/courses/30/lessons/43105?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 접근법 : DP 메모이제이션 방법으로 위에서부터 아래로 가면서 좌,우의 큰 값과 해당 위치에 triangle[x][y]를 더해줘 가장 마지막 줄에 맥스값을 리턴해준다. package programmers; public class lesson_43105 { public static void main(String[] args) { lesson_43105.Solution ..

Java 2023.04.04

[java] 프로그래머스 : N으로 표현

https://school.programmers.co.kr/learn/courses/30/lessons/42895 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 접근법: 1부터 시작해 number까지 DP : tabulation 방식으로 풀려고 하였지만, number == N 일 때, 1번 인것을 제외하곤 규칙을 발견하지 못했다.... 아래 풀이는 https://small-stap.tistory.com/65 을 완전 참고하였다 같은 숫자 1번으로 나오는 값은 N이 1~9 이기 때문에 number 1~9 -> 1번이고 같은 숫자 2번으로 나타낼 수 있..

Java 2023.04.04

[java] Stream() 정리하기

자바 스트림(Stream)은 Java 8부터 도입된 기능으로, 컬렉션, 배열, I/O 채널 등의 데이터 소스를 처리할 수 있는 선언적 API를 제공합니다. 스트림은 데이터를 변환하거나 필터링하는 연산을 사용해 다양한 작업을 수행할 수 있습니다. 스트림은 중간 연산과 최종 연산으로 나뉩니다. 중간 연산은 여러 개의 스트림을 연결하고, 최종 연산은 스트림을 소모하여 결과를 생성합니다. 스트림 생성 연산 Stream: 일반적인 스트림으로, 어떤 타입의 객체든 처리할 수 있습니다. Stream의 인스턴스는 Stream.of(), Arrays.stream() 또는 Collection.stream() 등의 방법으로 생성할 수 있습니다. import java.util.ArrayList; import java.util..

Java 2023.04.02

[Java] For문 보다 Stream?

스트림은 컬렉션을 다루는 함수형 프로그래밍 패러다임을 제공합니다. 이를 통해 코드를 간결하고 가독성 좋게 작성할 수 있습니다. for문은 일반적으로 명령형 프로그래밍 패러다임에서 사용됩니다. for문을 사용하면 코드가 좀 더 복잡해지고, 가독성이 떨어질 수 있습니다. 반면에 스트림을 사용하면 데이터를 처리하는 코드와 로직을 분리시킬 수 있기 때문에 가독성이 높아집니다. 또한, 스트림은 병렬 처리를 쉽게 할 수 있습니다. 이는 대규모 데이터 처리에 유용합니다. 스트림은 내부적으로 데이터를 분할하여 처리하기 때문에 멀티코어 환경에서 병렬 처리가 쉽게 가능합니다. 반면에 for문은 멀티코어 환경에서 병렬 처리가 어렵습니다. 또한, 스트림을 사용하면 중간 연산과 최종 연산을 체이닝하여 작성할 수 있기 때문에 코..

Java 2023.04.01

[자료 구조] 그래프 : DFS, BFS

DFS와 BFS는 그래프 탐색 알고리즘으로, 그래프의 노드를 탐색하는 방법입니다. 시간 복잡도 인접 리스트 : O(V + E), 인접 행렬 : O(V^2) DFS(깊이 우선 탐색)는 그래프의 시작 노드에서부터 시작하여 한 분기(branch)씩 내려가면서 그래프를 탐색하는 방법입니다. 이때 각 분기마다 하나의 노드를 선택하여 방문하며, 더 이상 방문할 노드가 없을 때 이전 분기로 돌아가서 다른 노드를 방문합니다. 이러한 과정을 반복하여 그래프 전체를 탐색합니다. DFS는 스택(Stack) 자료구조를 이용하여 구현할 수 있습니다. BFS(너비 우선 탐색)는 그래프의 시작 노드에서부터 시작하여 인접한 모든 노드들을 먼저 탐색한 후에, 그 다음으로 인접한 노드들을 탐색하는 방법입니다. 이때 큐(Queue) 자료..

Java 2023.03.30