class ViewModel {
    enum Input {
        case changeInt(int: Int)
    }
    
    struct Output {
        let intPublisher: AnyPublisher<Int, Never>
    }
    
    private let intSubject = CurrentValueSubject<Int, Never>(1)
    let output: Output
    
    init() {
        output = .init(intPublisher: intSubject.eraseToAnyPublisher())
    }
    
    func action(input: Input) {
        switch input {
        case .changeInt(let int):
            intSubject.send(int)
        }
    }
}
//
//  ViewController.swift
//  IOTest
//
//  Created by 이동현 on 11/14/24.
//
import Combine
import UIKit

class ViewController: UIViewController {
    
    let viewModel = ViewModel()
    var cancellables = Set<AnyCancellable>()
    override func viewDidLoad() {
        super.viewDidLoad()
        bind()
    }
    
    private func bind() {
        viewModel.output.intPublisher
            .receive(on: DispatchQueue.main)
            .sink { int in
                print(int)
            }
            .store(in: &cancellables)
    }
    @IBAction func button(_ sender: Any) {
        viewModel.action(input: .changeInt(int: 10))
    }
}