dawncrow

안드로이드 개발에서 Retrofit을 이용한 서버 통신 및 Java 예제 코드 설명

person using smartphone

안드로이드 애플리케이션 개발에서 서버와의 통신은 필수적인 기능 중 하나이다.

Retrofit은 이러한 HTTP 통신을 간단하게 구현할 수 있게 도와주는 라이브러리이다.

이 글에서는 Retrofit을 사용하여 안드로이드에서 서버와 어떻게 통신하는지, 그리고 Java 예제 코드를 통해 이를 쉽게 이해할 수 있도록 설명한다.

Retrofit이란?

RetrofitSquare에서 개발한 안드로이드 및 자바용 타입 안전한 HTTP 클라이언트 라이브러리이다.

주요 특징은 다음과 같다:

  • 타입 안전성: API 응답을 자바 객체로 직렬화/역직렬화한다.
  • 유연성: 다양한 플러그인과 함께 사용이 가능하다. (예: OkHttp, Gson, RxJava 등)
  • 간결한 코드: 어노테이션 기반의 구성으로 코드가 간결하고 가독성이 좋다.

Java 예제로 Retrofit 사용하기

1. Retrofit 라이브러리 추가

dependencies {
    implementation 'com.squareup.retrofit2:retrofit:2.x.x'
    implementation 'com.squareup.retrofit2:converter-gson:2.x.x'
}

2. API 인터페이스 정의

public interface ApiService {
    @GET("users/{user}/repos")
    Call<List<Repo>> listRepos(@Path("user") String user);
}

3. Retrofit 인스턴스 생성

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://api.github.com/")
    .addConverterFactory(GsonConverterFactory.create())
    .build();

ApiService apiService = retrofit.create(ApiService.class);

4. API 호출 및 응답 처리

Call<List<Repo>> call = apiService.listRepos("octocat");
call.enqueue(new Callback<List<Repo>>() {
    @Override
    public void onResponse(Call<List<Repo>> call, Response<List<Repo>> response) {
        if (response.isSuccessful()) {
            List<Repo> repos = response.body();
            // 데이터 처리 로직
        } else {
            // 에러 처리 로직
        }
    }

    @Override
    public void onFailure(Call<List<Repo>> call, Throwable t) {
        // 네트워크 실패 등의 에러 처리
    }
});

Retrofit의 장점

  1. 간결성: 어노테이션을 사용하여 API를 정의하므로 코드가 간결하고 명확하다.
  2. 확장성: 다양한 컨버터와 어댑터를 통해 확장이 용이하다.
  3. 효율성: 동기 및 비동기 요청을 모두 지원한다.

마치며

Retrofit은 안드로이드 개발에서 서버와의 통신을 단순화하고 효율화하는 데 큰 도움을 준다.

복잡한 네트워킹 코드 없이도 간결하고 효율적인 API 통신을 구현할 수 있게 된다.

개발자들은 이러한 라이브러리를 통해 개발 시간을 단축하고 코드의 품질을 높일 수 있다.

안드로이드 애플리케이션 개발: Clean Architecture의 기본 원칙과 Java 예제를 통한 이해

person holding black android smartphone

먹을것들의 수많은 댓글을 통한 요청으로 안드로이드에 관련한 주제로 글을 써보려고 한다.

안드로이드 애플리케이션 개발은 다양한 아키텍처와 패턴으로 이루어진다.

그 중 Clean Architecture는 코드의 구조화와 유지보수성, 테스트 용이성을 중점으로 한 패턴이다.

이 글에서는 Clean Architecture의 기본 원칙과 Java 예제를 통해 이 아키텍처를 깊게 이해본다.

Clean Architecture란?

Clean Architecture는 애플리케이션의 구조를 여러 계층으로 나누어 각 계층이 독립적인 역할을 수행하도록 하는 아키텍처 패턴이다.

주요 계층은 다음과 같다:

  • Entity: 비즈니스 로직을 담당하는 모델 객체이다.
  • Use Cases (or Interactors): 애플리케이션의 비즈니스 로직을 정의한다.
  • Interface Adapters: 데이터 변환과 같은 인터페이스를 적용한다.
  • Frameworks and Drivers: UI, 데이터베이스, 외부 API 등의 구체적인 구현을 포함한다.

Java 예제로 Clean Architecture 이해하기

1. Entity

public class User {
    private final String id;
    private final String name;

    public User(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }
}

2. Use Cases

public class GetUserDetailUseCase {
    private UserRepository userRepository;

    public GetUserDetailUseCase(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public User execute(String userId) {
        return userRepository.getUser(userId);
    }
}

3. Interface Adapters

public interface UserRepository {
    User getUser(String userId);
    void saveUser(User user);
}

4. Frameworks and Drivers

여기서는 안드로이드 액티비티를 간단하게 예시로 들었다.

public class UserDetailActivity extends AppCompatActivity {
    private GetUserDetailUseCase getUserDetailUseCase;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_detail);
        // ... 초기화 로직
        User user = getUserDetailUseCase.execute(userId);
        displayUserDetail(user);
    }

    private void displayUserDetail(User user) {
        // UI 업데이트 로직
    }
}

Clean Architecture의 장점

  1. 독립성: 각 계층은 독립적으로 운영되므로, 변경과 테스트가 쉽다.
  2. 재사용성: 비즈니스 로직은 프레임워크나 UI와 독립적이므로 재사용이 용이하다.
  3. 유지보수성: 구조가 체계적이므로 코드의 유지보수가 쉽다.

참고하면 좋은 자료

안드로이드 공식문서이다.
천천히 읽으면서 참고하면 Clean Architecture의 전반적인 구조를 이해하기 좋다.
Android Developer – App architecture guide

NHN 밋업문서이다.
이 글과 위의 안드로이드 공식문서를 전체적으로 읽고 이해한 뒤, Clean Architecture의 개념 고도화를 위해 참고하면 좋다.
[Android] 요즘 핫한 Clean Architecture 왜 쓰는 거야?

마치며

Clean Architecture는 안드로이드 애플리케이션의 복잡성을 관리하는 데 있어 효과적인 방법이다.

개발자로서 이 아키텍처를 학습하고 실제 프로젝트에 적용하면 큰 도움이 될 것이다.

오늘의 이슈 (2023-08-09)

1위

태풍

클릭 수: 100,000+images?q=tbn:ANd9GcTW3T e3nI4Ic7Nq QR6Qo69dmLwu3a995TvVbHnEvFop5OU4YYaoiqNc1wr0b8Pp J4mbD KJY

태풍 상륙 대비해 경남도 비상1단계 가동

제6호 태풍 의 남해안 상륙에 대비해 경상남도 재난안전대책본부가 비상1단계를 가동했다. 기상청은 8일 “태풍 카눈이…


2위

세계 고양이의 날

클릭 수: 20,000+

세계 고양이의 날, 열려

세상 모든 고양이들아 행복해!” 반짝반짝한 눈, 복실복실한 털, 살랑이는 꼬리, 작고 귀여운 손발에 달린 젤리… 8월 8일 …


3위

토트넘

클릭 수: 10,000+

히샬리 …

토트넘은 6일(한국시간) 오후 10시 영국 런던 토트넘 핫스퍼 스타디움에서 우크라이나의 샤흐타르 도네츠크와 2023-2024 프리시즌 친선경기를 치러 5-1로 승리했다. 이날…


4위

입추

클릭 수: 10,000+

[날씨] 절기 내륙 무더위…내일부터 태풍 영향권

[날씨] 절기 인 오늘도 내륙을 중심으로 무더위가 계속되겠고, 곳곳에 요란한 소나기가 지나겠습니다.


5위

김은경

클릭 수: 5,000+images?q=tbn:ANd9GcQDQskCO89yR9wY2u1BE5KEQKSxm glaEfN9eKKNvGaehGyKeB78904CDzonO7WzFDhPVSKA5mY

이재명, 김은경

이재명 더불어민주당 대표가 김은경 혁신위원장의 …


6위

김은경 혁신위원장

클릭 수: 5,000+images?q=tbn:ANd9GcR d3E8lmQuqWxPa TGblBqEDrhI5mLzWrvk44RN cOSY TXH nSBgpfdB8uoG2giwNCqBHioVD

김은경 더불어민주당 혁신위원장에 대한 시누이 글이 사실이라면

“이 때로부터 예수 그리스도께서 자기가 예루살렘에 올라가 장로들과 대제사장들과 서기관들에게 많은 고난을 받고 죽임을 당하고 제삼일에 살아나야 할 것을 제자들…


7위

좀비버스

클릭 수: 2,000+images?q=tbn:ANd9GcSybL3mddhBnyEMX tq2hOeEa DpJReqKZjUymVu44 LxRxTF5IePL4zvnZ Ox23C0RS 4hmvFJ

[현장] 넷플릭스 예능 “생존을 위한 좀비 탈출 퀘스트가 시작 …

넷플릭스 \…


8위

류현진

클릭 수: 2,000+

류현진, 강습타구에 부상…김하성, 이치로와 어깨 나란히

[앵커] 미국 프로야구 토론토의 류현진이 복귀 후 두 번째 경기에서 4이닝을 무실점으로 잘 막았지만 강습…


9위

성일종

클릭 수: 2,000+images?q=tbn:ANd9GcSqOQ8LCF dLKxh3vjKt 7ztoIkNNg iuZj4LhjUysZQ4ZPzR1RU ldeMPEAlAwKLsh9jHtugB7

성일종

총체적 부실 운영 논란의 새만금 잼버리 대회. 스카우터들이 손꼽아 기다리던 k팝 콘서트는 일정과 장소가 두 차례나 변경되면서 출연진 섭외도 어려워졌다는데요.


10위

토트넘 케인

클릭 수: 2,000+images?q=tbn:ANd9GcQS2GxjcwogffJzBbFzSN44dRZpJ4oURCZxI8BJXgKbl lW2oo82MHGkhrIgNzsB44MtbDqKT69

하지만 케인, 토트넘 잔류한다 …

디 애슬레틱은 9일(이하 한국시간) …


11위

SPC

클릭 수: 2,000+images?q=tbn:ANd9GcQQdQsTNcZhJ5mI8HsdLOALhKZCNO2BkhJwR028yBSLIZYC50rJwAp

여전


12위

조하나

클릭 수: 2,000+

조영남, 27살 연하 조하나에 구애…

가수 조영남(78)이 배우 겸 무용가 조하나(51)에 적극적으로 구애를 펼쳤다.지난 7일 방송된 tvN STORY 예능 프로그램 …


13위

서현역 최원종

클릭 수: 2,000+

서현역 피의자 신상공개..22살 최원종

경찰이 분당 서현역 피의자가 22.


14위

박서준

클릭 수: 2,000+images?q=tbn:ANd9GcRiMK8gsT Dzg 3P4PIjbkhFEQnPpRCrbCtTgnWH30fWo3RrNQHdsCR7JzbwsBZcNPYbW8LG3GN

박서준·안보현, 인성 논란 더 씁쓸한 이유

배우 박서준과 안보현이 나란히 핑크빛 스캔들의 후폭풍에 시달리며 안타까움을 자아내고 있다….


15위

일본

클릭 수: 2,000+

일본 정부가 후쿠시마 원전 오염수 해양 방류를 이르면 이달 하순 시작하는 방향으로 조율하고 있다고 요미우리신문과 아사히신문이 보도했습니다.


