전체 36

Swift (5) - Class

1. 클래스 정의 Swift의 기본적인 클래스 정의는 다음과 같습니다. /* 클래스 정의 */ class 클래스이름 { /* 프로퍼티 정의 */ var property: PropertyType /* 생성자 정의 : 생성자가 있을 경우에는 반드시 생성자를 통해서 인스턴스가 생성됩니다. */ init(p: PropertyType) { self.property = p } /* 메서드 정의 */ func method(param: ParamType) -> MethodType { return "반환값" } } /* 인스턴스 생성 및 사용 */ var instance: 클래스이름 = 클래스이름(p : "초기프로퍼티 값") instance.property = "가변프로퍼티 변경값" instance.method(para..

Swift/Swift-Basica 2022.08.19

Swift (4) - 함수

1. 기본적인 함수 정의 및 호출 func 함수명(파라미터: 파라미터타입) -> 반환타입 { ... some code ... return 반환값 } /* 정의 예시 */ func addOne(num: Int) -> Int { return num + 1 } /* 호출 예시 */ var result: Int = addOne(10) 2. 외부명 및 내부명 Swift는 신기하게도 함수내부에서 사용하는 파라미터이름과 호출부에서 사용하는 파라미터이름을 구분할 수 있습니다. func 함수명(외부명 내부명: 타입) -> 반환타입 {} 그리고 아래와 같이 사용할 수 있습니다. /* 함수 정의 */ func greet(name n: String) -> String { return "Hello, \(n)!" } /* 함수 ..

Swift/Swift-Basica 2022.08.19

Swift (3) - 제어구문

1. if 조건문 if 조건문1 { // ... some code ... } else if 조건문2 { // ... another code ... } else if 조건문n { // ... other code ... } else { // ... other else ... } 2. switch 조건문 switch 체크값 { case 값1 : ... some code ... case 값2, 값3 : ... other codes ... default : ... other else ... } 특정 case에서 일치하면, 다음 case로 넘어가지 않고 switch 구문이 끝납니다. 3. for 반복문 ★ Swift의 range ★ a ... b : a이상 b이하 a ..< b : a이상 b미만 1) 기본 for문..

Swift/Swift-Basica 2022.08.19

Swift (2) - 값, 변수, 연산

1. 리터럴1) 숫자보통은 그냥 적으면 됩니다.1000.25자리수가 많아질 경우 4자리마다 _(언더스코어)를 표기할 수 있습니다.01_2345_67892 8 16진수는 각각 다음과 같이 작성합니다.// 2진수0b11011// 8진수0o7623// 16진수0x5f4b2) 문자열정수는 큰따옴표(")로 감쌉니다."Hello, World"문자열 안에 변수가 포함될 경우 \(변수)로 나타낼 수 있습니다."Hello, \(name)"3) 불리언소문자 true와 false로 나타냅니다.truefalse  2. 변수변수는 변환가능(mutable) 변수와 변환불가능(immutable) 변수로 선언할 수 있습니다.// mutable (변환가능 변수이기 대문에 나중에 초기화 가능)var variable: Int// immu..

Swift/Swift-Basica 2022.08.19

Swift (1) - Swift 사용 준비

1. Swift란? 2014년 6월에 개최된 애플 개발자 컨퍼런스에서 갑자기 발표된 완전히 새로운 프로그래밍 언어 기존 Apple사 애플리케이션 개발에는 Objective-C 라는 언어가 사용돼었습니다. 왜냐하면 아이폰이 있기 전 초창기 맥 OSX는 처음부터 Objective-C에 의한 프로그램 작성 및 실행을 위한 플랫폼으로서 만들어졌기 때문입니다. Objective-C는 C언어에 무언가를 결합시킨 객체지향언어인데, 다른방향의 객체지향 언어인 C++, Java, C# 등이 개발되고 주류를 이루며, Objective-C는 '보통 언어와는 다르고 배우기 어려운 언어'로 인식이 되어갔습니다. Swift는 이런 '어려운 Apple사 애플리케이션 개발 언어'를 대체하기 위해 등장한 언어입니다. 2. Swift ..

Swift/Swift-Basica 2022.08.19

Tomcat : 사용자 요청을 멀티스레드로 처리하는 방법(2)

이번 장은 init / load 과정을 설명한 Tomcat : 사용자 요청을 멀티스레드로 처리하는 방법(1) 에 이어서 start 메서드의 동작 방식에 대해 알아보겠습니다. /** Bootstrap.class */ public void start() throws Exception { if (this.catalinaDaemon == null) { this.init(); } Method method = this.catalinaDaemon.getClass().getMethod("start", (Class[])null); method.invoke(this.catalinaDaemon, (Object[])null); } load메서드와 마찬가지로 bootstrap의 start 메서드는 catalina의 start ..

Tomcat 2022.02.28

Tomcat : 사용자 요청을 멀티스레드로 처리하는 방법(1)

이전 장에서는 톰캣이 Jasper & Catalina & Coyote 세가지 컴퍼넌트로 이루어져있는 자바 애플리케이션이고, 톰캣을 실행시킨다는 것은 Bootstrap 자바 클래스파일을 실행시키는 것과 같으며 Bootstrap의 main 메서드는 실행 시 init, load, start 메서드를 차례로 실행한다는 것 까지 간단하게 알아봤습니다. 이번 장에서는 init -> load -> start 세가지 메서드를 더 자세히 파헤치며, 톰캣이 사용자 요청을 어떻게 멀티스레드로 처리하는지 확인해보겠습니다. Init 먼저 init에서는 catalina.class 파일(실질적인 로직들이 구현된 파일)을 가져와 인스턴스화 하는 동작만 합니다. 코드를 통해 보여드리면 package org.apache.catalina..

Tomcat 2022.02.27

Tomcat : Overview

톰캣은 자바진영의 대표적인 WAS입니다. 여기서 WAS란, 쉽게 설명하면 요청을 받는 서버역할도 하면서 동적인 결과를 만들어내는 애플리케이션의 역할도 하는 서버입니다. 톰캣은 서블릿 컨테이너라고도 불리우는데, 이 컨테이너는 개발자가 작성한 서블릿이라는 자바 로직을 실행하여 동작합니다. 톰캣에 대한 내용을 다루게 된 이유는 이 톰캣과 서블릿을 왜, 어떤 장점이 있길래 많이들 사용하는지 이론이 아니라 구체적인 로직을 통해 알아보고싶었습니다. 아래 블로그가 도움이 많이 되었으니 참고해주세요. https://medium.com/chequer/tomcat-spring-bootstrapping-sequence-1편-tomcat-4402102c0585 https://medium.com/chequer/tomcat-sp..

Tomcat 2022.02.27

07 Blocking to Reactive

이 글은 tech.io/playgrounds/929/reactive-programming-with-reactor-3/BlockingToReactive 에 대한 문제풀이이다. Reactive 코드 속에서 레거시하고, Reactive하지 않은 코드는 어떻게 처리해야할까? 예를들어, JDBC connection과 같은 Blocking 코드가 있고 이를 Reactive pipeline에 통합해한다면 어떻게해야할까? 가장 좋은 방법은, blocking이 진행되는 부분을 Schedulers를 통해 별도의 스레드에서 실행되도록 고립시키는 것이다. JDBC의 예에서는 fromIterable 팰터리 메서드를 사용할 수 있다. subscribeOn 이 메서드는 제공된 스케줄러에서 시작부터 시퀀스를 분리해서 실행할수 있도록..

06 Reactive To Blocking

이 글은 tech.io/playgrounds/929/reactive-programming-with-reactor-3/ReactiveToBlocking 에 대한 문제풀이이다. Reactive에 기존 코드의 일부를 사용하고 싶을 때에는 어떻게 해야할까? 해당 코드가 Blocking코드라면, 해당 로직을 고효율 Reactive 코드의 흐름 속에 어떻게 추가할 수 있을까? 이런 코드는 절대 Reactive 코드 실행 중간에 실행되도록 하면 안된다. Reactive pipeline의 중간에 block이 되어버릴 수 있기 때문이다. 예를 들어, 중간에 Block이 되는 코드로서 다음과 같은 예시를 들 수 있다. User monoToValue(Mono mono) { return mono.block(); } Itera..