분류 전체보기 65

23년 1학기 PS 회고록

종강 기념으로 23년 1학기 (학기 병행) PS 회고록을 쓴다. 23.02.28 기준 165 문제를 solved, 현재 23.06.29 기준 347 문제를 해결했다 한 학기 (3월-6월) 동안 347-165=182 문제를 풀었다! 다행이도 개강 전에 세웠던 소소한 목표는 모두 달성했다. 1. 종강 전에 G2 달성 -- completed! 2. 스트릭 Day 100+ 달성, 유지 -- completed! 솔직하게 말해서, 1학기를 돌아보니 아쉬운 점이 너무 많다. 학교 생활에서 아쉬운 점도 물론 있지만, PS 중심으로 내 성취를 다시 돌아보았을 때 너무 많이 아쉬운 게 있어서 이를 차근차근 정리해보려고 한다. 아쉬운 점 1. 새로운 알고리즘을 많이 소화하지 못한 것 - 알고리즘 수업에서 Backtracki..

PS 기록 2023.06.29

객체 지향 설계 원칙 5가지(SOLID)를 지킨 프로그램 제작

좋은 백엔드 개발자라면, SOLID 원칙을 잘 지킨 코드를 짤 수 있어야 한다. Spring이 만들어진 이유도 이 5가지 원칙을 어떻게 하면 잘 지킬 수 있을지 고민하다가 생긴 것이라고 한다. 특히 이 5가지 원칙 중에서도 OCP, DIP 를 가장 중요하게 봐야 한다. 객체 지향 설계 원칙 5가지(SOLID)는 다음과 같다. 앞 글자를 따서 SOLID 원칙이라고 부른다. SRP: 단일 책임 원칙(single responsibility principle) OCP: 개방-폐쇄 원칙 (Open/closed principle) LSP: 리스코프 치환 원칙 (Liskov substitution principle) ISP: 인터페이스 분리 원칙 (Interface segregation principle) DIP: ..

Java Spring 2023.05.29

스프링 Spring 이란? (김영한 로드맵, 스프링 핵심 원리 기본편)

1. 스프링 Spring 이란? 하나가 아니라 여러 개의 기술 모음이다. Spring Project 안에 많은 기술, 많은 프로젝트가 포함되어 있으며, 이중에서 가장 중요한 것은 스프링 프레임워크이다. 2. 스프링 프레임워크 스프링 프레임워크를 구성하는 요소가 많기 때문에 모두 아는 것은 어렵다. 이 중에서 핵심 기술과 웹 기술 위주로 아는 것이 좋다. 핵심 기술 스프링 DI 컨테이너, AOP, 이벤트, 기타 웹 기술 스프링 MVC, 스프링 WebFlux 데이터 접근 기술 트랜잭션, JDBC, ORM 지원, XML 지원 기술 통합 캐시, 이메일, 원격접근, 스케줄링 • 테스트: 스프링 기반 테스트 지원 언어 코틀린, 그루비 최근에는 스프링 부트를 통해서 스프링 프레임워크의 기술들을 편리하게 사용한다. 스..

Java Spring 2023.05.22

JAVA/Spring 에서 어노테이션(@) 이란? - 어노테이션 사용의 중요성

1. 어노테이션(@) 이란? Java 코드에서 @ 기호는 어노테이션(Annotation)을 의미한다. 어노테이션이라는 단어의 사전적 의미는 '주석'이라는 의미인데, 실제 코드에서 어노테이션은 주석과 같은 기능을 하는 것처럼 보인다. 클래스 class, 메소드 method, 필드 field 등 다양한 요소에 어노테이션을 적용할 수 있다. 어노테이션은 소스 코드에 메타 데이터(meta data: 데이터의 구조, 정보, 표준화 한 것을 나타내는 데이터)를 추가하여 컴파일러에게 특정 작업을 수행하도록 지시하는 역할을 한다. Java 에서 기본적으로 제공하는 어노테이션이 있고, 커스텀화하여 자신만의 어노테이션을 사용할 수도 있다. 그러나 많은 사람들이 협업하는 개발 환경에서 기본적인 어노테이션을 많이 사용하기 때..

Java Spring 2023.05.15

[Spring] 스프링 입문 - 스프링 부트, 웹 MVC, DB 접근 기술

* Inflearn - 김영한 개발자님의 강의를 통해 공부, 실습한 내용을 정리한 포스팅입니다. 1. 이 커리큘럼에서 배우는 내용 BE 초급자를 위한 강의로, 스프링 웹 애플리케이션 구현의 기초 과정을 배울 수 있다. 개발 과정을 순차적으로 따라하며 스프링에 대해 이해하고 기초 웹 애플리케이션(회원 가입, 회원 정보 저장 기능)을 만들 수 있다. Spring 첫 사용자를 위한 기본 셋업부터 배울 수 있어서 입문하기 친절한 강의라고 생각했고, 많은 도움이 됐다. 2. JDBC를 이용한 간단한 회원 가입 사이트 구현 (Result) 스프링부트 실습 결과(video) - H2 DB를 이용하여 미리 저장된 회원 정보 확인 가능: 영상에서 작성하지 않은 1, 2, 3, 4 번 회원 이름이 미리 저장되어 있고, 영..