16위

파두

클릭 수: 2,000+images?q=tbn:ANd9GcR x8W03qRKWlj0H4FEuc

파두 주가 코스닥 상장 첫날 9%대 하락, 공모가 밑돌아

이지효 파두 대표이사(오른쪽 3번째)가 7일 오전 9시 한국거래소 서울 홍보관에서 코스닥시장 상장기념식에 참석해 사진을 찍는 모습. …


17위

잼버리 성범죄

클릭 수: 2,000+images?q=tbn:ANd9GcT0o3yIXaeW2R1TC ad3SkQf5PlOol8v0N4NFSPVJ48b3unht28Ae4jg9TSncShZcSZt17XRAXp

잼버리 성범죄 의혹에… 민주 – 조세 …

조세, 회계, 세무, 금융, 산업, 경제 기사 및 세무 신고, 세법, 예규, 판례, 재무교육, 재무인물정보.


18위

BTS 슈가

클릭 수: 1,000+images?q=tbn:ANd9GcRc4J904vHM0PfdxnjDNp5JVs2VGAWx BO4w6ojwxo9hvpzI6O8eTRbuw8M3HxpsFCkZ OuzFlk

BTS 슈가 입대… 멤버 세 번째

그룹 방탄소년단(BTS)의 멤버 슈가(30·사진)가 입대한다. 팀에서 지난해 12월 입대한 맏형 진, 올 4월 입대한 제이홉에 이어 세 번째다. 소속사 빅히트뮤직은 7일 팬 …


19위

백현

클릭 수: 1,000+images?q=tbn:ANd9GcSpZPjM5J2cT RJ 46s9ynZoGfxn66iiJohLSuQGEwZlDMU7287SwHF3cQYFJ0JOGEXgsg ed7o

백현+유엔빌리지라지만…신생사에 100억 대출해준 다올저축은행

원시그니처는 제 친구 캐스퍼와 함께 좋은 안무가, 그리고 댄서 분들을 많이 양성하고 싶다는 생각으로 시작된 회사입니다. 아직 구체화되기 전이지만…..


20위

김관영

클릭 수: 1,000+images?q=tbn:ANd9GcRBL sRvgEniAyj2Z61ENL y8qlSwMyHjy4IbmP2TyDb7Yu miSdzUv2CiZyF4a9G3bgEG5mlaz

김관영 전북지사가 짊어져야할 책임

[시사주간=황채원 기자] 새만금 잼버리대회가 기록적인 폭염과 운영 미숙으로 인해 영국과 미국 참가자들이 중도 퇴소하는 등 난맥상을 보이고 있다.


iOS 아키텍처 패턴 – 5: RIB’s

black iPad

iOS 애플리케이션 개발에서는 여러 아키텍처 패턴들이 사용된다.

그 중 RIB’s (Router, Interactor, Builder)는 Uber에서 소개된 아키텍처로, 확장성과 테스트 용이성을 중점으로 한 패턴이다.

이 글에서는 RIB’s의 기본 개념과 Swift를 이용한 예제를 통해 이 패턴을 자세히 알아본다.

RIB’s란?

RIB’s는 Router, Interactor, Builder의 약자로 다음과 같은 역할을 한다:

  • Router: 화면 전환과 같은 뷰의 네비게이션 로직을 담당한다.
  • Interactor: 비즈니스 로직을 담당한다.
  • Builder: RIB의 인스턴스 생성과 의존성 주입을 담당한다.

Swift 예제로 MVC 이해하기

1. Interactor

protocol ProfileInteractable: AnyObject {
    func fetchUserProfile() -> UserProfile
}

class ProfileInteractor: ProfileInteractable {
    func fetchUserProfile() -> UserProfile {
        // API 호출이나 데이터베이스 조회 등의 로직
        return UserProfile(name: "John Doe", age: 25)
    }
}

2. Router

protocol ProfileRoutable: AnyObject {
    func routeToDetailScreen(userProfile: UserProfile)
}

class ProfileRouter: ProfileRoutable {
    func routeToDetailScreen(userProfile: UserProfile) {
        // 상세 화면으로의 라우팅 로직
    }
}

3. Builder

class ProfileBuilder {
    static func build() -> ProfileViewController {
        let interactor = ProfileInteractor()
        let router = ProfileRouter()
        let viewController = ProfileViewController(interactor: interactor, router: router)
        return viewController
    }
}

4. View Controller

UIKit을 사용하여 간단한 예제를 구현했다.

import UIKit

class ProfileViewController: UIViewController {
    private let interactor: ProfileInteractable
    private let router: ProfileRoutable

    init(interactor: ProfileInteractable, router: ProfileRoutable) {
        self.interactor = interactor
        self.router = router
        super.init(nibName: nil, bundle: nil)
    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    // ViewController 로직 (예: 버튼 액션 등)
}

RIB’s의 장점

  1. 모듈화: RIB’s는 애플리케이션을 독립적인 모듈로 분리하므로, 확장성과 유지보수가 쉽다.
  2. 재사용성: 비즈니스 로직과 라우팅 로직이 분리되어 있어 재사용이 용이하다.
  3. 테스트 용이성: 각 컴포넌트가 독립적이므로 단위 테스트하기 쉽다.

마치며

RIB’s는 큰 규모의 프로젝트나 복잡한 네비게이션 구조를 가진 애플리케이션에 특히 적합한 아키텍처 패턴이다.

이 패턴을 통해 iOS 애플리케이션의 구조와 코드 품질을 개선할 수 있다.

개발자로서 RIB’s를 학습하고 여러 프로젝트에 적용해보면 더욱 큰 경험을 얻을 수 있을 것이다.

iOS 아키텍처 패턴 – 4: VIPER

a computer monitor sitting on top of a wooden desk

iOS 개발의 세계에는 다양한 아키텍처 패턴이 존재한다.

이 중에서도 VIPER는 크고 복잡한 프로젝트에서 코드의 구조와 관리를 개선하기 위해 도입되는 아키텍처 중 하나이다.

이 글에서는 VIPER의 구성 요소와 Swift 예제를 통해 이 패턴을 깊게 이해해보도록 한다.

VIPER란?

VIPER는 View, Interactor, Presenter, Entity, Router의 약자로, 각 구성 요소는 다음과 같은 역할을 담당한다.

