Swift 프로퍼티 래퍼
Swift 2022. 2. 10. 15:56

프로퍼티 래퍼는 스위프트 5.1부터 나온 개념으로, 클래스와 구조체 구현부에 게터(getter), 세터(setter), 연산 프로퍼티(computed property) 코드의 중복을 줄이는 방법을 제공한다. 프로퍼티 래퍼란? 클래스나 구조체 인스턴스에 값을 할당하거나 접근할 때 값을 저장하거나 읽어내기 전에 변환 작업이나 유효성 검사를 해야 할 경우가 존재한다. 물론 연산 프로퍼티로도 위와 같은 작업은 할 수 있다. 그러나 여러 클래스나 구조체에 생성한 연산 프로퍼티들이 유사한 패턴을 갖는 경우가 빈번하게 발생한다. 클래스나 구조체의 구현부마다 비슷한 역할을 하는 연산 프로퍼티를 복사 붙여넣기 할 수도 있다. 이것은 생산성이 매우 떨어질 뿐만 아니라, 계산 방법이 수정되는 일이 생기면 각각의 클래스나 구..

구조체와 클래스
Swift 2022. 2. 10. 14:37

Swift는 구조체를 사용한다. 기본적으로 구조체도 클래스처럼 객체 지향 프로그래밍의 기초를 따르며 데이터와 기능을 재사용할 수 있는 객체로 캡슐화하는 방법을 제공한다. 구조체의 선언 방법 구조체도 클래스와 선언 방법이 비슷하다. 단지 class 대신 struct 키워드를 사용하는게 다르다. struct Address { private var cityName : String = "" var city : String { get { cityName } set { cityName = newValue.uppercased() } } } 클래스와 마찬가지로 구조체도 확장될 수 있으며, 프로토콜을 채택하거나 초기화를 가질 수 있다. 그렇다면 구조체는 클래스와 무엇이 다를까? 값 타입 vs 참조 타입 클래스와 구조체는..

2020 카카오 인턴십 - 보석쇼핑 java
프로그래머스 2022. 2. 10. 13:23

코딩테스트 연습 - 보석 쇼핑 ["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] [3, 7] programmers.co.kr 1. 보석의 가짓수를 찾기 모든 종류의 보석을 포함하는 구간을 찾아야 한다. 따라서 일단 보석 배열을 순차탐색해서, 보석이 총 몇 가지 종류로 이루어져 있는지를 찾아야 한다. 간단히 HashMap 을 이용해서 보석의 총 가지수를 구했다. int jeweleryCount = 0; public void getJeweleryCount(String[] gems) { HashMap hashMap = new HashMap(); for (String gem : gems) { if (!hashMap.containsKey(ge..

Swift 함수 - 2
Swift 2022. 2. 9. 19:41

가변개수 매개변수 매개변수의 개수를 여러개 받을 수 있다. 가령 여러 개의 정수를 받아 그 합을 반환해주는 함수를 선언한다고 생각해보자. 정수는 0개부터 엄청 큰 수까지 받을 수 있다 func addInt(_ ints:Int...) -> Int { var ret = 0 for int in ints { ret += int } return ret } print(addInt(1,2,3,4,5,6,7,8,9,10)) 매개변수를 여러 개 받을 수 있도록 하려면, 매개변수의 타입 뒤에 0개 또는 그 이상을 받는따는 것을 의미하는 ... 를 사용하여 가변개수 매개변수를 선언할 수 있다 매개변수는 기본적으로 상수로 취급된다 Swift 는 기본적으로 함수형 패러다임을 따르는 언어다. 함수형 패러다임에서 함수는 부수 효과..

Swift 5 - 함수 1
Swift 2022. 2. 9. 18:11

스위프트에서 함수를 선언하는 방법 func 함수명 (매개변수 이름: 매개변수 타입, ...) -> 반환 결과 타입 { ... //함수 코드 } 스위프트에서 함수를 선언하는 방법은 여타 언어들과 다르지 않다. func - 함수라고 컴파일러에게 알려주는 키워드 함수명 - 함수의 이름 매개변수 이름 - 매개변수의 이름 매개변수 타입 - 매개변수의 타입 반환 결과 타입 - 해당 함수가 반환할 타입을 의미. 만약 아무 타입도 반환하지 않는다면 선언하지 않는다 함수 코드 - 작업을 수행할 코드 func sayHello() { print("hello") } 위의 함수는 아무 매개변수도 받지 않고, 아무 값도 반환하지 않고 그저 블럭 내의 코드를 실행하는 함수다 func buildHelloMessage(name : S..

2021 카카오 채용연계형 인턴십 - 표 편집 java
프로그래머스 2022. 2. 9. 13:45

코딩테스트 연습 - 표 편집 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z"] "OOOOXOOO" 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z","U 1","C"] "OOXOXOOO" programmers.co.kr 주요 연산 주요 연산은 총 4가지로 다음과 같다 커서 위로 이동 커서 아래로 이동 현재 커서 삭제 삭제된 커서 복구 처음 테이블이 다음과 같을 때, 모든 연산을 수행한 뒤 마지막에 존재하는 컬럼은 O, 존재하지 않는 컬럼은 X 로 표시해야 한다. 연결 리스트로 구현하기 행이 삭제되면, 이전 행과 다음 행이 연결되어야 한다. 이것을 만약 ArrayList 나 배열로 구현한다면, 삭제 후 데이터를 한 칸씩 앞으로 이..

Hash 자료구조 - java
알고리즘 2022. 2. 6. 10:49

Hash 자료구조란? key와 Value 가 쌍을 이루는 자료구조 key 탐색의 시간복잡도가 O(1) 이다. key 삭제의 시간복잡도가 O(1) 이다. key와 Value 삽입의 시간복잡도가 O(1) 이다. Hash 자료구조의 경우 검색과 삽입, 삭제 연산을 엄청 빠르게 하는 자료구조라고 할 수 있다. 위에서 기술했듯이 상수시간에 데이터를 검색하는데, 이것은 Hash 자료구조의 특성 덕분이다. Hash 자료구조에 Key 와 Value 를 삽입하려면, 우선 key에 해당하는 데이터를 Hash Function (해시 함수) 를 통해 Hash Code 로 변환한 뒤에, 자료구조 크기로 % 연산을 통해 해당 데이터를 저장할 index 를 구한다. 그리고 Value 를 해당 index 에 저장한다. Hash Co..

Retrofit Interceptor 로 response 타입을 원하는 대로 바꿔보자
안드로이드 2022. 2. 4. 20:37

공공 데이터 API 를 연동해서 어플리케이션을 개발하고 있었다. 공공 데이터 API 의 json 반환값은 다음과 같다. { response:{ header:{ resultCode: String, resultMsg: String, type: String, } body:{ items:[ { mrhstNm: String, mrhstCode: Integer, ctprvnNm: String, ... }] } totalCount:Integer, numOfRows:Integer, pageNo:Integer } } 여기서 나는 유의미한 데이터인 items 만 결과값으로 반환받고 싶었다. 만약 GsonConverterFactory 로 위 response 에서 바로 items 를 추출할려면, response 데이터 클래스..