2024/10 31

[JAVA] 효율적인 코딩을 도와주는 Stream API

Stream이란?컬렉션 데이터를 다룰 때 효율적이고 직관적인 방법을 제공하는 API다양한 데이터 소스를 표준화된 방법으로 다루기 위한 것Stream을 통해 데이터의 필터링, 정렬, 변환, 집계 등을 함수형 프로그래밍 스타일로 구현할 수 있다.    특징단일 사용 : Stream은 한 번만 사용 가능한 단일 데이터 흐림이다. 한 번 사용한 Stream은 재사용 할 수 없으며 새로운 Stream을 생성해야 한다.내부 반복 : 기존의 외부 반복(for-each)을 대체하여 내부적으로 데이터 처리를 반복하는 방식이다.지연 연산 : Stream에서 filter(), map() 같은 중간 연산은 즉시 실행되지 않고 최종 연산이 호출될 때 실행된다. 불필요한 연산을 줄일 수 있다.병렬 처리 기능 : parallelS..

JAVA 2024.10.31

[MVC패턴] 역할을 어떻게 나눠야할까?

지난번에 MVC 패턴에 대해 간단히 정리해뒀었다.MVC 패턴을 직접 적용해보며 Model-View-Controller 도 다양한 기준에 따라 나눠지고 사용된다는 것을 깨달았다.  https://sou330.tistory.com/56 MVC 패턴이 무엇일까?MVC (Model-View-Controller) 소프트웨어 설계 패턴 중 하나로 주로 웹 애플리케이션에서 많이 사용된다.이 패턴은 애플리케이션의 구조를 세 가지 역할로 분리하여 유지보수성과 확장성을 높여준다.sou330.tistory.com    MVC 패턴을 구성할 때 클래스들을 나누는 기준코드의 역할과 책임을 명확히 구분하여 유지보수와 확장성을 높이기 위함각각의 요소는 서로의 역할을 침범하지 않고 독립적으로 동작하도록 설계된다.    1. Cont..

[Python] 백준 12100 2048(Easy)

문제2048 게임은 4×4 크기의 보드에서 혼자 즐기는 재미있는 게임이다. 이 게임에서 한 번의 이동은 보드 위에 있는 전체 블록을 상하좌우 네 방향 중 하나로 이동시키는 것이다. 이때, 같은 값을 갖는 두 블록이 충돌하면 두 블록은 하나로 합쳐지게 된다. 한 번의 이동에서 이미 합쳐진 블록은 또 다른 블록과 다시 합쳐질 수 없다. (실제 게임에서는 이동을 한 번 할 때마다 블록이 추가되지만, 이 문제에서 블록이 추가되는 경우는 없다) 이 문제에서 다루는 2048 게임은 보드의 크기가 N×N 이다. 보드의 크기와 보드판의 블록 상태가 주어졌을 때, 최대 5번 이동해서 만들 수 있는 가장 큰 블록의 값을 구하는 프로그램을 작성하시오.https://www.acmicpc.net/problem/12100   난..

백준풀이 2024.10.29

[Python] 백준 9328 열쇠

문제상근이는 1층 빌딩에 침입해 매우 중요한 문서를 훔쳐오려고 한다. 상근이가 가지고 있는 평면도에는 문서의 위치가 모두 나타나 있다. 빌딩의 문은 모두 잠겨있기 때문에, 문을 열려면 열쇠가 필요하다. 상근이는 일부 열쇠를 이미 가지고 있고, 일부 열쇠는 빌딩의 바닥에 놓여져 있다. 상근이는 상하좌우로만 이동할 수 있다.상근이가 훔칠 수 있는 문서의 최대 개수를 구하는 프로그램을 작성하시오.https://www.acmicpc.net/problem/9328     난이도골드 1   코드import sysfrom collections import dequedef search() : global answer # BFS while queue : posX, posY = queue.po..

백준풀이 2024.10.23

[우테코 7기] 1주차 프리코스 후기

드디어 우아한테크코스 7기 1주 차 프리코스가 시작되었다! 지원서를 제출하면 메일로 안내가 오는데 은근 스팸 메시지함에 들어가 있었다는 사람들이 많았다.나도 그래서 하루 전까지 연락이 없길래 카톡 오픈채팅방에 들어가보니 사람들이 알려주었다. 휴.. 다행   우테코에는 디스코드 커뮤니티가 있다!필수로 참여하지는 않아도 되지만그 곳에서는 여러 개발 꿀팁들을 공유하고, 잡담, 전주차 코드리뷰 등을 할 수 있는 곳이었다.하나하나 읽어보면 도움이 될 것 같은데 사람이 너무 많아 다 읽진 못했다.   이번 1주차 미션은 java-calculator로 문자열 개산을 하는 프로그램을 제작하는 것이었다. 첫인상은 생각보다 매우 간단하네? 였다. 지난 6기보다 더 간단한 거 같은데..그러나 개발을 하면 할수록 내가 몰랐던..