  • View: 사용자에게 보여지는 UI 요소를 담당한다.
  • Interactor: 비즈니스 로직을 수행한다.
  • Presenter: View와 Interactor 사이에서 데이터를 변환하고 조정한다.
  • Entity: 애플리케이션의 기본 데이터 객체이다.
  • Router: 화면 간의 전환 로직을 담당한다.

Swift 예제로 VIPER 이해하기

1. Entity

struct Article {
    let title: String
    let content: String
}

2. Interactor

protocol ArticleInteractorProtocol {
    func fetchArticles() -> [Article]
}

class ArticleInteractor: ArticleInteractorProtocol {
    func fetchArticles() -> [Article] {
        // 여기서 데이터베이스 또는 API로부터 데이터를 가져온다.
        return [Article(title: "Sample Title", content: "Sample Content")]
    }
}

3. Presenter

protocol ArticlePresenterProtocol {
    func viewDidLoad()
}

class ArticlePresenter: ArticlePresenterProtocol {
    var view: ArticleViewProtocol?
    var interactor: ArticleInteractorProtocol?
    var router: ArticleRouterProtocol?

    func viewDidLoad() {
        let articles = interactor?.fetchArticles()
        view?.displayArticles(articles ?? [])
    }
}

4. View

SwiftUI를 사용하여 간단한 예제를 구현했다.

protocol ArticleViewProtocol: AnyObject {
    func displayArticles(_ articles: [Article])
}

import SwiftUI

struct ArticleView: View, ArticleViewProtocol {
    var presenter: ArticlePresenterProtocol?

    var body: some View {
        // UI 구성
    }

    func displayArticles(_ articles: [Article]) {
        // UI 업데이트 로직
    }
}

5. Router

protocol ArticleRouterProtocol {
    func navigateToDetail(article: Article)
}

class ArticleRouter: ArticleRouterProtocol {
    func navigateToDetail(article: Article) {
        // 상세 화면으로의 전환 로직
    }
}

VIPER의 장점

  1. 단일 책임 원칙: 각 모듈은 자신의 역할에만 집중한다. 이로 인해 코드의 품질과 유지보수성이 향상된다.
  2. 테스트 용이성: 각 구성 요소는 독립적이므로 단위 테스트하기 쉽다.
  3. 모듈화: VIPER는 모듈화를 장려하여, 팀원 간의 협업이 더욱 원활해진다.

마치며

VIPER는 iOS 애플리케이션의 복잡도를 효과적으로 관리할 수 있는 강력한 아키텍처 패턴이다.

큰 프로젝트나 팀으로의 개발 시에 특히 유용하므로, 개발자로서 이 패턴을 학습하고 경험하는 것은 큰 자산이 될 것이다.

iOS 아키텍처 패턴 – 3: MVP

a blurry image of a computer screen with text

iOS 애플리케이션 개발은 수많은 디자인 패턴과 아키텍처 스타일로 이루어진다.

MVVM와 MVC에 이어, MVP (Model-View-Presenter)는 iOS 개발에서 사용되는 또 다른 중요한 패턴 중 하나이다.

이 글에서는 MVP 패턴의 핵심 개념과 Swift 예제 코드를 통해 이 아키텍처의 매력을 소개한다.

MVP란?

MVP는 Model, View, Presenter의 약자로, 이 세 가지 구성 요소로 애플리케이션을 구조화하는 디자인 패턴이다.

  • Model: 데이터와 비즈니스 로직을 담당한다.
  • View: 사용자에게 보여지는 UI 요소이다. 사용자의 입력을 받아 Presenter에 전달한다.
  • Presenter: View와 Model 사이의 중재자 역할을 하며, 로직을 수행하고 View에 결과를 전달한다.

Swift 예제로 MVP 이해하기

1. Model

struct Task {
    let title: String
    var isCompleted: Bool
}

2. View

protocol TaskViewProtocol: AnyObject {
    func displayTasks(_ tasks: [Task])
}

3. Presenter

class TaskPresenter {
    weak var view: TaskViewProtocol?
    var tasks: [Task] = []

    func addTask(title: String) {
        let newTask = Task(title: title, isCompleted: false)
        tasks.append(newTask)
        view?.displayTasks(tasks)
    }

    func toggleTaskCompletion(at index: Int) {
        tasks[index].isCompleted.toggle()
        view?.displayTasks(tasks)
    }
}

4. View Implementation

UIKit을 사용하여 간단한 예제를 구현했다.

import UIKit

class TaskViewController: UIViewController, TaskViewProtocol {
    var presenter: TaskPresenter?

    // TableView, Buttons, 등의 UI 요소 선언.

    func displayTasks(_ tasks: [Task]) {
        // 주어진 tasks 파라미터를 통해 UI를 업데이트 한다.
    }

    // 사용자 상호 작용을 처리하고 적절한 발표자 메서드를 호출한다.
}

MVP의 장점