Java Spring 2023.05.15

9. 접근 제어자

1. 클래스 멤버에 대한 접근 제어자 접근 제어자는 클래스의 멤버(변수, 메소드) 들의 접근 권한을 지정한다. 사용자가 접근하면 안되거나, 접근할 필요가 없는 멤버들에 적절한 접근 제어자를 설정해줘야 한다. 아래 코드를 보면 public 으로 선언된 메소드는 다른 클래스에서 호출할 수 있다. 그러나 private 으로 선언된 z는 다른 클래스에서 호출할 수 없다. private은 본인이 속한 클래스 밖에서 호출하면 안되고, 클래스 내부에서만 호출이 가능하다. 이런 클래스는 내부적으로 사용하면 된다. public String x 메소드를 보면, return z(); 하는 것을 볼 수 있다. 다른 클래스에서 x를 실행하여, 해당 클래스 내부에서 z를 되돌려준다면 z를 사용할 수 있다. (아래 결과 참조) 이..

Java Spring 2023.04.03

8. Overriding & Overloading

1. Overriding 상속은 상위 클래스의 기능을 하위 클래스로 물려주지만, 하위 클래스에서 상속받은 기능을 항상 그대로 쓴다면 불편할 것이다. 하위 클래스가 상위 클래스에게 상속받은 기능을 수정할 수 있는 방법을 바로 메소드 오버라이딩(Overriding)이라고 한다. 아래 예시 코드의 결과를 보면, 상위 클래스의 sum( ) 함수가 아니라, 하위 클래스의 sum( ) 함수가 실행된 것을 볼 수 있다. class Calculator { int left, right; public void setOprands(int left, int right) { this.left = left; this.right = right; } public void sum() { System.out.println(this.le..

Java Spring 2023.04.03

7. 상속과 생성자

1. 상속 상속은 객체 지향의 재활용성을 극대화 시킨 프로그래밍 기법이다. 상속이란, 어떤 객체가 있을 때 그 객체의 변수(필드)와 메소드를 다른 객체가 물려받을 수 있게 하는 기능이다. 기존의 객체를 유지하면서 어떤 기능을 추가하고 싶을 때 상속을 통해 자식 클래스를 만든다. 상속을 통해 코드의 중복을 제거하고(똑같은 기능을 가진 클래스를 또 만들지 않아도 된다), 기존의 부모 클래스를 개선할 경우에, 자식 클래스에도 그 혜택이 돌아간다. 결과적으로 상속의 효과는 다음과 같다. => 재활용성 증가 + 코드 중복 제거 + 유지보수 편리성 2. 생성자 기본 생성자 : 매개변수가 있는 생성자가 있을 때, 기본적으로 생성자를 만들어 주지 않는다. 없을 때는 가능하다. super ( ) : super 키워드는 ..

Java Spring 2023.04.03

최단거리 : 다익스트라 Dijkstra (Python)

다익스트라(또는 데이크스트라) 알고리즘은 특정한 시작점에서 다른 모든 점들로 가는 최단거리를 구하는 알고리즘이다. 그래프 내에서 시작점과 연결되지 않은 노드가 있을 수도 있다. (최단 거리를 구할 수 없는 노드) 이렇게 연결되지 않은 경우를 나타내기 위해 거리를 나타내는 배열 dist = [ ] 의 초기 값을 INF (매우 큰 수)로 설정해주는 것이 일반적이다. 물론, 여러 간선의 가중치 합이 아무리 커도 INF 보다는 작을 것이라는 제한 조건이 붙어야 한다. 이렇게 구현하면, if dist[node] == INF 일 때, 시작점과 해당 노드가 서로 연결되지 않아서 최단 거리를 구할 수 없다는 뜻이 된다. 본격적으로 다익스트라 코드를 구현해보자. 제대로 공부하기 전에 구현된 코드를 복사해서 쓰지 말고, ..

PS 기록/Algorithm 2023.03.30

6. 객체 지향 프로그래밍

1. 객체 지향 프로그래밍이란? 더 나은 프로그램을 만들기 위해 로직을 객체 중심으로 짜는 것 객체 : 상태(state) / 행위(behave) 로 이루어진 하나의 물건이라고 볼 수 있다. 객체라는 한국어 단어가 와닿지 않을 때는 just Object 라고 받아들이자. 사실은 편하고 쉬운 개념이다. 여러 가지 객체들을 조립하여 하나의 프로그램으로 만드는 것을 객체 지향 프로그래밍이라고 한다. 2. 설계와 추상화 설계 : 좋은 객체를 만들기 위해 설계가 꼭 필요하다. 설계를 잘할수록 더 나은 프로그램을 만들 수 있다. 현실의 복잡함 속에서 필요한 부분, 관점만 찾아내고 쉽게 바꾼다면 더 효율적일 것이다. 위와 같은 행위를 추상화라고 한다. 객체 지향 프로그래밍은 현실의 객체 (Object) 를 프로그래밍에..

Java Spring 2023.03.27