오늘은 빅데이터의 여러 가지 단계 중에서도 수집에 관련한 내용을 알아보려고 합니다.



빅데이터에서는 기존 RDBMS로는 방대한 양의 데이터를 처리하는 데 유지보수 비용이 많이 들 뿐만 아니라, 많은 시간과 하드웨어 성능 또한 가장 중요한 비정형 데이터를 처리하는 어려움때문에 잘 쓰이지 않습니다.

 

때문에 기존 RDBMS의 문제를 보완하고 대용량의 데이터를 효과적으로 수집하는 기술들이 무엇이 있는지 자세히 알아보도록 하겠습니다.



*데이터의 흐름은 수집 후 저장이지만 저장소가 없다면 수집기의 동작을 확인할 수 없기 때문에 데이터 저장소 준비가 우선이라고 합니다!!




1. Flume(물 미끄럼틀)


-플럼은 클라우데라에서 2010년에 공개한 오픈 소스 프로그램(로그 수집기)입니다.


-매우 단순한 구조로, 몇가지 설정만으로 구동 가능합니다.

 

-수많은 서버에 분산된 대용량의 로그 데이터를 한곳으로 모을 수 있으며, 안정성과 가용성이 높습니다. 

 

-데이터 흐름


데이터 플로우는 이벤트를 전송하고 수집하는 과정으로 이루어져 있다. agent 하나를 일련의 논리 노드(에이전트)라 칭하고 논리 노드들은 Flume master들에 의해 설정된다.
에이전트는 노드는 일반적으로 로그를 생성하는 곳이며, 로그들을 컬렉터에 보내고 컬렉터에서는 데이터를 모은 후 저장소에 저장한다.

 

에이전트 내부는 Source, Channel, Sink로 구성된다.

Sink는 수집한 데이터를 전송할 대상을 지목하고, Source는 수집할 데이터에 대한 설정이다

Channel은 일시적인 저장소라 생각하면 될 것 같다.

 

*Flume에 대하여 더 정보를 얻고 싶다면 아래 사이트에 들어가 보는 것도 좋은 경험일 것 같다.

http://flume.apache.org/FlumeUserGuide.html

 

 

 

2. Kafka


-카프카는 LinkedIn에서 2010년에 낸 것으로 초기 아파치의 프로젝트입니다.


-실시간 스트리밍 데이터 파이프라인을 안정적으로 시스템 또는 응용 프로그램 간에 데이터를 구축합니다

 

-실시간 스트리밍 응용 프로그램을 변환 또는 데이터의 흐름에 반응합니다

 

-Flume이 push방식이라면 Kafka는 발행-구독(pub- sub)방식입니다.

 

 주요 4개의 API중 Producers API와 Consumers API을 보도록 하겠습니다.

 Producers API는 특정 topicsrecords를 생성한 후 메시지를 카프카 클러스터에 출간합니다.

 Consumers API는 특정 topicsrecords구독하는 소비자가 메시지를 가져가 처리합니다. 

 

-클러스터에서 소비자에게 건네는 과정은 다음 그림과 같습니다

클러스터 안에는 Broker, Zookeeper가 있고, Broker는 topic 기준으로 메시지를 관리합니다. Zookeeper는 이러한 메시지를 분산 처리할 때 사용합니다.

 

 

Flume과 마찬가지로 좀 더 자세하게 알고 싶으신 분은

http://kafka.apache.org 에 접속하여 궁금한 부분을 ctrl+f 해서 찾아보심이 ㅋㅋㅋ
 

 

 

 

 

 

 

 

'Programming > 빅데이터' 카테고리의 다른 글

[빅데이터]수집  (0) 2017.08.10
하둡이란  (0) 2017.07.18
빅데이터란?  (0) 2017.07.09
데이터의 형태  (0) 2017.07.09

정말 짧고도 짧을 글이지만 너무 중요한 부분인 것 같아 글을 올리려고 합니다!!


컴퓨터가 몇 대씩 있는 집이 아니라면 리눅스 실습이나 연습은 VMWare로 보통 많이 할 것이라 생각합니다

저 또한 VMWare로 실습하려고 노트북도 올만에 싸악 포맷하고 윈도우10으로도 갈아타고 아주 기분좋게 VMWare를 깔고 설치하고 있었는데 ...

------------------------------------------------

This virtual machine is configured for 64-bit

guest operating systems. 

However, 64-bit operation is not possible.

This host does not support Intel VT-x.

-------------------------------------------------