테스트 주도 개발 TDD는 무엇일까?

TDD (Test-Driven Development) 소프트웨어 개발 방법론 중 하나로 코드를 작성하기 전에 테스트 코드를 먼저 작성하고, 그 테스트를 통과하는 코드를 구현하는 방식이다.TDD는 코드의 품질을 높이고 버그를 줄이기 위한 강력한 방법론으로 코드 설계와 테스트를 동시에 개선할 수 있다. TDD 방식의 핵심은 "테스트가 코드를 이끈다" 는 원칙이다. 테스트를 먼저 작성하고, 그 테스트를 통과하기 위한 최고한의 코드를 작성한 후 리팩토링을 통해 개선하는 과정을 반복하게 된다.       TDD의 3단계 (Red-Green-Refactor)Red : 실패하는 테스트 작성Green : 테스트를 통과하는 최소한의 코드 작성Refactor : 중복 제거, 코드 개선, 최적화    Red- 실패하는 테스..

원활한 협업을 위한 '커밋 메시지' 작성 규칙

커밋 컨벤션버전 관리 시스템(Git 등)에서 커밋 메시지 작성 규칙을 정의한 것협업하는 개발자들 간에 일관된 커밋 메시지 작성 방식을 유지함으로써 프로젝트 관리와 협업을 원활하게 해주는 중요한 규칙이다.커밋 메시지를 체계적으로 작성하면 프로젝트의 변경 내역을 쉽게 추적할 수 있고 나중에 이력을 확인하거나 버그를 수정할 때도 많은 도움을 준다.       커밋 컨벤션의 기본 구조():    1. 타입 (type)커밋의 성격을 나타낸다.타입을 명확하게 정의함으로써 어떤 종류의 변경이 이루어졌는지 쉽게 파악할 수 있다.feat새로운 기능을 추가할 때 사용fix버그를 수정할 때 사용docs문서 수정 및 추가 (README, 주석 등)style코드 포맷팅, 세미콜론 누락, 코드 변경이 없는 경우refactor코드..

Code를 Clean하게 작성하는 방법!

Clean Code코드를 클린하게 작성해야 하는 이유는 유지보수성, 확장성, 가독성과 관련이 있다.클린 코드는 개인 개발자뿐만 아니라 팀 전체의 생산성과 코드 품질에 큰 영향을 미치며 여러 장점이 있다.코드를 클린하게 작성하면 유지보수성 향상, 가독성 향상, 확장성과 재사용성 증가, 디버깅 및 테스트 용이, 생산성 증가, 코드 품질 및 신뢰성 향상, 기술 부채 감소, 자신의 성장 등의 효과가 있다.      1. 의미 있는 이름 짓기변수, 함수, 클래스 이름은 명확하게이름만 보고도 그 역할을 쉽게 이해할 수 있어야 한다. 축약어를 피하고 이름이 구체적일수록 좋다.불필요한 정보 제거함수나 클래스 이름에 정보를 과도하게 포함하지 말고 필요 최소한의 정보만 담아야 한다.일관성 유지프로젝트 전체에서 같은 개념에..

MVC 패턴이 무엇일까?

MVC (Model-View-Controller) 소프트웨어 설계 패턴 중 하나로 주로 웹 애플리케이션에서 많이 사용된다.이 패턴은 애플리케이션의 구조를 세 가지 역할로 분리하여 유지보수성과 확장성을 높여준다.각 요소는 서로 독립적이지만 협력하여 사용자와의 상호작용을 처리한다.      MVC의 구성 요소Model (모델)View (뷰)Controller (컨트롤러)       Model (모델)데이터와 비즈니스 로직을 담당하는 부분이다.데이터는 데이터베이스에 있는 데이터일 수도 있고, 애플리케이션 내에서 사용되는 비즈니스 상태 정보일 수도 있다. 역할모델은 애플리케이션의 핵심 데이터를 관리하며 데이터의 저장, 수정, 삭제와 같은 작업을 처리한다.또한 데이터를 다른 컴포넌트(주로 뷰)로 전달한다. 예시쇼..

[Python] 백준 2263 트리의 순회

문제n개의 정점을 갖는 이진 트리의 정점에 1부터 n까지의 번호가 중복 없이 매겨져 있다. 이와 같은 이진 트리의 인오더와 포스트오더가 주어졌을 때, 프리오더를 구하는 프로그램을 작성하시오.https://www.acmicpc.net/problem/2263        난이도골드 1     코드import syssys.setrecursionlimit(10**6)def find_tree(start_index, end_index, parent_node, left_or_right) : global root_index # print("start : " , start_index, "end : ", end_index, "parent_node : ",parent_node, "? : ", left_or..

백준풀이 2024.10.21