HTTP vs Socket 소켓통신은 HTTP와 달리 양방향 연결이 이루어짐. -> 서버가 클라이언트의 요청이 없어도 데이터 전달 가능 HTTPS TCP(전송계층)와 http(응용계층)사이에서 작용하여 데이터를 암호화하여 전송 URL은 노출되지만, HTTP Body등은 암호화돼서 전송 REST API 6가지 원칙 Uniform Interface -> 자원에 대한 식별이 가능해야함 -> HTTP method를 통해 자원을 조작해야함 정해진 규칙이 있다고 생각하면될듯 Stateless(무상태) -> HTTP의 특징이므로 REST 또한 가짐 -> 클라이언트와 통신을 한 후, 상태가 서버에 저장되지않고 종료됨. Cacheable(캐시 가능) -> HTTP의 특징이므로 REST도 사용 가능. -> 서버의 부하를 ..
싱글톤패턴으로 UserDefaults 코드 수정 class UserDefaultsHelper { //인스턴스 생성방지 private init() {} //인스턴스 생성 static let shared = UserDefaultsHelper() let userDefaults = UserDefaults.standard let domain = Bundle.main.bundleIdentifier! //userdefaults 키 -> rawValue로 사용 enum Keys: String { case name case tamagotchi case status } var name: String { get { return userDefaults.string(forKey: Keys.name.rawValue) ?? "" ..
HTTP(Hyper Text Transfer Protocol) 인터넷에서 데이터를 주고 받을 수 있는 프로토콜 모든 프로그램이 규칙에 맞춰 개발해서 상호 간 정보 교환 가능. 클라이언트에서 http를 통하여 서버로 부터 데이터를 요청하면 서버는 json, xml 등의 형태로 응답을 줌. 특징 단방향 통신 -> 클라이언트가 요청을 해야만 서버가 리스폰스를 줄 수 있음. Connectionless -> 모든 클라이언트의 요청이 전부 개별적임 Stateless -> 서버가 클라이언트 정보를 기억하고 있지 않음. -> 웹에서는 쿠키, 세션을 통해 클라이언트 식별 -> 앱에서는 토큰을 통해 클라이언트 식별 Method GET -> 서버에 정보를 요청할때 사용 -> URL에 데이터를 포함하여 요청하여 보안에 취약 ..
클래스 이름 받기 String(describing: )을 사용. struct Hee { var name = "hee" var age = 13 } class Cheol { var name = "131" var age = 1234 } print(String(describing: Hee.self)) //Hee print(String(describing: Cheol.self)) //Cheol 구조체와 클래스의 이름을 위처럼 받을 수 있는데 Hee, Cheol만 입력한다면 에러남. -> .self까지 붙여야함. 키보드 높이 알아내기 keyboardFrameEndUserInfoKey를 이용. @objc func keyboardWillChange(_ sender: Notification) { guard let key..
정성스러운 피드백을 받고 하나하나 고쳐보려고 노력했다. 1. 폴더 및 파일 이름 수정 Scene끼리는 한 번 더 묶을 수 있을 것 같고, Struct라는 이름대신 Entity나 Model이라는 이름을 사용하면 좋을 것 같다. Entity란 "저장되고 관리되어야하는 데이터의 집합" - Zedd님 블로그 2. Storyboard init 자주 사용하는데 반복사용을 줄일 수 있지 않을까. 계속해서 let sb = UIStoryboard(name: "", bundel: nil)을 반복해서 사용해왔다. 뷰컨트롤러선언까지 한 번에 함수로 만들고싶었지만 타입 캐스팅을 할 때 서로 다른 클래스로 하는거라 매개변수로 받을 수가 없었다. 아래처럼 선언해서 조금 줄일 수 있었음. 아래에 문자열 하드코딩도 enum을 이용해 ..
- Total
- Today
- Yesterday