컴프리헨션과 제너레이터 수식을 살펴보겠습니다. 제너레이터는 좀 어려운 개념이긴 하지만 파이썬에서 정말 중요한 핵심이라고 할 수 있고 파이썬의 강력한 힘은 여기서 나온다고 해도 과언이 아닙니다. 컴프리헨션은 이전의 포스트에서 다루었는데, 사실 리스트 컴프리헨션이라고 하는 것이 더 적합합니다. 리스트를 생성하거나 변환하는 일을 아주 간결한 코드로 강력하게 할 수 있는 기능입니다. 이전 포스트에서도 얘기했지만 리스트 컴프리헨션은 파이썬의 가장 강력하고 편리한 기능 중 하나입니다. comp_list = [x*x for x in mylist if x % 2 == 1] --- (i) 제너레이터 수식은 리스트 컴프리헨션과 똑같이 만들어지는데 대괄호 [ ] 대신 괄호 ( )를 씁니다. gen_expr = (x*x fo..
이번에는 좀더 그럴듯한 제너릭 예제를 만들어 보자. 앞에서 Manageable과 Manager 클래스를 살펴보았다. Manageable 인터페이스는 Manager를 만들 수 있는 공통된 메소드의 정의를 제공한다. 이전 포스트에서 살펴본 Manager는 Manageable을 다루기 위한 메소드(입력, 출력, 검색 등)를 제공하는 클래스다. 그러면 이것을 Manageable을 상속한 어떠한 클래스에 대해서든 관리자로 쓸 수 있다. Manager studentMgr = new Manager(); studentMgr.readAll("student.txt"); studentMgr.printAll(); Student st = (Student)studentMgr.find("lee"); 여기서 제너릭에 관해 처음에 얘..
파이썬 함수의 특징 중 하나로 다양한 빌트인 함수(built-in function 또는 standard function이라고도 함)를 가지고 있다는 것을 들 수 있다. 자바에서는 바로 사용할 수 있는 함수가 없는데, 그래서 System.out.print(...) 같은 복잡한 코드를 써야 하는 번거로움이 있다. 파이썬은 그런 거추장스러운 것을 걷어내고 편리하고 강력한 함수들을 빌트인으로 아주 많이 제공하고 있다. (전체 빌트인 함수의 리스트 여기 를 참조하세요.) 파이썬으로 프로그래밍할 때는 이 빌트인 함수를 잘 사용하는 것이 중요하다. 언어마다 문제를 해결하는 방법이 다른데, 언어가 원래 제공하는 기능들이 저마다 다르기 때문이다. 파이썬은 강력한 빌트인 함수를 이용해 자주 등장하는 문제 유형에 대해 한 ..
함수는 거의 모든 언어에서 지원되는 기본적인 기능이고 기본적인 함수정의와 함수호출의 관계는 동일하다. 여기서는 자바 언어와 다른 파이썬의 함수에 대해 정리해 보려고 한다. 파이썬에서 함수는 이름으로 어떤 동작을 하는 코드 부분을 나타내는 방법이다. 함수를 정의하는 방법은 def 키워드를 이용한다. def get_max(a, b): return a if a >= b else b 삼중 연산자(ternary operator)를 이용해서 큰 값을 돌려주는 함수다. 다음은 주어진 수가 소수인지 아닌지 판별하는 함수다. def is_prime(n): for i in range(2, n): # if n % i == 0: return False return True 이 함수는 n을 나누어 떨어지는 약수가 있으면 거짓을..
2019학년도를 맞이하여 새로운 언어를 배워본다면 어느 것이 좋을까... 고민하는 사람에게 추천할 만한 언어로 Go가 있다. 새로 나오는 모든 언어를 배우는 것은 불가능하지만 Go는 당신의 무기고(skill set)에 추가되었을 때 앞으로 커리어에 커다란 보탬이 될 언어다. Go는 2019년에 프로그래밍 세계를 지배할 언어인 듯 하다. 구글이 인터넷 세계를 지배하듯이... 2009년에 구글에 의해 만들어진 이 언어는 C/C++의 장점을 제공하면서 단순성, 간결성, 안전성을 제공한다. 간단히 말해서 Go는 실제적인 면에서 모든 점에서 우수하다. Go로 작성된 프로그램 코드는 이해하기 쉽고 실행할 때 믿을 수 없을 정도로 효율적이다. 새로운 개발자가 배우기도 쉽다. 정적 타입의 컴파일되는 언어로 동시성도 효..
프로그래밍 언어는 프로그램을 작성하는 도구다. 어떤 문제를 어떤 환경에서 해결해야 하는가에 따라 개발자들이 프로그래밍 언어에 원하는 바가 달라진다. 특히 최근에는 서버와 데스크탑 뿐 아니라 모바일과 임베디드, 엣지 등 급격하게 컴퓨팅 환경이 다양화되면서 각 환경마다 적합한 언어가 있고 또한 여러 시스템 사이에 연결해주는 역할도 매우 중요하다. 환경에 따라 프로그램이 해주어야 하는 역할이 달라지고 그에 따라 선택되는 언어도 달라진다. 거대한 규모의 시스템을 구축하고 성능이 어느 정도 나와야 하는 환경이라면 C나 자바 같은 전통적인 언어가 더 바람직할 것이다. 모바일 환경에서는 그에 적합한 Kotlin이나 Swift 같은 언어를 사용해야 한다. 웹 환경에서는 PHP나 자바스크립트 같은 언어가 다른 선택의 여..
JIT 라는 용어가 요즘 나름 핫하게 떠오르고 있다. 이런 컴파일러에 관련된 기술이 새삼 주목받는 이유는 결국 실행 속도다. 자바스크립트가 빨리 돌아야 우리가 쓰는 인터넷 환경이 더 편리해 지고 웹 상의 온갖 서비스의 성능도 올라가고 IoT 세상에서 엣지가 해줘야 할 일들도 빨라진다. 그럼 JIT는 무엇일가? Just In Time 컴파일러의 준 말인데, Just In Time이란 실행하는 시점까지 미루었다가 컴파일한다는 의미다. 이것이 어떨 때 필요할까를 이해하기 위해 자바와 C의 실행에 대해 이전의 포스트에서 다루었던 내용을 다시 돌이켜 보자.자바 언어는 바이트코드라고 하는 특수한 형태의 어셈블리 코드로 컴파일된다고 했다. 이것은 타겟 머신(CPU와 운영체제)에 상관없이 이식성을 가져야 하는 자바 언..
프로그래밍언어론 수업을 하면 첫주의 주제가 "프로그램은 어떻게 실행될까"라는 것이다. 보통 시스템소프트웨어 또는 시스템프로그래밍 과목에서 다루어지는 내용이다. 기본적이고 약간은 진부한 주제지만 C나 자바 코드를 짜서 컴파일하고 돌리는 개발 과정과 작성된 프로그램이 실행되는 과정을 잘 이해하는 것은 좋은 소프트웨어개발자가 되기 위해 매우 중요하다. 이 글에서는 가능한 한 쉽게 간략히 그 과정을 한번 따라가 보려고 한다. 재미없지만 중요한... 그런 내용이다. 먼저 컴파일 방식의 실행에 대해 살펴보고 인터프리터 방식의 실행에 대해서는 하단에서 따로 설명한다. 먼저 소스 프로그램을 작성하고 컴파일하는 과정이 필요하다. 편집기를 이용해서 언어의 구문에 맞게 작성하면 컴파일러가 그것을 실행할 수 있는 프로그램으로..
제너릭의 예제로 많이 등장하는 것이 스택이다. 스택이란 데이터를 Last In, First Out으로 저장하는 자료구조다. 그것을 위해 push, pop 등의 연산을 제공해야 한다.push : 요소 타입의 매개변수를 받아 스택에 푸시한다.pop : 스택의 제일 마지막 요소를 삭제하고 그것을 돌려준다.peek : 스택의 제일 마지막 요소를 반환한다. (변동 없음)isEmpty : 스택이 비어있는지 여부를 boolean으로 돌려준다. package stack; import java.util.ArrayList; public class Stack { ArrayList list = new ArrayList(); public boolean isEmpty() { return list.isEmpty(); } publi..
자바에서 기본적인 코딩과 클래스, 상속까지를 마치고 나면 그 다음 고개가 제너릭이다. 제너릭은 상속과 인터페이스를 이해하고 나서 그 다음에 다루어져야 하는 주제여서 기초 단계에서는 그것이 왜 필요한지를 이해하기가 어렵다. 여기서는 상속과 인터페이스를 충분히 공부한 것으로 가정하고 제너릭이 왜 필요한가를 설명해 보겠다. 자바 컴파일러(또는 편집기의 툴팁)는 다음 코드에 대해 아래와 같은 경고(warning) 메시지를 보여준다. ArrayList list = new ArrayList(); ArrayList is a raw type. References to generic type ArrayList should be parameterized 이 의미는 ArrayList를 쓰려면 ArrayList 처럼 타입을 ..
- Total
- Today
- Yesterday
- 동적바인딩
- follow
- 자바regex
- sort key
- max
- typedef
- C++ 클래스
- python exercise
- Lazy evaluation
- rust
- 이터레이터
- Camel Style
- zip
- python example
- Iterator
- 패턴
- contentEquals
- 콜렉션
- 스트링
- APPEND
- 지연계산
- comparable
- contains
- TypeError
- ToString
- 스트링 +
- CompareTo
- indexof
- format
- 이터러블
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |