Study

    [Swift] Property

    [Swift] Property

    저장 프로퍼티(Stored Property) 인스턴스의 변수 또는 상수를 의미 구조체와 클래스에서만 사용 가능 var, let 키워드 사용 지연 저장 프로퍼티(Lazy Stored Property) 호출이 있어야 값을 초기화하는 프로퍼티 lazy 키워드 사용 let 선언 불가: Constant property인 let은 인스턴스가 완전히 생성되기 전에 초기화해야 하므로 사용할 수 없음 property의 초깃값이 인스턴스의 초기화가 완료될 때까지 알 수 없는 외부 요인에 의존할 때 사용 property의 초깃값에 복잡하거나 계산 비용이 많이 드는 설정이 필요할 때 or 모든 저장 프로퍼티를 사용할 필요가 없을 때 사용 불필요한 성능 저하나 공간 낭비를 줄일 수 있음 주의※: 다중 스레드 환경에서 지연 저장..

    [iOS] UITextView에 링크 거는 법

    [iOS] UITextView에 링크 거는 법

    진행 중이던 프로젝트에서 TextView에 링크를 거는 작업을 해 보았다. 먼저 링크를 걸고 싶은 TextView에 다음과 같은 몇 가지 설정을 해주어야 한다._ = contentTextView.then { $0.isUserInteractionEnabled = true $0.isSelectable = true //Default $0.isEditable = false $0.dataDetectorTypes = .link $0.delegate = self }어떤 설정인지 차근차근 살펴보자. isUserInteractionEnabled먼저 isUserInteractionEnabled는 유저의 이벤트가 event queue로부터 무시되고 삭제됐는지 판단하는 Boolean 값이다.false로 설정하면 touch나 ..

    [iOS] UITextView와 UITextField의 차이 정리

    [iOS] UITextView와 UITextField의 차이 정리

    UITextView와 UITextField가 자꾸 헷갈려서 기억해 두기 위해 정리하는 글이다. UITextView 애플 공식 문서를 보면, UITextView는 A scrollable, multiline text region. (스크롤이 가능한 여러 줄 텍스트 영역)이라고 나와 있다. 실제로 UITextView는 UIScrollView 클래스를 상속받고 있다. 간단하게 말해서, 텍스트 문서의 본문을 쓸 때와 같이 여러 줄의 텍스트를 입력할 때 사용하는 게 UITextView이다. UITextField 반면에 UITextField는 여러 줄의 텍스트를 입력하는 것은 불가능하다. 텍스트를 한 줄만 입력할 때 사용하는 게 UITextField

    [iOS] 뷰 생명주기(View life cycle)에 대해서 알아보자

    [iOS] 뷰 생명주기(View life cycle)에 대해서 알아보자

    뷰 생명주기(View's life cycle)란? - 뷰가 나타나고 사라지는 주기를 말한다. 앱은 하나 이상의 뷰로 구성이 되어 있고, 각각의 뷰들은 라이프 사이클을 가지고 있다. 따라서 뷰의 라이프 사이클을 고려해서 로직을 넣고, 구성해야 한다. 각각 Did와 Will의 차이가 있는데 하나씩 살펴보자. ViewDidLoad : 뷰 컨트롤러 클래스가 생성될 때, 가장 먼저 실행이 된다. 특별한 경우가 아니라면 딱 한 번 실행되기 때문에 초기화할 때 사용할 수 있다. ViewWillAppear : 뷰가 생성되기 직전에 항상 실행이 되기 때문에 뷰가 나타나기 전에 실행해야 하는 작업들을 여기서 할 수 있다. ViewDidAppear : 뷰가 생성되고 난 뒤에 실행된다. 데이터를 받아서 화면에 뿌려주거나, 애..

    [iOS] 앱 생명주기(App life cycle)에 대해서 알아보자

    [iOS] 앱 생명주기(App life cycle)에 대해서 알아보자

    앱 생명주기(App's life cycle) - 앱 생명주기(App's Life Cycle)란? 앱의 실행부터 종료까지의 주기를 말하며, 앱이 foreground나 background에 있을 때 시스템 알림에 응답하고 기타 중요한 시스템 관련 이벤트를 처리하는 단계들을 말한다. 앱의 상태 변화 - iOS에서 앱은 3가지의 실행 모드와 5가지의 상태가 있고 항상 하나의 상태를 지니고 있다. Not Running 실행되지 않았거나, 앱 실행이 종료된 상태 Foreground Inactive: 실행 중이지만, 이벤트를 받고 있지 않는 상태. 예를 들어, 앱 실행 중에 알람이 화면을 덮어서 앱이 실질적으로 이벤트를 받고 있지 못하는 상태를 말한다. Active: 앱이 실질적으로 작동하고 있는 상태 Backgro..

    [Spring] MyBatis와 스프링 연동하기

    [Spring] MyBatis와 스프링 연동하기

    MyBatis는 기존의 sql을 그대로 활용할 수 있다는 장점이 있고, 진입장벽이 낮은 편이어서 JDBC의 대안으로 많이 사용한다. 스프링에서는 mybatis-spring이라는 라이브러리를 통해 쉽게 연동 작업을 처리할 수 있다. Mybatis와 mybatis-spring을 사용하려면 추가적인 라이브러리가 필요하다. pom.xml을 수정해주자 spring-tx/spring-jdbc : 스프링에서 데이터베이스와 트랜잭션 처리를 위해 필요한 라이브러리 (없으면 에러가 나니 꼭 설치해주자) mybatis/mybatis-spring : mybatis와 스프링 연동용 라이브러리 MyBatis에서 가장 중요한 핵심은 SQLSessionFactory와 SQLSession 객체이다. SQLSessionFactory는 ..

    [Spring] 스프링과 mysql 연동하기

    [Spring] 스프링과 mysql 연동하기

    mysql이 설치된 환경으로 가정하고 글을 시작한다. 나는 실행할 예제로 book_ex라는 스키마를 하나 생성했다. 일반적으로 여러 명의 사용자를 동시에 처리하는 웹 애플리케이션의 경우 데이터베이스 연결을 이용할 때는 '커넥션 풀(Connection Pool)'을 이용한다. Java에서는 DataSource라는 인터페이스를 통해 커넥션 풀을 사용한다. 여기서 커넥션 풀은 HikariCP(https://github.com/brettwooldridge/HikariCP)를 쓸 것이다. 우선 mysql과 연동하는 라이브러리를 사용해야 하기 때문에 pom.xml에 이렇게 추가해준다. 그리고 위에서 말했듯 HikariCP를 사용할 것이므로 HikariCP도 추가한다. root-context.xml은 직접 태그를 이..

    [Spring] 스프링 어노테이션 기능 정리

    (이것은 개인적으로 공부하기 위해 적어두는 어노테이션 기능들이다) 여기서 어노테이션들은 크게 세 가지로 분류해서 설명한다. - Lombok 관련 어노테이션 - Spring 관련 어노테이션 - 테스트 관련 어노테이션 우선 Lombok 관련 어노테이션에는 @Setter, @Data가 있다. Lombok에 대한 설명과 설치법은 https://withthemilkyway.tistory.com/15 이 곳에서 확인할 수 있다. @Setter 어노테이션은 setter 메서드를 만들어주는 역할을 한다. 말 그대로 setter 메소드를 생성해 주는 것이다. @Setter에는 onMethod라는 속성을 부여해줄 수 있는데, onMethod는 setter 메서드의 생성 시 메서드에 추가할 어노테이션을 지정한다. @Data..