  1. 명확한 분리: MVP는 로직과 UI의 분리를 명확하게 한다. 이로 인해 유닛 테스트가 더 쉬워진다.
  2. 재사용성: Presenter는 UI 플랫폼에 독립적이므로 다양한 View에서 재사용할 수 있다.
  3. 유연성: 애플리케이션의 기능 확장이나 변경이 필요할 때, 각 부분을 독립적으로 수정하거나 추가할 수 있다.

마치며

MVP는 iOS 애플리케이션 개발에서 효과적인 아키텍처 패턴 중 하나이다.

MVC나 MVVM과는 다르게, MVP는 View와 로직을 더욱 철저하게 분리하여 개발 및 테스팅의 효율성을 높인다.

iOS 개발을 공부하는 개발자들에게 MVP 패턴의 적용은 필수적인 경험이 될 것이다.

iOS 아키텍처 패턴 – 2: MVC

black flat screen computer monitor

iOS 애플리케이션 개발을 시작할 때 가장 기본적으로 알아야 할 아키텍처 패턴은 바로 MVC (Model-View-Controller)다.

이 글에서는 MVC 패턴의 기본 개념과 Swift 예제 코드를 통해 MVC의 구조를 이해하는 데 도움을 줄 것이다.

MVC란?

MVC는 Model, View, Controller의 약자로, 이 세 가지 구성 요소로 애플리케이션을 구조화하는 디자인 패턴이다.

  • Model: 데이터와 비즈니스 로직을 담당한다.
  • View: 사용자에게 보여지는 UI 요소이다.
  • Controller: Model과 View 사이의 중재자 역할을 한다. 사용자의 입력을 받아 Model을 변경하고, Model의 변경사항을 View에 반영한다.

Swift 예제로 MVC 이해하기

1. Model

struct Book {
    let title: String
    let author: String
}

2. Controller

class BookController {
    var books: [Book] = []

    func addBook(title: String, author: String) {
        let newBook = Book(title: title, author: author)
        books.append(newBook)
        // View 업데이트 로직
    }

    func removeBook(at index: Int) {
        books.remove(at: index)
        // View 업데이트 로직
    }
}

3. View

UIKit을 사용하여 간단한 예제를 구현했다.

import UIKit

class BookViewController: UIViewController {
    var bookController = BookController()

    // 여기에 TableView나 다른 UI 요소들을 정의하고, 사용자의 입력을 받아 Controller에 전달하는 로직을 구현.
}

MVC의 장점

  1. 분리된 책임: Model, View, Controller 각각의 역할이 명확하게 분리되어 있다.
  2. 재사용성: Model과 View는 재사용이 가능하며, 다양한 Controller와 함께 사용될 수 있다.
  3. 확장성: 애플리케이션의 기능이 확장되어도 각 부분을 독립적으로 관리할 수 있어 유지보수가 용이하다.

주의점

MVC 패턴은 잘못 사용될 경우 Controller가 과도하게 커질 수 있다.

이를 “Massive View Controller” 문제라고 부르며, 이를 피하기 위해 다른 아키텍처 패턴들 (예: MVVM, VIPER)이 제안되기도 했다.

마치며

MVC는 iOS 애플리케이션 개발의 기본적인 아키텍처 패턴이다.

올바르게 사용될 경우 강력하고 유연한 애플리케이션 구조를 제공한다.

iOS 개발의 세계에 발을 들이는 개발자들은 MVC의 기본 원칙을 잘 이해하고, 다양한 프로젝트에 적용해보길 권장한다.

iOS 아키텍처 패턴 – 1: MVVM

multicolored text

애플의 iOS는 전세계적으로 수백만의 사용자들이 사용하는 모바일 운영체제 중 하나이다.

따라서 iOS 애플리케이션을 개발하는 것은 많은 책임을 수반한다.

효율적이고 관리하기 쉬운 코드를 작성하기 위해 여러 아키텍처 패턴이 있다.

그 중에서도 MVVM (Model-View-ViewModel)은 현대 iOS 개발자들에게 인기있는 선택 중 하나다.

MVVM이란?

MVVM은 Model-View-ViewModel의 약자로, UI 로직과 비즈니스 로직을 분리하여 코드의 가독성과 재사용성을 높이는 디자인 패턴이다.

  • Model: 데이터와 비즈니스 로직을 담당한다.
  • View: 사용자에게 보여지는 UI 요소이다.
  • ViewModel: View와 Model 사이의 다리 역할을 한다. 사용자의 액션에 따라 Model을 업데이트하고, Model의 변경사항을 View에 반영한다.

Swift 예제로 MVVM 이해하기

1. Model

struct User {
    let name: String
    let age: Int
}

2. ViewModel

class UserViewModel {
    private var user: User

    var displayName: String {
        return "이름: \(user.name)"
    }

    var displayAge: String {
        return "나이: \(user.age)세"
    }

    init(user: User) {
        self.user = user
    }
}

3. View

SwiftUI를 사용하여 간단한 예제를 구현했다.

import SwiftUI

struct UserView: View {
    @ObservedObject var viewModel: UserViewModel

    var body: some View {
        VStack {
            Text(viewModel.displayName)
            Text(viewModel.displayAge)
        }
    }
}

MVVM의 장점

