아무거나 강좌 1 : 배열과 객체
강좌가 잘 올라오지 않아서, 제가 간단하게 시작해 보려고 합니다.
자바스크립트, 파이선, 자바를 비교해 가면서, 혼동되기 쉬운 점들을 긁어 보도록 하지요.
비단순형 자료구조에 대해서 이야기 해보려고 합니다.
List : 원소들이 나열되어있는 추상 자료 구조
- 배열, Array List, Linked List 등등
Map : (Key, value) 의 자료구조
- Object, Dictionary
자료형 중에 이 두가지가 가장 많이 쓰입니다.
지구상에 있는 어떠한 복잡한 데이터도 이 두가지를 이용하면 디지털화 할 수 있습니다.
JSON 문서는 이 두가지를 사용합니다.
Object
javascript
javascript 의 오브젝트는 다음과 같이 만듧니다.
그 안의 멤버는 coin.eth.name 로 접근 가능합니다.
타입은 object 입니다.
coin_eth = { 'name': 'eth', 'value': 200};
coin_eth.name // 'eth'
typeof coin_eth // 'object'
python
파이선에서도 똑같은 코드를 사용할 수 있습니다.
coin_eth['name'] 로 접근합니다.
타입은 dict 입니다. (사전형이라고 합니다)
coin_eth = { 'name': 'eth', 'value': 200};
coin_eth['name'] # 'eth'
type(coin_eth) # <class'dict'>
파이선에서 . 을 쓰고 싶으면 클래스를 만들어야 합니다.
class Coin:
def __init__(self, name, value):
self.name = name
self.value = value
coin_eth = Coin('eth', 200)
coin_eth.name # 'eth'
Java
자바는 class 의 인스턴스로 Object 가 존재합니다.
class Coin {
Coin(String name, int value) {
this.name = name;
this.value = value;
}
}
Coin coin_eth = Coin("eth", 200);
자바스크립트와 비교해 볼까요?
coin_eth = { 'name': 'eth', 'value': 200};
자바는 타이핑이 참 많은 언어입니다.
개발도구의 자동완성이 없다면 손목이 무지 아프겠지요?
만일 market 이라는 변수를 추가하고 싶다면,
자바에서는 클래스 파일을 먼저 고쳐야 합니다.
자바스크립트에서는 'market': 'coinone' 을 삽입하면 끝
세가지 언어의 Object 에 대해서 알아 보았습니다.
[], {} 가 있는 언어가 참 편합니다.
List, Array
javascript, python
자바스크립트, 파이선 배열은 모양이 같습니다.
원소를 참조하는 방법도 같습니다.
list = [1,2,3]
list[1] // 2
list = [[1,2], 3, 4, [5, 6], 'a']
list.length // 5 javascript
len(list) # 5 python
이형 원소들도 무리없이 하나의 리스트에 들어갑니다.
list 를 합치는 경우
[ 1, 2, 3].concat([ 4, 5]) // [ 1, 2, 3, 4, 5] javascript
[ 1, 2, 3] + [ 4, 5] # [ 1, 2, 3, 4, 5 ] python
python 에서는 이런 것도 가능합니다.
[a, b] = [1, 2] # a = 1, b = 2 python
자바스크립트에서는 array spread 표현을 제공하는데 아래 내용을 참고하세요.
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Spread_operator
Java
자바에서는 {} 가 쓰이네요... 어색한 느낌은 뭘까요?
[ ] 를 사용하는데 익숙해지면 [ ] 라고 써놓고 오류를 눈치채지 못할 수도 있습니다.
int[] list = { 1, 2, 3, 4};
이형 원소를 넣으려면 매우 복잡합니다.
사실 자바에서는 이러한 배열을 쓰지 않고 java.util.List 라이브러리를 사용합니다.
List<Integer> list = new ArrayList<Integer>();
Conclusion
List, Dict 는 가장 많이 쓰이는 자료형입니다.
이와 관련해서는 흥미로운 내용들이 무수히 많습니다.
그리고 이 자료형들은 함수형 프로그래밍과 관련이 있으니, 같이 공부하면 좋을 것 같습니다.
다음에는 Naming(명명법)에 대해서...
지난번에 거래소 데이터 수집하려고 보니까 cloudflare사용하는데는 브라우저 체크시에 자바스크립트 pass = [ 1, 2, 3] + [ 4, 5];와 같은 랜덤 식으로 패스값을 계산하게 해두었더군여. 그거 넘기게하려고 애 좀 먹었던 기억이 납니다. ㅎㅎ
[1,2] + [4,5] 하면 '1, 23, 4' 이라는 스트링이 나오네요..
[1,2].toString() + [4,5].toString() 이 호출 되는가 봅니다.
http://jsbin.com/kolokiwalu/1/edit?html,css,js,console,output
정정합니당 . 요런식으로 패쓰값을 구합니다. 결국 0과 1의 더하기인것 같습니다.
딱봐도 이해가 안가네요~^^
강좌 잘 읽었어요
각 언어별 차이점을 비교해 볼 수 있도록 잘 써 주신거 같아요
자바는 알겠는데 파이썬은 처음 봐요 ㅎ
파이선을 쓰다 보면 자바를 더 잘 이해할 수 있습니다.
좋은글 감사합니다.
저도 프로젝트 오일러 올려야 하는데 요즘 회사 일이 바쁘다보니 짬이 안나넨요...
주업이 우선이지요.... ^^
전 파이썬이 참 어색한데 .... 자바가 어색하시군요 ...ㅎ
언어는 해도해도 공부가 끝이 없는거같습니다.
둘다 잘 하진 못하지만 어색한 정도는 아닙니다.
정적 언어와 동적 언어는 각기 장단점이 있고,
두가지를 다 이해하는 것이 중요한 포인트입니다.
도메인을 공부하느냐 언어를 공부하느냐
도메인은 쉽게 변하지만 언어는 잘 변하지 않지요.
jQuery, Augular, React, Vue 등 자바스크립트 프레임워크는 다양하게 변해도
자바스크립트를 잘 이해하고 있다면 쉽게 적응할 수 있습니다.
그리고 언어를 이해하지 않고는 프레임워크를 잘 쓰기란 쉽지 않습니다.