이거 실화냐?

이 에러를 해석하자면 니 cpu에 가상화 기능이 없어 가상머신(VMWare)를 사용할 수 없다는 것이였습니다 ...

(참으로 저는 멍충멍충합니다-_-)


가상머신의 경우  CPU의 가상화 기능을 사용하여 여러대의 컴퓨터를 사용하는 것과 같이 해주는 것입니다.

그 CPU의 가상화 기능이 없다는 것입니다. 아는 것이 힘 입니다 여러분!!


VMWare프로그램을 깔기 전 아래의 프로그램을 다운 받아서 먼저 확인한다면 저와 같이 멍충멍충한 경험을 하지 않을 것입니다 ~

↓↓↓↓↓↓↓

securable.exe


순서대로 

나의 CPU가 최대 몇 비트를 지원하는지, 하드웨어 데이터 방지 기술의 유무, 가상화 지원 유무입니다!!

비트는 딱히 32비트라도 상관없다고 보았고, 가상화 기술 무조건 되야 하겠죠?? 




'Programming > 리눅스' 카테고리의 다른 글

리눅스 기본 명령어 정리  (0) 2018.01.17
[리눅스/CentOS7] 싱글 모드 진입하기  (0) 2017.08.14
[리눅스]한글이 안 써질 때  (0) 2017.08.13
[리눅스] 설치 전 확인사항  (1) 2017.08.09
리눅스란?  (0) 2017.08.07
운영체제가 도대체 뭐야?  (0) 2017.07.18
  1. 밍굥 2017.08.25 11:57

    재밌는 설명이네용😂

 

 

 

 

리눅스는 멀티유저, 멀티태스킹을 지원하는 유닉스처럼 보이는 운영체제이다. 리눅스(배포판)는 GNU(그누)프로젝트로 인하여 탄생한 것이고, 리눅스의 핵심이라 불리는 커널은 1991년 8월 리누스 토르발스에 의해 만들어졌다. 현재 존재하는 많은 리눅스들은 배포판에서 여러가지 응용프로그램을 조합해서 많은 리눅스 단체 또는 회사가 자신의 이름을 붙여 판매/배포 하는 것이다.(구글에 "리눅스 족보"라고 치면 이미지로 수많은 리눅스 종류가 나오는 것을 알 수 있다.)


리눅스의 수많은 종류 중에서도 대표 적인 4가지로 CentOS, Ubuntu, Redhat, Debian가 있습니다. 각 각의 장/단점을 알아보겠습니다!!

 



1)Linux/RedHat(RHEL)
장점 : 구입 후부터 레드헷으로부터 지속적인 관리와 , 최신기술, 보안업데이트를 받을 수 있다. 또한 리눅스 서버로는 현 리눅스 시장에서 1위를 다루고 있다.

단점 : 돈이 많이 든다. 라이센스는 무료지만 , 기술 지원에 관한 사항은 모두 유료이고 또한 데스크탑 용 , 서버용을 따로 판매하기 때문에 돈이 많이 든다!!

 

 

 
2)Linux/CentOS
장점 : 서버 리눅스 시장의 1위인 RHEL(레드헷 리눅스)를 미러링 하였다. RHEL만큼 똑같은 성능을 내지는 못하지만 무료로 비슷한 성능을 낸다는 것에 가장 큰 장점을 둬야 할 듯 싶다. 

단점 : RHEL에 비해 빈약한 사후 지원이다. RHEL이 레드헷으로부터 지속적인 관리와 업데이트를 받는 반면, CentOS는 개인이 관리해야한다.

 

 

3)Linux/Debian
장점 : 데비안의 장점으로는 안정성과 보안성이 좋고 무엇보다 설치가 쉽다는 점이다. 또한 저장소도 매우크고, 다양한 소프트웨어가 존재한다.

단점 : 설치가 쉬운 반면 설정이 어렵고, 유명한 소프트웨어와 상용이 불가하다는 것이 단점이다.

 

 

 

4)Linux/Ubuntu

장점: 다른 배포판들이 서버용으로 주로 쓰이는 반면에 우분투는 개인용에 편의를 두었다. 설치 후 일정한 성능을 내기 위한 설정만 해놓는 다면 후의 관리가 필요가 없다. 누구나 다운받아 쓸 수 있다.

단점 : LTS(Long Term service)버전을 받지 않는 이상 6개월 마다 대대적인 업데이트 혹은 재설치가 필요하다. 영어권에 편의를 두었기 때문에 한글지원이 살짝 부족하다.

'Programming > 리눅스' 카테고리의 다른 글

리눅스 기본 명령어 정리  (0) 2018.01.17
[리눅스/CentOS7] 싱글 모드 진입하기  (0) 2017.08.14
[리눅스]한글이 안 써질 때  (0) 2017.08.13
[리눅스] 설치 전 확인사항  (1) 2017.08.09
리눅스란?  (0) 2017.08.07
운영체제가 도대체 뭐야?  (0) 2017.07.18

여러분 아는 것이 힘입니다!!

...ㅎ


저는 힘이 없기에 리눅스를 배우기 전 

간단히 운영체제가 무엇인지 그리고 운영체제의 종류에 대하여 간단히 알아보겠습니다.


◆운영체제(Operating System)란?

:운영체제는 하드웨어를 제어하고 컴퓨터 자원을 관리하며, 컴퓨터 사용을 편리하게 해주고 응용 프로그램들의 수행을 도와주며, 사용자와 하드웨어 사이의 매개체 역할을 하는 소프트웨어(네이버 사전)

라고 아주 잘 정리가 되어있네요!!


(부들 부들..)


이해하기 어렵다면 컴퓨터 하드웨어를 효율적으로 관리하기 위한 자원 할당자로 생각해주세요.  


운영체제의 목적을 보면 좀 더 쉽게 이해하실 수 있으실겁니다.

  • 사용자에게 컴퓨터의 프로그램을 쉽고 효율적으로 실행할 수 있는 환경을 제공한다.
  • 컴퓨터 시스템 하드웨어 및 소프트웨어 자원을 여러 사용자 간에 효율적 할당, 관리, 보호하는 것
  • 운영 체제는 제어 프로그램으로서 사용자 프로그램의 오류나 잘못된 자원 사용을 감시하는 것과 입출력 장치 등의 자원에 대한 연산과 제어를 관리한다.


◆운영체제의 종류


운영체제는 운영방식에 따라 대화형, 실시간, 하이브리드, 일괄처리로 나뉩니다.

일괄처리 운영체제는 작업을 모아서 처리, 사용자와 상호작용 없이 순차적으로 실행합니다.

대화형 운영제체는 시분할시스템이라고도 하며 일괄처리 시보다 반환시간이 빠르고 이용자에게 즉각적인 피드백을 제공합니다. 응답시간은 사용자 수에 따라 수 분, 혹은 수십 초가 걸릴 수 있습니다.

실시간 운영체제는 모든 시스템 중 가장 빠른 응답시간을 보이며, 결과값이 현재의 결정에 영향을 받으며, 데이터의 처리가 매우 빠르고 반환시간이 매우 중요한 환경에 적합합니다

하이브리드 운영체제는 일괄처리와 대화형 처리의 합성한 운영체계로 대화형 작업이 많지 않을 경우 백그라운드에서 배치 프로그램을 실행합니다. 현재 사용되고 있는 대부분의 컴퓨터 시스템은 하이브리드 시스템이라고 합니다.


다음 글에서는 리눅스OS의 종류에 대하여 알아 보도록 하겠습니다.

+하드웨어도 어느 정도 이해하신 분이라면 네이버 사전에 운영체제를 치고 쭈욱 읽어보신다면 많은 도움이 될 것 같습니다. 필자는 하드웨어가 밉기 때문에 여기까지만 알아보도록 하겠습니다. 


그럼 열공하세요!!










'Programming > 리눅스' 카테고리의 다른 글

리눅스 기본 명령어 정리  (0) 2018.01.17
[리눅스/CentOS7] 싱글 모드 진입하기  (0) 2017.08.14
[리눅스]한글이 안 써질 때  (0) 2017.08.13
[리눅스] 설치 전 확인사항  (1) 2017.08.09
리눅스란?  (0) 2017.08.07
운영체제가 도대체 뭐야?  (0) 2017.07.18

블로깅을 하다 좋은 글이 있어 퍼왔습니다.

 

[출처]http://binny.tistory.com/31

 

하둡이 생겨난 이유를 잘 설명한 글 입니다.

 

탄생 배경을 이해하고 쓰는 것이 많은 도움이 될것 같아 퍼왔습니다.

'Programming > 빅데이터' 카테고리의 다른 글

[빅데이터]수집  (0) 2017.08.10
하둡이란  (0) 2017.07.18
빅데이터란?  (0) 2017.07.09
데이터의 형태  (0) 2017.07.09

빅 데이터 이해하기

 

16년에 AI알파고 구글의 무인 자동차가 나오면서부터 “4차 산업혁명이란 단어가 나오기 시작했습니다. 빅 데이터는 4차 산업 혁명으로 가기 위해 필요한 핵심 기반 기술입니다.

 

 

빅 데이터가 필요한 이유?

 

인터넷/ 모바일 시대로부터 지금까지 쌓인 데이터들에서 최근 2년 동안 발생한 데이터가 전 세계 데이터의 80%를 차지한다고 합니다. 이 말은 앞으로 생겨날 데이터의 양은 지금과는 비교가 안 될 정도로 많아질 것이라는 것을 알수 있습니다. 빅 데이터 기술은 이렇게 방대한 데이터들에서 다양한 패턴들을 해석하여 미래를 예측하는 기술이라 볼 수 있겠습니다.

 

 

빅 데이터 기술의 발전

 

처음은 단순 수집, 적재로 활용되었지만 2012년 쯤 부터 수집한 데이터를 분석하기 시작했고 현재는 이러한 분석을 통하여 통찰력과 예측하는 수준까지 올라왔다고 합니다.

 

 

빅 데이터 구현 기술

 

빅 데이터 아키텍처는 역할별로 수집, 적재, 처리 및 탐색, 분석 및 응용이라는 6개의 레이어로 나눌 수 있고, 역할은 다음과 같습니다.

 

단계

역할

수집

-데이터 연동 및 통합

적재

-대용량/실시간 데이터 처리             -분산 파일 시스템 저장

처리

-데이터 선택, 변환, 통합, 축소          -데이터 워크플로 및 자동화

탐색

-대화형 데이터 질의                       -탐색적 Ad-Hoc 분석

분석

-빅 데이터 마트 구성                      -통계 분석, 고급 분석

응용

-보고서 및 시각화                          -분석 정보 제공

 

 

분석 단계에서 현재 Machine Learning, Data Mining이 쓰인다고 생각하시면 될 것 같습니다.

 

각 단계를 자세히 보면 다음과 같습니다.

 

수집 기술

 