  1. 재사용성: ViewModel은 platform-independent하므로 다양한 View에서 재사용이 가능하다.
  2. 테스트 용이성: ViewModel은 UI 요소와 독립적이므로 단위 테스트하기 용이하다.
  3. 분리: 로직과 UI가 분리되어 있어, 각각의 부분에 대한 유지보수가 쉽다.

마치며

MVVM은 iOS 개발에서 코드의 구조와 관리를 개선하기 위한 훌륭한 방법 중 하나이다.

애플리케이션의 복잡도가 증가함에 따라 MVVM 같은 아키텍처 패턴의 중요성은 더욱 커질 것이다.

MVVM을 적용하여 더 나은 iOS 애플리케이션을 개발해보길 바란다.

오늘의 이슈 (2023-08-08)

1위

태풍 카눈 경로

클릭 수: 20,000+images?q=tbn:ANd9GcTqyIOaejw1edTCB fSWOJydSXmiKQz1fu 3T9c gvkMTEaZ6uLllqF6ZS8WzgC4Lz QL4y2 gT

6호 태풍 카눈, 예상경로 서쪽으로 이동… 한반도 관통

제6호 태풍 카눈(KHANUN)의 예상경로가 서쪽으로 조정되면서 전국이 태풍의 영향권에 들 것으로 보인다.기상청이 6일 오후 4시 발표한 태풍 정보에 따르면 태풍 카눈은…


2위

로또1079회당첨번호

클릭 수: 20,000+images?q=tbn:ANd9GcQtoNSdEwRd8TCA85FUZskvZFGjZHPN2KFhzXw3byenpRiwSN fZZyPDcEYNWMCl99k9sZaz4 G

1079회 로또 당첨번호 조회, 1등 9명 27억1천만원 씩, 당첨지역, 복권 …

[푸드경제신문 이주석 기자] 제1079회 로또당첨번호가 발표됐다. 1등 당첨번호는 …


3위

대전 칼부림

클릭 수: 20,000+images?q=tbn:ANd9GcS

[속보] 대전 대덕구 고교 칼부림 용의자 검거

[굿모닝충청 조연환‧신성재 기자] 4일 오전 10시 4분경 대전 대덕구의 한 고등학교에서 40대 교사를 찌르고 달아난 범인이 경찰에 붙잡혔다.대전경찰청은 이날 오후 12…


4위

토트넘

클릭 수: 10,000+

히샬리 …

토트넘은 6일(한국시간) 오후 10시 영국 런던 토트넘 핫스퍼 스타디움에서 우크라이나의 샤흐타르 도네츠크와 2023-2024 프리시즌 친선경기를 치러 5-1로 승리했다. 이날…


5위

최원종

클릭 수: 10,000+images?q=tbn:ANd9GcT72A lEGnC8moKkkqQwQ QBgLnor8PzPOkDwWVRLi5ca3QtnIeOsKsmyrzJpQaa5jkSgjug9GM

서현역 흉기난동 최원종, 머그샷 거부에… “촬영 선택권도 주나” 비판론

경기 성남시 분당구 서현역에서 무차별로 흉기를 휘두르고, 고의 차량 돌진으로 14명의 사상자를 낸 피의자 최원종(22‧구속)의 신상정보가 공개됐다.


6위

김은경

클릭 수: 10,000+images?q=tbn:ANd9GcQDQskCO89yR9wY2u1BE5KEQKSxm glaEfN9eKKNvGaehGyKeB78904CDzonO7WzFDhPVSKA5mY

이재명, 김은경

이재명 더불어민주당 대표가 김은경 혁신위원장의 …


7위

입추

클릭 수: 5,000+images?q=tbn:ANd9GcS8PQSG7wW7zT

… 강원도 곳곳 소나기 최대 60㎜

입추(立秋)이자 화요일인 8일 강원도는 대체로 흐리고 가끔 비가 내리겠다.예상 강수량은 강원 영동 10∼60㎜, 남부 내륙 5∼40㎜다.이날 오전 5시 현재 주요 지역의…


8위

신논현역

클릭 수: 5,000+images?q=tbn:ANd9GcS 3 ywcnkbloThpOVxXI3nYgalkAqogFxEsG W0hXFJ1wKHjQWZ ZNCj7n98s9 Ibu92gOXQWr

“열차에 난동범 있다” 아수라장 된 신논현역···경찰·소방 “오인 신고로 …

서울 9호선 열차에서 흉기난동 및 생화학 테러 오인 신고가 연달아 접수돼 시민들이 신논현역에…


9위

김은경 혁신위원장

클릭 수: 5,000+images?q=tbn:ANd9GcSqOQ8LCF dLKxh3vjKt 7ztoIkNNg iuZj4LhjUysZQ4ZPzR1RU ldeMPEAlAwKLsh9jHtugB7

김은경 시누이 폭로


10위

소방서 옆 경찰서 그리고 국과수

클릭 수: 5,000+images?q=tbn:ANd9GcT59FXO3Al

…더욱 강력해진 공조 (종합)[Oh!쎈 …

신 감독은 “아마 대한민국에 새 드라마를 시작하는 감독님들은 모두 작정을 하고 만들거라 생각한다. 특히 …


11위

맨시티 아스날

클릭 수: 2,000+images?q=tbn:ANd9GcSmZnMMm iZjFKSElWlsTblC7HbwUSTTttuRnYUPNYlvynfVnaEqLcljrHbnKryE gf wKnA3A4

맨시티 승부차기 끝에 꺾고 커뮤니티 실드 우승

[미디어펜=석명 기자] 지난 시즌 잉글랜드 프리미어리그(EPL) 2위팀 아스날이 을 달성했던 맨체스터 시티를 꺾고 커뮤니티 실드에서 우승했다.


12위

일본

클릭 수: 2,000+

“일본, 이르면 8월 하순 오염수 방류…한미일 회의 후 시기 확정”

일본 정부가 후쿠시마 제1원자력발전소 오염수(일본 정부 명칭 ) 해양 방류를 이르면 이달 하순에…


13위

파두

클릭 수: 2,000+images?q=tbn:ANd9GcT7Uv20shu hw7fPK5LvaSePhzm oc6eH0R7e96xMSH6m4cZ vieaxVY8I 5tryFIThfJ9Tp0Rv

IPO 대어 찾아갔나

하반기 기업공개(IPO) 시장 대어로 꼽힌 팹리스업체 파두가 상장 첫날 공모가를 밑도는 부진한 성적으로 거래를 마쳤다. 7일 한국거래소에 따르면 이날 코스닥 시장에…


14위

잼버리 성범죄

클릭 수: 2,000+images?q=tbn:ANd9GcRUf9kCDLyhNPRiqOh6ziBCWTrKyduPtySBF0jncnAoONoD0xmsQjAOLExLCwQ V4eghwh59sf8

“문화적 차이” 잼버리 성범죄 논란에…“피해자에게 배신이라니” 전북 …

전북 새만금 세계스카우트 잼버리대회에서 성범죄가 발생한 후에 대응이 미흡했다며 일부 참가자 측이 퇴소 입장을 밝혔다. 성범…


15위

박선영

클릭 수: 2,000+images?q=tbn:ANd9GcRA 5OZRAqLp2iIDn G psI4GPly

52세 박선영

배우 박선영이 52세의 나이에도 임신이 가능하다고 밝혔다. 박선영은 지난 6일 방송된 SBS TV 예능물 …


16위

서현역 최원종

클릭 수: 2,000+images?q=tbn:ANd9GcRxVfPDXIydw 7z0pIX84x8oTRoYqI4TA 0HwsEuLUpkmVeSveCDVlgvGoL95JYhPP3QgYBrpl

14명 사상 피의자는 22살 최원종

신상공개심의위원회 “범죄의 잔인성·중대성 인정”


17위

이다영

클릭 수: 2,000+images?q=tbn:ANd9GcRGFOnTs55n3omgUpWhAKW9HfecdIbAKauhUPCMc7613F3paXmyLsjiUbzYgJpjLhCEBi3bJcbU

“내 학교폭력과 무관” 이재영 지원사격 나선 이다영, 이재영은 V-리그에 …

2020-2021시즌 흥국생명에서 함께 활약한 이다영과 이재영은 시즌 도중 학교폭력 논란이 터지며 무기한 출장정지 징계를 받았다. 이후 V-리그에서는 사실상 퇴출됐고 함께…


18위

형따라 마야로

클릭 수: 2,000+

믿고 보는 차승원 예능.. 첫방 최고 시청률=5.6% [종합]

tvN …


19위

김관영

클릭 수: 1,000+images?q=tbn:ANd9GcRBL sRvgEniAyj2Z61ENL y8qlSwMyHjy4IbmP2TyDb7Yu miSdzUv2CiZyF4a9G3bgEG5mlaz

김관영 전북지사가 짊어져야할 책임

[시사주간=황채원 기자] 새만금 잼버리대회가 기록적인 폭염과 운영 미숙으로 인해 영국과 미국 참가자들이 중도 퇴소하는 등 난맥상을 보이고 있다.


20위

이병헌

클릭 수: 1,000+

이병헌·이민정 부부, 새로운 소식 전해

이병헌 소속사 BH엔터테인먼트 측은 “이병헌과 이민정 부부가 둘째를 임신했다”고 밝혔다. 이민정·이병헌 부부는 2013년 8월 결혼해 2015년 3월 아들 준후 군을 출산…


오늘의 이슈 (2023-08-07)

1위

월드컵

클릭 수: 200,000+images?q=tbn:ANd9GcT8f 5RKoRMk9W2 s8RsP lMf08KR8V ZlhrorKYQ Yx7HI 3JKUgeADjdyDygfRqsMSfBVu2YH

절망에 빠진 독일, 韓에 발목 잡혀 16강 탈락→5년 전 …

한국은 월드컵 무대에서 두 번이나 독일의 발목을 잡았다. 독일은 큰 충격에 휩싸였다. 국제축구연맹(FIFA) 랭킹 17위 한국 여자축구대표팀은 3일 호주 브리즈번의…


2위

서현역 칼부림

클릭 수: 200,000+

지난 3일 오후 경기 성남시 분당 서현역 인근 대형 쇼핑몰에서 사건이 벌어졌다. 4일 오전 사건 현장 인근으로 경찰차가 진입하고 있다.


3위

태풍

클릭 수: 20,000+images?q=tbn:ANd9GcRRZPkYt vwZr c6 f6MwjxPImYNYDtQwyMBb5mFzf7xbSZGRaQ

태풍 카눈, 10일 한반도 관통할 듯

기상청에 따르면, 상태로 동진 중이다.


4위

로또1079회당첨번호

클릭 수: 20,000+

로또 1079회 당첨번호+당첨지역…수도권 당첨

로또 1079회 당첨 번호가 발표됐다.5일 동행복권 사이트에 따르면 1079회 로또 당첨 번호 조회 결과 1등 당첨번호는 이다.


5위

대전 칼부림

클릭 수: 20,000+images?q=tbn:ANd9GcS

[속보] 대전 대덕구 고교 칼부림 용의자 검거

[굿모닝충청 조연환‧신성재 기자] 4일 오전 10시 4분경 대전 대덕구의 한 고등학교에서 40대 교사를 찌르고 달아난 범인이 경찰에 붙잡혔다.대전경찰청은 이날 오후 12…


6위

지수 안보현

클릭 수: 20,000+images?q=tbn:ANd9GcTPp4A6BmCaxsC8 iWfWlLeOery5PlgxmzBuRLtjoRmvIW9

지수·안보현, 공개 열애 이튿날까지 화제…과거 이상형 발언 조명까지

그룹 블랙핑크 멤버인 지수와 배우 안보현이 공개 열애를 시작했다. 이에 국내 뿐만 아니라 해외에서까지 두 사람의 열애를 집중 보도하면서 이튿날까지 화제가…


7위

토트넘

클릭 수: 10,000+images?q=tbn:ANd9GcTpyhsWoYweB6cY Dsr j9LnVGjS72nS2CVdBH8LBAwdk51Wpk0P3En3jYzZL0yJibfaXml Rae

…토트넘, 샤흐타르 5 …

[포포투=오종헌]최근 이적설이 끊이지 않고 있는 해리 케인이 맹활약을 펼쳤다. 토트넘 훗스퍼는 6일 오후 10시(이하 한국시간) 영국 런던에 위치한 토트넘 훗스퍼…


8위

김은경

클릭 수: 10,000+images?q=tbn:ANd9GcSbpueVuLzbz4jWQl2HEVfTe78i9hAgk 9CweC2 itmIe65g oWcb6qn4buV5ejqknzAQydkGu4

“김은경 민주당 혁신위원장, 18년간 시부모 협박” 시누이 글 파문

노인 비하…


9위

소방서 옆 경찰서 그리고 국과수

클릭 수: 5,000+images?q=tbn:ANd9GcT59FXO3Al

…더욱 강력해진 공조 (종합)[Oh!쎈 …

신 감독은 “아마 대한민국에 새 드라마를 시작하는 감독님들은 모두 작정을 하고 만들거라 생각한다. 특히 …


10위

고속터미널

클릭 수: 5,000+images?q=tbn:ANd9GcQWUt9wUbt6Gw28lY4AEVUda9nBEIifQ15eGUVEUaT3zRmjDiDXIOM9MIIgNXxR07cp bEnGfdv

서울 고속터미널서 흉기 소지 20대 체포‥

오늘 오전 10시 반쯤 서울 고속터미널에서 20대 남성이 흉기를 소지한 채 돌아다니다 경찰에 체포됐습니다. 서울 서초경찰서는 오늘 오전 10시 39분에 한 남성이 흉기…


11위

파리생제르망

클릭 수: 5,000+images?q=tbn:ANd9GcTou UoP9KOIUzGTpcJcLgO4XpQ4dj i WVqzXyfyEAPYuvNYrouRz6BuTDrhCd6fyiBpe2N7ud

“떠나겠다” 이적 요청한 佛 대표…올여름 파리 생제르맹 합류 원해

[골닷컴] 강동훈 기자 = 랑달 콜로 무아니(24·아인트라흐트 프랑크푸르트)가 이적을 공식적으로 요청했다는 보도다. 올여름 새로운 도전에 나서겠다는 의지가 강한…


12위

잼버리 성범죄

클릭 수: 2,000+images?q=tbn:ANd9GcRUf9kCDLyhNPRiqOh6ziBCWTrKyduPtySBF0jncnAoONoD0xmsQjAOLExLCwQ V4eghwh59sf8

논란

탈도 많고 대처에도 문제가 많았던 새만금 세계 잼버리 대회, 이번엔 성범죄 논란까지 빚어지고 있습니다. 한 외국인 참가자가 새벽 시간 여자 샤워실에 침입했다는…


13위

이다영

클릭 수: 2,000+images?q=tbn:ANd9GcRGFOnTs55n3omgUpWhAKW9HfecdIbAKauhUPCMc7613F3paXmyLsjiUbzYgJpjLhCEBi3bJcbU

“내 학교폭력과 무관” 이재영 지원사격 나선 이다영, 이재영은 V-리그에 …

2020-2021시즌 흥국생명에서 함께 활약한 이다영과 이재영은 시즌 도중 학교폭력 논란이 터지며 무기한 출장정지 징계를 받았다. 이후 V-리그에서는 사실상 퇴출됐고 함께…


14위

안은진

클릭 수: 2,000+images?q=tbn:ANd9GcSBAe4jm7vtOIG6xjp7fE0KnwRpOR8TBFjWh3AqkW3

남궁민‧안은진, 애틋 멜로 시작→병자호란 발발[TV핫샷]

[스포티비뉴스=김현록 기자]…


15위

뉴스

클릭 수: 2,000+images?q=tbn:ANd9GcSzzWBzRpURnezcy

이제는 예방책 마련과 항구 복구…

[앵커] 집중 호우로 경북 북부지역에 큰 피해가 난 지도 3주가 다 되어가는데요, 경상북도는 50년, 100년에…


16위

호신용품

클릭 수: 2,000+

…호신용품 판매 4배 급증

[앵커]서울 신림동 흉기난동 사건 이후 2주 만에 분당에서 유사한 모방범죄가 발생하면서 시민들의 불안감이 커지고 있습니다.이에 온라인에서는 호신용품 판매가…


17위

발더스게이트3

클릭 수: 2,000+images?q=tbn:ANd9GcSQYUbEt1OGrNCfv7oPBwS9Feu HPlE OyV6ReSnfLD6tMZkz3tWR27zdYTzrU4DtzctyDQ4h5v

지난 4일 스팀 내 정식 출시된 라리안 스튜디오의 RPG 신작 …


18위

박영수 구속

클릭 수: 1,000+images?q=tbn:ANd9GcS97mZuhvN6s6RLxyBuluw9kwfLnBIV7mWsXWexGUZri9kukRiafULM XcTXdyeJl9KfDAKB8wm

[사설]22개월 만에 박영수 구속… 실체 드러나나

대장동 의혹을 받고 있는 박영수 전 특별검사가 그제 구속됐다. 2021년 10월 50억 클럽 명단이 처음 공개된 이후 1년 10개월 만이다. 박 전 특검은 201…


19위

칼부림예고

클릭 수: 1,000+images?q=tbn:ANd9GcQ1d8YKHYQ2hDSrhCia5DjN5XlaccvFULbT7CF 2 RL

가짜 목록 유포한 30대 자수

충북 청주지역에서 마치 살인 예고글이 있던 것처럼 가짜 …


20위

중국

클릭 수: 1,000+

미 공화 하원의원 “중국 공세 강화 속 미한일 협력 매우 중요”

오는 18일 예정된 미한일 정상회의를 앞두고 미국 공화당 하원의원이 중국 문제에 대응하는 3국 협력의 중요성을 강조했습니다.