MVC Model, View, Controller로 구성된 뷰 아키텍처. 컨트롤러가 많은 것들을 담당하는 형태이다. 모델(Entity, DB)의 데이터를 가져오고 업데이트 모델 값 변화가 일어난 경우, 새로 뷰 그려주기 MVC의 단점 컨트롤러가 담당하는게 너무 많다. 컨트롤러가 모델에 대한 컨트롤과 뷰에 대한 컨트롤을 모두 담당하고 있기 때문에, 모델에 변화가 생기면 뷰 까지 영향이 미쳐, 뷰의 수정이 필요함. → 유지보수가 어려움. 모델의 설계를 아무리 잘 해도, 개발을 지속하면서 모델을 수정하는 일은 불가피하므로 유지보수의 측면에서 영향을 받을 수 밖에 없다. MVVM Model, View, ViewModel 로 구성된 뷰 아키텍처. MVC 아키텍처의 단점들을 보완하고자 제시되었다. 모델과 뷰 사이에..
머릿말 iOS 앱 개발을 할 때에도 “클린 아키텍처” 라는 키워드를 많이 들어왔고, 이게 아키텍처를 짤 때 유의해야하는 것들에 대해 열거한 규칙이 아니라, 특정한 아키텍처 구조를 말한다는 것 까지만 알고있었다. 이번 플러터에 클린 아키텍처를 적용하기 위해서 클린 아키텍처에 대해 2-3일 정도 시간을 투자해 공부를 좀 해봤다. 대략적인 구조는 파악하고 왜 이러한 구조를 선택했는지에 대해서는 이해를 좀 했는데, 아무래도 개념적인 면에서 정보를 습득하다보니 아직 완전히 공감하지는 못하는 포인트가 있었다. 예를 들면 의존성 역전을 넣는 부분 같은 것들! 플러터로 개발을 하면서 이런 부분들을 직접 느껴봐야 할 것 같다. 개인적으로 느낀 점은 MVVM은 뷰를 어떻게 보여주고 관리할 것인가에 대해서 집중한 형태고, ..
23년 상반기 회고 2023년 상반기는 어떻게 보면 군입대 이후로 처음으로 학교에 대면수업을 듣는 학기였다. 다시 학교를 다니며 서울에서 생활을 하면서, 내가 하고싶은 것들을 하고 배우고 싶은 것들을 잔뜩 배우고 싶었다. 지난 6개월 동안에 많은 것들을 시도하였고, 많은 사람들을 만났고, 많은 일이 일어났고, 정말 많은 것들을 즐겼다. 알아버린 돈 쓰는 맛 돈을 쓰는 맛을 알아버렸다. 지난 애플 개발자 아카데미에서 매달 100만원씩 장학금을 받고, 이 돈으로 생활하다보니 씀씀이가 100만원에 맞게 크게 늘었다. 나는 100만원 지출도 어마어마하다고 생각했는데, 이제는 한 달에 140만원씩 돈을 쓰고있다. 거의 뭐 카드를 싸지른다고 봐도 무방할 것 같다. 집에서 받는 50만원의 용돈, 아르바이트로 버는 4..
UIButton의 타이틀은 기본적으로 가운데 정렬이지만, 2줄 이상인 경우에는 아래 이미지처럼 좌측정렬로 변환된다. 2줄 이상인 경우에도 가운데 정렬을 하기 위한 방법을 찾아보았다. 처음 cell을 생성해주는 TableView DataSource 함수내에 titleLabel.textAlignment에 접근해 .center로 설정을 변경해주면 된다. 그러면, 원하는 대로 버튼 내에서도 2줄 이상의 텍스트가 가운데에 정렬된 것을 확인할 수 있다.
문제 링크https://www.acmicpc.net/problem/7562문제체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 있을까?입력입력의 첫째 줄에는 테스트 케이스의 개수가 주어진다.각 테스트 케이스는 세 줄로 이루어져 있다. 첫째 줄에는 체스판의 한 변의 길이 l(4 ≤ l ≤ 300)이 주어진다. 체스판의 크기는 l × l이다. 체스판의 각 칸은 두 수의 쌍 {0, ..., l-1} × {0, ..., l-1}로 나타낼 수 있다. 둘째 줄과 셋째 줄에는 나이트가 현재 있는 칸, 나이트가 이동하려고 하는 칸이 주어진다.출력각 테스트 케이스마다 나이트가 최소 ..
문제 링크https://www.acmicpc.net/problem/1697문제수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다.수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오.입력첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다.출력수빈이가 동생을 찾는 가장 빠른 시간을 출력한다.조건시간..
문제 링크https://www.acmicpc.net/problem/7569문제철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자모양 상자의 칸에 하나씩 넣은 다음, 상자들을 수직으로 쌓아 올려서 창고에 보관한다.창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다. 하나의 토마토에 인접한 곳은 위, 아래, 왼쪽, 오른쪽, 앞, 뒤 여섯 방향에 있는 토마토를 의미한다. 대각선 방향에 있는 토마토들에게는 영향을 주지 못하며, 토마토가 혼자 저절로 익는 경우는 없다고 가정한다. 철수는 창고에 보관된 ..
문제 링크https://www.acmicpc.net/problem/7576문제철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자 모양 상자의 칸에 하나씩 넣어서 창고에 보관한다.창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다. 하나의 토마토의 인접한 곳은 왼쪽, 오른쪽, 앞, 뒤 네 방향에 있는 토마토를 의미한다. 대각선 방향에 있는 토마토들에게는 영향을 주지 못하며, 토마토가 혼자 저절로 익는 경우는 없다고 가정한다. 철수는 창고에 보관된 토마토들이 며칠이 지나면 다 익게 되는지, 그 최..
문제 링크https://www.acmicpc.net/problem/2629문제양팔 저울과 몇 개의 추가 주어졌을 때, 이를 이용하여 입력으로 주어진 구슬의 무게를 확인할 수 있는지를 결정하려고 한다.무게가 각각 1g과 4g인 두 개의 추가 있을 경우, 주어진 구슬과 1g 추 하나를 양팔 저울의 양쪽에 각각 올려놓아 수평을 이루면 구슬의 무게는 1g이다. 또 다른 구슬이 4g인지를 확인하려면 1g 추 대신 4g 추를 올려놓으면 된다.구슬이 3g인 경우 아래 과 같이 구슬과 추를 올려놓으면 양팔 저울이 수평을 이루게 된다. 따라서 각각 1g과 4g인 추가 하나씩 있을 경우 주어진 구슬이 3g인지도 확인해 볼 수 있다. 구슬이 3g인지 확인하는 방법 (1은 1g인 추, 4는 4g인 추, ●은 무게를 확인할 구..
문제링크 https://www.acmicpc.net/problem/1260 조건 시간 제한 : 2s 메모리 제한 : 128MB 문제 그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다. 입력 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있다. 입력으로 주어지는 간선은 양방향이다. 출력 첫째..