빅 데이터 수집 기술은 기존 시스템에서 보다 더 크고 다양한 형식의 데이터(정형 데이터, 비정형 데이터 http://monny.tistory.com/6)를 빠르게 처리하는 것입니다.

   

수집 기술을 깊게 이해하자면 데이터 수집에는 존 시스템에서 데이터를 얻는 것 vs 실시간 스트림 수집으로 나눌 수 있습니다.

 

기존 시스템의 다양한 인터페이스로부터 정형, 비정형 데이터를 수집하는 것이며, 특히 비정형 데이터를 수집할 때는 크롤링, NLP 기술이 선택적으로 작용한다, 실시간 데이터는 CEP, ESP 기술이 적용됩니다.

 

빅 데이터의 수집 관련 소프트웨어로는 Flume, Fluented, Scribe, Logstash, Chunkwa 이 있고, 실시간 스트림 데이터 처리를 위한 StormEsper도 사용한다고 합니다.

 

 

 

적재 기술

 

빅데이터 적재 기술은 수집한 데이터를 분산 스토리지에 영구 또는 임시로 적재하는 기술입니다.

 

분산 저장소로 크게 4가지 유형이 있습니다.

 

1. 대용량 파일을 영구적으로 저장하기 위한 하둡

2. 대규모 메시징 데이터를 영구 저장하기 위한 NoSQL(몽고DB,카산드라)

3. 대규모 메시징 처리 결과를 고속으로 저장하기 위한 메모리 캐시

4. 대규모 메시징 데이터를 임시 저장하기 위한 메시지 지향 미들웨어

 

이 저장소들에는 각자 다른 성격의 데이터들이 저장됩니다. 예로 실시간 대량으로 발생하는 메시지 데이터는 1번에 저장되면 파일이 많아져 효율성이 떨어지기 때문입니다. 따라서 빅데이터 적재 기술에서 적재되기 전에 적절한 설계로 어디에 저장해야 할지 판단해야 합니다.

 

 

 

처리/탐색

 

빅데이터 처리/탐색 기술은 이렇게 저장소에 적재된 데이터를 분석에 활용하기 위해 데이터를 정형화 및 정규화 하는 기술입니다.

 

 

처리/탐색 과정은 다음과 같습니다

 

 

데이터를 발굴하기 위해 적재된 데이터를 지속적으로 관찰하고 탐색(SQL on Hadoop)

데이터를 선택, 변환, 통합, 축소(애드혹 쿼리)

위의 과정들을 워크플로(workflow)로 프로세스화해서 자동화

워크플로 작업이 끝난 데이터들을 DW로 옮김

DW로 옮겨진 데이터들을 측정 가능한 구조로 만듬

 

 

분석&응용

 

분석/응용 기술은 대규모 데이터로부터 새로운 패턴을 찾고, 그 패턴을 해석하여 통찰력을 확보하기 위한 단계입니다.

 

위에 말했던 바와 같이 최근 2년 동안 엄청난 양의 데이터가 생겨나고 , 앞으로 생길 것으로 예상됩니다. 하지만 기존에 사용하던 분석 기술로는 한계가 발생하였고 빅데이터 분석 기술은 이러한 한계점을 극복할 수 있게 하였습니다. 또한 머신 러닝 기술을 통하여 군집, 분류, 회귀, 추천 등의 고급 분석 영역까지 확장할 수 있게 되었습니다.

 

분석/응용 기술에는 임팔라, 제플린, 머하웃이 있으며 스쿱을 응용하여 외부 RDMBS에 데이터를 제공합니다.

 

 

 

이미지 한장으로 정리하자면 다음과 같습니다.

※이 글은 <실무로 배우는 빅데이터 기술 >이라는 책을 토대로 정리한 내용입니다.

'Programming > 빅데이터' 카테고리의 다른 글

[빅데이터]수집  (0) 2017.08.10
하둡이란  (0) 2017.07.18
빅데이터란?  (0) 2017.07.09
데이터의 형태  (0) 2017.07.09

 

 

정형 데이터 vs 비정형 데이터

 

 

데이터는 형태에 따라 정형 데이터, 반정형 데이터, 비정형 데이터로 나뉩니다.

 

크게 정형 vs 비정형으로 알아보겠습니다. 

 

◆정형 데이터란??

 

스키마 형태가 있고 연산가능하면 정형 데이터이며, 형태가 있으나 연산가능하지 않으면 반정형 데이터에 속합니다.

 

예로 RDBMS의 테이블들을 예로 들수 있겠습니다.

 

 

여기서 반정형 데이터의 경우를 들자면 아래와 같이 데이터의 형태가 있지만 정형 데이터와 같이 완벽하게 정리된 모습이 아닌 것을 반정형이라 칭하는 것 같습니다.

 

반정형 데이터의 예로 공공 API에서 받은 정리되지 않은 데이터들 또는 JSON파일 등 입니다.

반정형 데이터

 

 

◆비정형 데인터란??

 

비정형 데이터는 형태도 없고, 연산 가능하지도 않은 것. 우리가 흔히 말하는 소셜 데이터가 이에 속하며 텍스트, 영상, 음성 등의 형태로 나타납니다.

 

 

 

 

◆데이터들의 저장 구조

 

데이터의 형태에 따라 저장구조에도 차이가 있습니다. 정형 데이터는 RDBMS(MySQL)로 저장되고, 반정형 데이터는 파일(JSON)로, 비정형 데이터는 NoSQL(몽고DB)이라는 저장구조를 갖게 됩니다.

 

 

 

'Programming > 빅데이터' 카테고리의 다른 글

[빅데이터]수집  (0) 2017.08.10
하둡이란  (0) 2017.07.18
빅데이터란?  (0) 2017.07.09
데이터의 형태  (0) 2017.07.09

학교 기말 과제로 팀 프로젝트를 하게되었다.


c/c++ 로 간단한 게임을 구현하는 프로젝트였는데 c/c++ 로 게임을 만들 때 자주 사용할 만한 


헤더 중에서도 <conio.h>, <windows.h>, goto함수 까지 한번 알아 보았다.



<conio.h>


conioconsole and port I/O 약자이며 이 헤더파일은 윈도우즈에서만 쓸 수 있는 비표준함수들이 들어있다.


대표적인 함수 중에


int kbhit() 

버퍼에 값이 있으면 1을 없으면 0을 리턴한다.


*한 마디로 정리하면 입력이 있었는지 없었는 지 판단하는 함수이다.

 

int getch()


버퍼에 있는 값을 꺼내오는 역할을 한다. 


kbhit ==1  -> getch()  이런 식으로 사용하면 될 것 같다.





<windows.h>


콘솔창을 이용하여 무엇인가를 하고 싶을 때 사용하는 함수이다.


대표적인 함수로 system("cls")와 sleep() 함수가 있다.


비주얼 스튜디오에서 System()함수는 운영체제(도스창) 명령어를 실행시키는 함수.




gotoxy() - 커서 옮기기

 

gotoxy 함수는 비주얼 스튜디오에서 직접적으로 사용 못하기 때문에 도스창에서 커서 이동을 수행하는 함수를 구현해 놓은 것으로 그 옛날 MS-DOS 시절 turbo C에서 제공했던 gotoxy를 그대로 구현한 것.


코드는 다음과 같습니다


void gotoxy(int x,int y){

COORD pos;    

pos.x = x;

pos.y = y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);

}


