이번 포스트에서는 앞의 글에 이어서 인터페이스의 구체적인 예제를 살펴보겠다. 그리고 그 인터페이스를 이용하여 실제 클래스를 만드는 것도 살펴본다. 여기서는 실제 동작하는 프로그램을 만들기 위해 데이터를 읽고 출력하고 검색하는 기능을 만들어보겠다. 그것을 위해서 먼저 실제 인터페이스를 하나 정의한다. 이 인터페이스는 읽고 출력하고 비교하는 기능을 가지고 이것을 관리하는 클래스를 만들 것이므로 이름을 Manageable이라고 붙이려고 한다. interface Manageable { void read(Scanner scan); void print(); boolean compare(String kwd); } 그럼 이 인터페이스를 구현한 클래스를 예로 들어 보자. class Book implements Manag..
자바의 인터페이스가 무엇인지 이해하기가 쉽진 않다. 학생들 중에는 자바의 인터페이스를 메소드 선언부만 가지는 클래스? 또는 다중상속이 가능하게 해주는 것, 정적 필드만 가지는 클래스 등 단편적인 사실로 알고 있는 경우가 많다. 사실 자바에서 인터페이스란 다중 상속보다 훨씬 더 광범위하고 중요한 개념이다. 클래스가 실제 세계의 객체를 나타낸다면 인터페이스는 성질, 기능 또는 역할을 모델링한다. 데이터는 고려하지 않고 기능(하는 일)만 모델링하는 것인데, 예를 들면 어떤 물건이 판매되기 위해 필요한 기능은 가격을 물어보고 판매하고 상태를 물어보는 등의 기능이 필요하다. 가격이나 상태 등의 데이터를 가져야 할 것 같지만, 데이터를 생각하지 않고 기능만 생각하는 것이 인터페이스다. 실세계에서 회사의 업무처리를 ..
파이썬에서 리스트만 잘 다루어도 C나 자바로 프로그래밍하던 것에 비해 훨씬 성과가 좋아짐을 느낀다. 물론 리스트에 관련된 앞의 포스트에서 살펴본 함수나 메소드를 이용해야 진짜 파이썬의 장점을 알 수 있다. 그런데 거기서 한 걸음 크게 올라갈 수 있는 것이 컴프리헨션이다. 파이썬 언어의 창시자인 반 귀도 로썸은 파이썬의 가장 큰 장점으로 컴프리헨션을 들었다고 한다. 컴프리헨션은 특정 성질을 만족하는 값을 반복적으로 생성하여 리스트를 만드는 단축코드라고 볼 수 있다. 우리는 리스트를 만들기 위해 다음과 같은 코드를 자주 만들게 된다. mylist = [] for x in range(1, 10): mylist.append(x*x) 이 코드는 1~9까지 수의 제곱을 가지는 리스트를 만든다. 먼저 빈 리스트 이름..
파이썬은 타입의 분류로 sequence(순차형)을 정의한다. 앞에서 살펴본 range()와 스트링, 그리고 여기서 볼 리스트가 대표적인 시퀀스 타입이다. 요소 타입의 데이터가 순차적으로 다루어질 수 있는 타입을 시퀀스라고 한다. 리스트(list)의 리터럴 표현은 대괄호로 둘러싸인 값의 연속이다. 특징이라면 리스트의 요소들은 서로 다른 타입이 될 수 있다. >>> [1, 2, 3] [1, 2, 3] >>> x = [a, 1, '123'] >>> y = [x, [1, 2, 3]] # 리스트를 원소로 가지는 리스트 리스트는 스트링과 같은 시퀀스 타입이어서 차례로 방문하거나 요소에 대해 적용되는 많은 기능을 동일하게 사용한다. 특히 인덱싱하는 방법과 슬라이스, for in을 쓰는 방법은 스트링과 동일하다. >>..
프로그래밍언어론 카테고리를 새로 만든 기념으로 가상함수 포스팅에서 잠깐 다루었던 동적바인딩에 대해 좀더 자세하게 정리를 해 보려고 한다. 사실 정적바인딩과 동적바인딩은 프로그래밍언어론 과목의 가장 중요한(그리고 어려운) 주제 중 하나다. 언어의 개념과 구현을 아우를 수 있는 주제라서 개인적으로 좋아하는 주제이기도 하다.먼저 바인딩이 무엇인지 정의해 보자. 바인딩은 사전적 의미로는 무언가 두 가지가 결합되는 것을 의미하기도 하고 미정(undefined, undetermined) 상태의 어떤 것이 정의 또는 결정되는 것을 얘기하기도 한다. 프로그래밍언어론에서는 이 여러 가지 의미를 다 사용하고 있지만 일단은 뒤의 개념처럼 컴파일과 실행 과정에서 어떤 것이 결정되는 것을 바인딩이라고 할 수 있다. 좀더 넓은 ..
파이썬에서는 숫자가 아닌 텍스트 정보를 모두 스트링 타입으로 표현한다. 스트링 객체를 표현하는 방법이 여러 가지인데, 다음과 같은 네 가지 방법이 있다. 홑따옴표와 쌍따옴표를 한번 또는 세번씩 사용하여 문자열 부분을 둘러싼다. my_string = 'Hello' my_string = "Hello" my_string = '''Hello''' my_string = """Hello""" # 삼중따옴표는 여러 줄 스트링 표현가능, 즉 줄바꿈을 안에 포함할 수 있다. my_string = """Hello, welcome to the exciting world of string in Python""" 파이썬에는 한글자만 가지는 문자형은 없고 한 글자만 가지는 것도 스트링이다. 주의할 점은 다음과 같이 홑따옴표 한 ..
상속과 가상함수에 대해 얘기하기 위해서는 클래스가 무엇인지 알아야 한다. 클래스는 데이터 필드와 그에 대한 메소드를 정의하는 것이다. 예를 들어 사람 클래스라면 이름, 나이, 성별, 주소를 가진다. 그리고 그 메소드로 자기소개를 하거나(intro) 집에 가거나(goHome) 나이를 한 살 더 먹는다(getOlder). 즉 메소드란 그 사람의 데이터로 무슨 일을 하거나 필드의 값을 바꾸는 것이다. 예를 들어 intro는 그 사람의 이름과 나이를 소개하고, goHome()은 그 사람의 주소로 가는 것이다. 클래스 객체란 클래스의 데이터 모음을 얘기하는데, 메모리에 그 데이터를 저장할 메모리가 생기면 객체가 생겼다고 한다. 사람이 열명이면 이름, 나이, 성별도 열 개가 필요하다. 즉 객체가 열개가 생겨야 하는..
문장은 실행의 한 단위로 대화형 모드라면 바로 실행되는 단위다. 지정문이나 print 문은 단순문장이라고 하는데, 복합문장은 여러 줄로 이루어지는 문장이다. 복합문장의 헤더는 : (콜론)으로 끝나고 줄바꿈과 들여쓰기로 복합문장에 포함되는 부분을 표시한다. 들여쓰기가 줄어들면 복합문장의 끝난 것이다. if a > b: print(“a가 큼”) 복합문장 안에 또 복합문장이 들어가서 이중의 들여쓰기를 할 수도 있다. 이런 경우에도 들여쓰기로 어느 레벨이 끝났는지 알 수 있다. 파이썬에서는 들여쓰기로 블록을 표시하여 자바와 비교하면 { ... }와 세미콜론이 모두 없어진 매우 간결한 코드가 나오게 된다. 또한 자바에서는 들여쓰기가 권장사항이므로 안 해도 그만이지만 여기서는 반드시 해야 한다. 필자는 개인적으로 ..
모든 프로그래밍 언어는 값에 대해서 연산을 취해서 다른 값(결과)를 얻게 된다. 파이썬에서도 사칙연산 같은 숫자에 적용되는 산술 연산과 참 거짓을 받아 참 거짓을 반환하는 논리 연산, 그리고 비교 연산이 있다. 논리 연산은 조건식에 사용되는 진위형 값을 돌려주고 비교 연산도 참 거짓을 반환한다. 비교는 비교 가능한 타입 끼리만 연산을 취할 수 있다. 예를 들어 ('3' < 5)와 같은 수식은 문자열과 숫자를 비교할 수 없으므로 타입 오류가 나게 된다. 산술연산에는 사칙연산과 나머지(%) 연산이 있다. 파이썬의 특징이라면 그냥 나누기 연산 /은 항상 실수를 돌려주고 정수 나누기 연산 //은 내림을 한 정수 결과를 돌려준다. 정수형은 자바 언어와 달리 자리수의 제약이 없어서 오버플로우가 발생하지 않는다는 점..
Integer나 Double 클래스가 가끔 코드에 등장한다. 이들은 기본 타입인 int나 double에 대응하는 래핑(wrapping) 클래스 타입이다. 이런 타입을 많이 접하는 것이 ArrayList와 같이 콜렉션 객체를 선언할 때이다. 이 클래스들이 왜 필요할까? 앞의 포스트에서 값 변수와 참조 변수에 대해 살펴보았다. 자바에서 변수는 값 모델(즉 변수가 직접 값을 가지는 형태)과 참조 모델(변수는 객체의 참조를 가짐. 객체는 힙 메모리의 어딘가에 존재한다)로 나눈다. int와 double은 기본타입으로 값모델을 가지는데, 그 경우 int n;이라고 선언하면 n이 나타내는 주소(위치)에 int 값이 저장된다. 이 때 n은 값을 나타내기도 하고 저장소를 나타내기도 한다. 이것을 값모델이라고 한다. 반면..
- Total
- Today
- Yesterday
- contains
- 자바regex
- 패턴
- contentEquals
- 이터러블
- APPEND
- 콜렉션
- 이터레이터
- indexof
- 동적바인딩
- CompareTo
- rust
- zip
- follow
- comparable
- python exercise
- 스트링 +
- TypeError
- format
- Lazy evaluation
- max
- python example
- 스트링
- sort key
- ToString
- 지연계산
- Camel Style
- C++ 클래스
- Iterator
- typedef
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |