자바 개발자가 파이썬 개발을 배우면서 실무에 활용하고 집필을 하면서 겪었던 경험담 및 생각을 코드와 함께 풀어본다. 자바에 익숙한 사람이 파이썬을 배우고 있거나, 자바와 파이썬의 사이에서 고민을 했던 사람들에게 비교를 위한 기본 정보를 제공한다. 더 나아가 컴파일 언어와 스크립트 언어의 차이점, 개발 생산성을 측정할때 간과하는 컴파일 시간 및 순수 코딩 시간에 대한 통찰을 이끌 생각이다.
니름은 마이크로서비스를 위한 인터페이스 정의 언어(IDL) 컴파일러이자 원격 프로시저 호출(RPC) 프레임워크입니다. 스포카에서 서비스 지향 설계(SOA)를 적극적으로 도입하면서 쓰기에 적합하도록 구현되었습니다.
제품을 개선하기 위해서는 코드를 고쳐야 합니다. 그런데, 고친 코드가 행여 제품을 망가뜨리는 것이 아닐까 망설이고 고민할 때가 많습니다. 단위 테스트가 있다면 제품을 안전하고 빠르게 개선할 수 있습니다. 하지만 서비스 지향 설계로 제품을 만들다 보면 여러 개의 서비스들이 서로 통신하게 됩니다. 그리고 다른 서비스에 통신하는 기능도 단위 테스트를 작성해야 합니다.
서비스 간 단위 테스트는 까다로운 처리가 많이 필요합니다: 단위 테스트 안에서 요청을 흉내 내기, 실제 서비스를 띄워서 단위 테스트에서 테스트용 서비스에 요청하거나, 또는 요청과 응답을 흉내 내기, 요청한 내용을 역직렬화하고 응답할 내용을 직렬화 하기 등… 니름을 사용하여 서비스를 작성하면 서비스의 인터페이스와 구현을 분리할 수 있습니다.
요청이나 직렬화 등의 작업도 니름이 대신 처리하므로 추상화됩니다. 따라서 단위 테스트를 쉽게 작성할 수 있습니다. 서비스 지향 설계에서 니름을 사용하여 단위 테스트를 작성하면서 느낀 장점과 이것이 기존 방법들과 어떤 차이가 있는지 공유하고 싶습니다.
자바 개발자가 파이썬 개발을 배우면서 실무에 활용하고 집필을 하면서 겪었던 경험담 및 생각을 코드와 함께 풀어본다. 자바에 익숙한 사람이 파이썬을 배우고 있거나, 자바와 파이썬의 사이에서 고민을 했던 사람들에게 비교를 위한 기본 정보를 제공한다. 더 나아가 컴파일 언어와 스크립트 언어의 차이점, 개발 생산성을 측정할때 간과하는 컴파일 시간 및 순수 코딩 시간에 대한 통찰을 이끌 생각이다.
니름은 마이크로서비스를 위한 인터페이스 정의 언어(IDL) 컴파일러이자 원격 프로시저 호출(RPC) 프레임워크입니다. 스포카에서 서비스 지향 설계(SOA)를 적극적으로 도입하면서 쓰기에 적합하도록 구현되었습니다.
제품을 개선하기 위해서는 코드를 고쳐야 합니다. 그런데, 고친 코드가 행여 제품을 망가뜨리는 것이 아닐까 망설이고 고민할 때가 많습니다. 단위 테스트가 있다면 제품을 안전하고 빠르게 개선할 수 있습니다. 하지만 서비스 지향 설계로 제품을 만들다 보면 여러 개의 서비스들이 서로 통신하게 됩니다. 그리고 다른 서비스에 통신하는 기능도 단위 테스트를 작성해야 합니다.
서비스 간 단위 테스트는 까다로운 처리가 많이 필요합니다: 단위 테스트 안에서 요청을 흉내 내기, 실제 서비스를 띄워서 단위 테스트에서 테스트용 서비스에 요청하거나, 또는 요청과 응답을 흉내 내기, 요청한 내용을 역직렬화하고 응답할 내용을 직렬화 하기 등… 니름을 사용하여 서비스를 작성하면 서비스의 인터페이스와 구현을 분리할 수 있습니다.
요청이나 직렬화 등의 작업도 니름이 대신 처리하므로 추상화됩니다. 따라서 단위 테스트를 쉽게 작성할 수 있습니다. 서비스 지향 설계에서 니름을 사용하여 단위 테스트를 작성하면서 느낀 장점과 이것이 기존 방법들과 어떤 차이가 있는지 공유하고 싶습니다.
Intro to JavaScript - Week 1: Value, Type, OperatorJeongbae Oh
Intro to Programming with JavaScript Seminar, Fall 2017 semester
Week 1: Value, Type, Operator
Led by Jeongbae Oh, in conjunction with YCC (Yonsei Computer Club) @ Yonsei University
This seminar intends to introduce newcomers to programming using JavaScript, one of the most versatile languages of the modern world.
43. 패치
class Date 3.days.since Date.yesterday
def yesterday
self - 1 (1.year + 6.months).ago
end
end 'person'.pluralize
= 'people'
class Integer
def months 'ILoveYou'.underscore.humanize
Duration.new self * 30.days = 'I love you'
end
end
45. 프로그래밍
class User class User
def initialize(email) attr_accessor :email
@email = email
end def initialize(email)
@email = email
def email end
@email end
end
def email=(email)
@email = email
end
end
68. RESTful
Method URL Action
GET /posts index
POST /posts create
GET /posts/new new
GET /posts/:id/edit edit
GET /posts/:id show
PUT /posts/:id update
DELETE /posts/:id destroy
134. C
int numbers[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int result[10];
int i = 0;
int j = 0;
for (i = 0; i 10; i++) {
int n = numbers[i];
if (n % 2 == 0) {
result[j++] = n;
}
}
135. JavaScript
var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var result = [];
var i = 0;
var j = 0;
for (i = 0; i 10; i++) {
var n = numbers[i];
if (n % 2 == 0) {
result[j++] = n;
}
}
136. Python
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = []
for number in numbers:
if n % 2 == 0:
result.append(n)
137. Ruby
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = []
for number in numbers
if n % 2 == 0
result.push(n)
end
end
138. JavaScript
var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
// ECMAScript 5, IE9+
var result = numbers.filter(function(n) {
return n % 2 == 0;
});
// jQuery
var result = $.grep(numbers, function(n) {
return n % 2 == 0;
});
139. Python
[n for n in range(1, 11) if n % 2 == 0]