좀 더 깊게 알고 싶으신 분들은 COORD 구조체, SetConsoleCursorPosition(), GetStdHandle()에 대하여 좀 더 알아보면 좋을 것 같습니다.




-끗-


 기본적으로 ms-sql이 깔려있어야 한다



1. ms–sql에서 데이터 베이스 및 테이블 생성 후 데이터를 삽입








2. JDBC 드라이버 다운




http://www.microsoft.com/ko-kr/download/details.aspx?id=11774







3. 이클립스 라이브러리에 추가하기


.exe파일 압축을 풀어 그림과 같이 폴더를 탐색하다 보면 jre 폴더가 나오는데 그중 같은 버전의 jre폴더를 열어 안에 있는 내용을 이클립스 lib에 추가해준다.




프로젝트이름 위에서 우클릭 properties –> 왼쪽에서 Java Build Path 클릭 -> Add JARS로 방금 전 jre폴더 안에 있던 파일을 찾아 추가한 후 적용(Apply)







4. 소스 작성


import java.sql.*;

 

public class DBConnection {

       public static void main(String[] args) {

               String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";

               String url = "jdbc:sqlserver://localhost:1433";

               String user = "kjm";

               String password = "kjm";

 

               // 1. JDBC Driver 로딩

               try {

                Class.forName(driver);

               // 2. 데이터베이스 연결 (by url with username and password)

                Connection con = DriverManager.getConnection(url, user, password);

               // 3. Statement 객체 생성

                Statement stmt = con.createStatement();

               // 4. Query 실행 (using Statement, receive the ResultSet)

                String qry = "use jmDB;  " + "select * from student ";

                ResultSet rs = stmt.executeQuery(qry);

 

                System.out.println("id\tname\tage\temail");

                System.out.println("===========================================================================");

 

                // 5. ResultSet 객체를 통해 데이터 추출 (row by row)

                while (rs.next()) {

                 String name = rs.getString("stu_id");

                 String gender = rs.getString("stu_name");

                 String id = rs.getString("age");

                 String pw = rs.getString("stu_email");

            

                 System.out.print(name);

                 System.out.print("\t"+gender);

                 System.out.print("\t"+id);

                 System.out.println("\t"+pw);

               

                }

                // 6. 자원 반납

                rs.close();

                stmt.close();

                con.close();

               } catch (ClassNotFoundException e) {

                e.printStackTrace();

               } catch (SQLException e) {

                e.printStackTrace();

               }

              }

}

 

실행시키면 다음과 같은 결과를 얻을 수 있다.




-끗-

'Programming > JAVA' 카테고리의 다른 글

자바 암호화시키기  (1) 2018.01.12
[자바]학점 변환기 파일  (0) 2018.01.04
자바 웹 크롤러 예제  (0) 2017.10.27
자바 설치하기(리눅스)  (1) 2017.08.23
MS-SQL(데이터베이스) 연동하기  (0) 2017.07.07
ConcurrentHashMap vs collections.synchronizedMap  (1) 2017.05.17

포인터의 배열배열의 포인터??


int (*a)[3]과 int *a[3] 이 두개의 차이점은 괄호가 있는지와 없는지이다. 


하지만 이 괄호의 유무가 바로 포인터의 배열과 배열의 포인터를 가르는 기준이다.


C언어에서는 "[ ]"의 우선순위는 " * "의 우선순위보다 높다


때문에 *a[3]이라고 선언할 경우 배열은 배열이지만 값이 포인터 즉, 포인터의 배열 나타내는 것이고,


 (*a)[3] 포인터는 포인터이지만 열의 크기가 3인 2차원 배열을 가리키는 포인터(배열 포인터)이다.






위의 소스를 실행해보면 다음과 같은 결과를 얻을 수 있다.




+ Recent posts