전체 글
Swift 접근 한정자
모듈 모듈이란 코드를 배포하는 단일 단위로, 프레임워크나 앱이 이 단위로 배포된다. xcode 에서 각 빌드 타겟은 별도 모듈로 취급 된다. open 소속 모듈, 모듈 외부에서도 접근 가능하다. 다른 모듈에서 오버라이딩 및 상속이 가능하다. public open 과 같이 접근 가능하지만, 소속 모듈이 아닌 곳에서 오버라이딩이 및 상속이 불가능 하다. internal 접근 한정자가 지정되지 않는 경우 디폴트로 지정되는 한정자 이다. 소속 모듈에서는 모두 사용할 수 있지만, 모듈 외부에서는 접근할 수 없다. fileprivate 소속 소스 파일 내에서만 접근 가능하다. private 현재 소스를 둘러싸는 선언에서만 접근 가능하다.
스위프트 Attributes
@Escaping (Escaping Closure) 함수의 파라미터로 받는 클로저가 함수 외부에서 실행 되는 경우 달아준다. func asdf(closure: @escaping () -> Void) { asyncMethod(callBack: closure()) } asdf메소드 실행시 내부 async의 콜백으로 클로저가 주어지고, asdf는 즉시 종료되기 때문에 escaping closure가 아닌경우 asdf 메소드 종료와 함께 소멸되므로, escaping 처리가 필요하다. @dynamicCallable class, struct, enum, protocol 에 붙힐 수 있으며, 내부 구현 함수를 즉시 실행 하도록 사용 가능하다. 해당 타입은 dynamicallyCall(withArguments:) 또는..
스위프트 Generic
함수 선언시 제네릭 func swap(left: inout T, right: inout T) { let tempLeft = left left = right right = tempLeft } var left = 1 var right = 2 swap(&left, &right) 구조체 및 클래스 선언시 제네릭 struct Stack { let items: [T] = [] } let stack: Stack = Stack() 제네릭 타입 제약 func isSame(a: T, b: T) -> Bool { return a == b } Equatable 프로토콜을 준수하는 인스턴스만 T파라미터로 받을 수 있다. T: class명 으로 주면 해당 클래스 혹은 클래스를 상속한 클래스만 올 수 있다. 제네릭 확장 exten..
스위프트 Property Wrapper
@State 뷰 내부에서 상태를 나타내도록 사용하기 때문에 보통 private 으로 선언 한다. State가 변하면 뷰는 항상 최신 상태를 유지한다(State와 엮여있는 뷰가 다시 랜더링 된다) struct SampleView: View { @State private var text: String = "" VStack { TextField("텍스트 입력: ", text: $text) Text(text) } ... } TextField로 사용자에게 텍스트를 입력받고, 해당 텍스트를 text변수에 할당한다. Text는 State인 text를 사용하므로 text변수의 값이 변경 될 때마다 랜더링 된다. @Binding 하위 뷰에서 상위 뷰의 @State 에 접근 하기 위해 사용 한다. 상위 뷰의 @State ..
스위프트 키워드
class Person { var name: String var age: Int init(name: String ,age: Int) { self.name = name self.age = age } convenience init(name: String) { self.init(name: name, age: 30) } } is, as (타입캐스팅) is 서브 클래스인지 확인 하는 연산자로, bool 을 리턴한다. let test: Character = "A" test is Character // true test is String // false as 업캐//스팅 혹은 다운캐스팅 시에 사용한다. //업캐스팅 let human = Teacher.init() as Human // 상위 클래스인 Human 타입으로..
스위프트 Optional
Swift Optional 스위프트는 기본 변수에 null(nil)을 허용하지 않는다. 따라서 nil 변수 선언시 강제로 Optional 으로 래핑한다. 옵셔널 선언시 ? 를 사용한다. let age: Int? 옵셔널 된 값을 강제 언래핑 시킬때 ! 를 사용한다. age! if문에서 optional 을 즉시 사용할 수 있다. var age: Int? age = 10 if let myValue = age { //age optional 변수에 값이 할당 되어 있을 때 해당 if문이 실행되고, //언래핑 된 값을 myValue 로 사용할 수 있다. } else { //optional 에 값이 할당 되지 않았다면 else 문이 수행된다. print("optional value is nil!") } 여러개의 옵셔..
스위프트 프로퍼티
Getter Setter class Person { //set 은 private 으로 선언되어 외부에서는 get 만 가능하다. public private(set) var name: String init(name: String) { self.name = name } } var jake = Person(name: "jake") print(jake.name) // jake jake.name = "wiki" // private set 이므로 에러 발생 Computed Property class Test { private var _myProperty: Int var myProperty: Int { get { return _myProperty } set { return _myProperty = newValue } ..
DB 트랜잭션 및 락
트랜잭션 격리 수준 Read Uncommitted 트랜잭션에서 처리 중인 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용한다. Dirty Read, Non-Repeatable Read, Phantom Read가 일어날 수 있다. Read Committed 트랜잭션이 커밋되어 확정된 데이터만 다른 트랜잭션이 읽도록 허용한다. 따라서 Dirty Read의 발생가능성을 막는다. 하지만 Non-Repeatable Read와 Phanton Read에 대해서는 발생 가능성이 있다. Repeatable Read 트랜잭션내에서 삭제, 변경에 대해서 Undo 로그에 넣어두고 앞서 발생한 트랜잭션에 대해서는 실제 데이터가 아닌 Undo 로그에 있는 백업데이터를 읽게 한다. 이렇게하면 삭제와 수정에 대해서 트랜..
Spring Retry
retry 사용 @EnableRetry @EnableRetry // retry 를 사용하려면 해당 어노테이션이 필요하다. @Configuration public class ConfigClass { } @Retryable @Retryable( value = {RuntimeException.class}, maxAttempts = 2, backoff = @Backoff(delay = 2000) ) public void method(Param param){ ... } RuntimeException 발생시 재시도 한다. 최대 2번 재시도 한다. (default = 3) 2초의 텀을 두고 재실행 한다. (default = 1초) @Recover @Recover public void recoverMethod(Runt..
Spring Batch FaultTolerance (장애 허용)
FaultTolerance 스프링 배치를 사용시 어떠한 Exception 이 발생시 중단 후 실패처리를 하지 않고, 그대로 배치 잡을 계속해서 실행하고 싶을 때 사용한다. stepBuilderFactory.get("step") .chunk(3) .faultTolerant() .skip(Exception.class) .skipLimit(Integer.MAX_VALUE) - Exception.class 및 그 하위 Exception이 발생했을때, 중단처리 하지 않고 계속 진행한다. - skipLimit 횟수 만큼 Exception 발생을 용인 한다. ProcessorNonTransactional 위와 같이 청크단위 처리방식의 배치를 사용하는 경우 청크단위로 트랜잭션이 처리가 되어진다.(insert or up..