본문 바로가기

전체 글

(47)
[Spring] 스프링 입문 - 회원 도메인과 리포지토리 만들기 비즈니스 요구사항 정리 데이터 : 회원ID, 이름 기능 : 회원 등록, 조회 아직 데이터 저장소가 선정되지 않았다는 가상의 시나리오 컨트롤러 : 웹 MVC의 컨트롤러 역할 서비스 : 핵심 비즈니스 로직 구현 ex) 중복 가입 안됨 등 리포지토리 : DB에 접근하여, 도메인 객체를 저장하고 관리한다 도메인 : 회원, 주문, 쿠폰처럼 DB에 저장되고 관리되는 비즈니스 도메인 객체 아직 데이터 저장소가 선정되지 않았음 → 우선 인터페이스로 구현 클래스를 변경할 수 있도록 설계 개발 진행을 위해 일단 가벼운 메모리 기반의 데이터 저장소를 사용한다 회원 도메인과 리포지토리 만들기 1. Member Class 생성 domain이라는 패키지를 새로 생성하고, Member Class를 생성한다 package hello..
[Spring] 스프링 입문 - 정적 컨텐츠, MVC, API 정적 컨텐츠 static 폴더 안에 있는 파일을 그대로 고객에게 전달한다 이런식 static 파일 안에서 프로그래밍을 직접 하진 않고 요즘은 보통 MVC 패턴으로 코딩하는 추세 웹 브라우저에서 해당 html 주소를 요청 톰켓 서버는 스프링 컨테이너에 관련 컨트롤러가 있는지를 우선적으로 탐색한다 스프링 컨테이너에 해당 매핑이 없음 스프링 컨테이너에서 관련 컨트롤러가 없으면 그 때 resources/static 폴더에서 해당 파일이 있으면 그 파일을 반환한다 MVC(Model, View, Controller) 관심사 분리 ! View는 화면을 그리는 데에 모든 영향을 집중한다 Controller에서는 비즈니스 로직, 내부 로직 처리에 집중해야 하므로 관심사를 분리 Model에 관련 된 로직을 화면에 넘겨주는..
[알고리즘] 선택 정렬, 이진 탐색으로 X보다 큰 정수만 출력하기 🔑 문제 정수 N개로 주어진 수열 A와 정수 X가 주어질때, A에서 X보다 큰 수를 모두 출력하는 프로그램을 작성하시오. [조건] 선택정렬(or 버블정렬)과 이원탐색 원리를 필수로 사용할 것 X보다 큰 수 가 없을 경우 Error를 출력 🧸 풀이 여기에서, 일단 입력받는 부분은 # N개의 정수를 입력받고, X보다 큰 수를 찾기 위한 정수 선언 N, X = map(int, input().split()) # 수열 A list = input() A = list.split() if len(A) != N: print(N, "개의 숫자를 입력하셔야 합니다.", sep="") 이 부분이다. N은 정수의 개수, X는 큰 수를 찾을 때 기준이 되는 수 A는 정수 N개를 담을 수열 이 때, 리스트 A의 길이가 N과 같지 ..
[백준] Python # 11021 : A+B - 7 반복문을 활용한 Python 문제이다. 제출 코드 import sys input = sys.stdin.readline T = int(input()) total = [] for i in range(T): A, B = map(int, input().split()) total.append(A + B) for j in range(T): print("Case #", j+1, ": ", total[j], sep = "") 풀이 sys 모듈을 사용하기 위해 import sys 를 프로그램의 시작 부분에 추가하였다. sys.stdin은 사용자로부터 키보드 입력을 받는 기본적인 입력 스트림, readline 은 표준 입력에서 한 줄씩 문자열을 읽는 함수이다. sys.stdin.readline 함수를 input 변수에 할..
[Android] Jetpack Compose ViewModel 추가 ViewModel을 사용하면 액티비티가 소멸되고 다시 생성될 때 폐기되지 않는 앱 관련 데이터를 저장한다. 즉, ViewModel 객체는 소멸되지 않는다. 앱은 자동으로 ViewModel 객체를 유지하므로 객체가 보유하고 있는 데이터를 재구성하여 즉시 사용할 수 있다 아키텍처 구성요소 라이브러리에서 가져온 ViewModel 클래스를 확장하고 이 클래스 내에 앱 데이터를 저장하여 ViewModel 을 구현한다! 1. 종속성 추가 implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1") Compose 앱에 수명 주기 인식 ViewModel을 추가하는 데 사용된다. 2. 클래스 생성 ui 패키지에 ViewModel 클래스를 만든다. impo..
[Android] Compose - 이미지, 구분선, 텍스트, Preview, Button, 툴바 이미지 Image( painter = painterResource(id = R.drawable.ic_message), contentDescription = "공지사항 아이콘", Modifier .width(25.dp) .height(25.dp) ) Image의 painter로 리소스 불러오기 4px로 png 저장해도 깨짐 현상 없음! 구분선 // 구분선 Divider( color = Color.Black, modifier = Modifier.fillMaxWidth() .height(1.dp) .padding(start = 8.dp, end = 8.dp) ) 공식문서를 참조했다 Compose 레이아웃의 내장 기능 측정 | Jetpack Compose | Android Developers Compose 레이..
[Git] Git 협업 - Branch, Issue, Project, Code Review, WebHook 동아리에서 여름방학 앱 프로젝트를 시작하면서, 깃 협업에 대한 공부를 해보았다. 1. 브랜치 관리 git flow 협업 방식 feature : 새로운 기능 개발 네이밍) feature/7-kakaoLogin develop : feature에서 기능 개발이 끝난 후 develop 에 merge release : 배포 준비가 되면 develop 브랜치에서 release 브랜치로 merge 네이밍) release/v1.1 hotfix : master 브랜치로 배포 후 버그가 생기면 긴급 수정 네이밍) hotfix/v1.0.1 2. 코드리뷰 https://mine-it-record.tistory.com/692 위 글을 참고하여, Pull Request시 최소 2명이 코드 리뷰를 남겨야 PR 할 수 있도록 설정할..
[Android] 클린 아키텍처 (Clean Architecture) 안드로이드 공식 홈페이지의 아키텍처 권장 가이드에서 "관심사의 분리"를 강조한다 UI Layer, Domain Layer, Data Layer 3가지 레이어의 역할에 대해 공부해보자 위 Layer 모듈들은 단방향의 참조를 한다 단방향 데이터 흐름이란? 데이터가 오로지 한 방향으로만 흐르는 것 ex) 사용자의 클릭 이벤트 발생 - Up Stream : Ui -> Domain -> Data 상위 레이어로 전달 - Down Stream : Data -> Domain -> Ui 하위 레이어로 전달 UI Layer UI Layer에 해당하는 모듈 - UI Elements Module : Activity/Fragment + xml view / Compose UI - UI State Holder Module : Vi..