전자 하드웨어 기초 기초

궁금한 것 찾아보면 메모하고 링크를 달아놓은 포스트 입니다.

[출처 : http://programfrall.tistory.com/39 ]

주파수 : (Frequency)는 파형이 주기적으로 1초 동안에 얼마나 진동했는지를 의미합니다. 그래서 1초동안에 몇번 같은 파형이 반복되는지 측정함으로서 주파수를 알 수 있습니다.

주기 : 한개의 파형이 나타나고 다음 파형이 나타날때까지의 시간입니다. 
T = 1/f 
1Hz 는 주기가 1초 
0.5초 = 1/2

220V AC 60Hz 
1초에 60개의 파형이 있는 전압이 220V.

저항

: 전기적 흐름을 강제로 방해하는 소자. 
옴의 법칙 : V= IR

저항의 병렬 연결

: 각 저항값의 역수를 합한 값의 역수와 같다. 
2옴, 3옴이 병렬 연결이라면 
1/R = 1/2 + 1/3 
1/R = 3/6 + 2/6 = 5/6 
R = 1.2

저항의 회로적 의미와 용도

전류의 제어
회로블럭에 특정크기의 전류를 흘려주려고 할 때
전압의 분배
전압이 강하되는 것을 이용해서 원하는 전압의 크기를 만들 수 있음.

TIP : 저항이 1개 달려있다면 전류 제어!, 2개 이상달려있다면 전압분배!

전력

전력이란 전기가 일을 하는 힘을 뜻합니다. 힘이 소비된다는 것은 일을 한다는 의미

P = I * V (전력은 전압이 높을 수록, 전류가 많이 흐를 수록 커진다) 
P = I*I*R 
P = V*V / R

10V*10V*10옴 = 10W(와트)

전력량

: 전력이 순간적인 소비량에 대한 설명이라면, 실제 시간에 따른 소비량을 계산한 것을 전력량이라 합니다.

!!저항에서 전력을 알아야 하는 이유

저항이라는 소자에는 전력이라는 것이 걸리게 됩니다. 전력은 일을 한 양이므로 필연적으로 열이 발생하게 됩니다. 이 열때문에 정격전력을 알아야 하는 것입니다.

http://programfrall.tistory.com/63 ]

전기 저항의 공식

소재의 저항의 경우 그 소재의 단명적과 길이에 따라 저항값이 변하게 됩니다. 
R = ρL / A 
ρ: 도선의 비저항 
A: 도선의 단면적 
L: 도선의 길이

E = V/L 
E: 전기장 
V: 전압 
L: 거리차

F = qE 
q: 전하량 
E: 전기장의 크기

a = F/m = qE / m
a: 가속도
F: 힘
m: 질량
q: 전하량
E: 전기장의 크기

도선내의 전자는 가속도 운동을 하며 움직이게 되죠. 하지만 도선내에는 여러 입자(원자 핵등)에 부딪치게 되고 전자는 종단속도에 이르게 됩니다. (공기중의 물체가 일정 속도 이후 공기 저항으로 인해 종단속도에 이르는 것과 같습니다.) 
결국 전자의 속도는 
v = μE 
v: 속도 
μ: 모빌리티 상수 
E: 전기장

이것들을 이용해서 도선의 전류밀도를 구하게 되면 전류밀도 J는 
J = nqv = nqμE 
J: 전류밀도 
n : 전자의 갯수 
q : 전하량 
v : 속도

전류밀도에 단면접을 곱하게 되면 전류값이 나오기 때문에 단면적을 곱해봅니다.

J*A = nqμE*A 
I = nqμE*A 
E = V/L 
I = nqμV*A / L 
R = ρL / A

저항의 종류

권선 저항
단순히 도선을 길게 만들어서 만든 저항입니다. R = L/S 탄소 피막 저항
저항중에 가장 흔하고 저렴한 저항. 세라믹을 이용하여 봉을 만든 후 탄소계의 저항체를 붙여 만들며, 이 때 저항체로 사용되는 피막을 나선형으로 홈을 만들어 저항의 크기를 조절합니다. 일반적인 사용에는 큰 무리가 없으나 온도에 따른 저항값의 변화가 크고 미세한 노이즈가 있기 때문에 정밀한 신호회로에선 사용되지 않습니다.
금속피막 저항
탄소 피막 저항과 만드는 방식이나 구조는 같으나 소재가 금속이라는 것이 다른 점입니다. 때문에 온도에 따른 저항값의 변화가 작기 때문에 정밀함이 필요한 아날로그 회로에서 많이 쓰입니다. 또한 다양한 저항값으로 만들 수 있기 때문에 값도 상대적으로 저렴합니다. 도장형, 박막형 등 여러가지 타입이 존재합니다.
시멘트 저항
탄소피막 저항 혹은 권선 저항 외보를 시멘트로 덮어버리는 구조의 저항입니다. 시멘트 덕분에 열에 매우 강하며 일반적인 전력선에 많이 사용됩니다.
칩 저항
칩모양 저항. SMD 타입 저항 임.
매우 작으나 잡음 많고, 고전력을 견디지 못하여 아날로그 회로나 전력회로에는 부적절합니다. 대부분 디지털 회로에서 많이 사용되며 SMD 타입으로 많이 제작되고 있습니다. 
보통 1608, 2012라고 언급하는 저항들이 칩저항들입니다.
네트워크 저항
여러개의 저항을 하나로 묶어 만든 저항입니다. 보통 IC주변회로에서 많이 쓰입니다. 내부구조도 다양하게 존재하기 때문에 데이터 시트를 보고 자신이 원하는 네트워크 저항을 사용.
가변저항
볼륨 조절기 등이 가변저항을 이용한 장치.

축전기(커패시터)

축전기는 전류를 저장하고 그 저장된 전류를 방출하는 소자입니다. 우리가 회로를 설계하고 전자의 흐름을 제어할 때 때로는 흐름을 안정화 시켜야 할 경우가 있습니다. 그럴 때 이 커패시터를 사용하여 흐름이 원활할 때 전류를 저장해 놓고 흐름이 원할하지 못할 때 전류를 흘려주는 것입니다.

기호 : ┤├ 
두 도체 사이에 절연체를 채우고 양측이 전기적으로 이어지지 않도록 합니다. 그러면 양단에 전압이 걸리면서 도체에 전하가 모이게 되는 것임. 전하가 모이게 되면 전류가 충전되는 것입니다.

Q= CV 
Q: 전하량 
C: 정전용량(쿨롱) 
V: 전압 
정전용량(capacitance) C는 단면적과 거리에 영향을 받는데 그 식은 
C = ε A/L 
C: 정전용량 
ε: 절연체의 비유전율 
A: 단면적 
L: 두 판사이의 거리

단면적이 넓을수록 두 극판 사이의 거리가 좁을 수록 정전용량이 크다는 것입니다. 
정전용량이 크다는 말은 같은 전압에서 더 많은 전하를 저장할 수 있다는 말과 같음.

커패시터 성질

https://m.blog.naver.com/roboholic84/220456521276

전기분야에서 콘덴서와 커패시터는 같은 전자부품을 말합니다.

  1. 직류 전압을 가하면 각 전극에 전기(전하)를 축적(저장)하는 역할 
    (콘덴서의 용량만큼 저장된 후에는 전류가 흐르지 않음)

  2. 교류에서는 직류를 차단하고 교류 성분을 통과시키는 성질

[콘덴서의 사용] 
불안정한 전원을 잡아주기 위해 사용 
노이즈를 제거하기 위한 방법으로 사용 
직류를 차단하며 교류를 통과시키기 위해 사용 
IC(직접회로)의 안정된 작동을 위해 사용

[용어] 
정격전압 : 부품을 작동시키는데 필요한 표준 전압 
정격정전용량 : 저장되는 양의 정전용량

커패시터의 직렬 연결

저항의 병렬처럼 계산

커패시터의 병렬 연결

저항의 직렬처럼 계산

다이오드

다이오드는 한쪽으로만 전원을 흘려줍니다. 소자의 특성상 전압강하가 일어납니다. 
반대로 전원을 입력할 때에는 특정 전압내에서는 전원을 통과시키지 않도록 하지만, 그 전압 이상이 공급되면 다이오드가 참다 못해 전원을 통과시키게 됩니다. 
Anode(입력부), Cathode (출력부)

전압레귤레이터

https://m.blog.naver.com/PostView.nhn?blogId=roboholic84&logNo=220337738286&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F]

정전압 레귤레이터(Voltage Regulator)
일정 전압을 잡아주는 역할을 합니다. 예를 들자면 5V에서 작동하는 보드에 2.5V~3.5V 를 필요로하는 CPU 를 장착해야 한다면, 레귤레이터를 이용해 CPU 로 입력되는 전압을 조정해줍니다. 레귤레이터는 어떤한 전압이 들어오더라도 미리 점퍼나 스위칭에 의해 정해진 전압만을 출력합니다.

연산증폭기란?(OP AMP)

https://m.blog.naver.com/roboholic84/220338779460]

연산증폭기는 두개의 입력단자와 한개의 출력단자를 가지며, 두 개의 입력단자간의 전압차이를 증폭시키는 증폭기로, 고증폭도를 가지며 아날로그 신호의 가산, 감산, 적분 등의 연산이 가능한 증폭기를 말합니다. 
어떤 용도로 사용하느냐에 따라 목적이 달라지며, 공급되어야 하는 전압 또한 달라집니다.

연산 증폭기는 전압에 의해 신호를 증폭해주는 전압증폭기에 포함이 될 수도 있고, 2개의 입력신호의 차에 비례해 출력을 얻는 차동증폭기에 포함 될 수도 있습니다.

트랜지스터

https://m.blog.naver.com/roboholic84/220329192135]

정의 : 규소, 게르마늄 따위의 반도체를 이용하여 전기 신호를 증폭하여 발진시키는 반도체 소자. 세 개 이상의 전극이 있다. 
즉, 트랜지스터는 3개 이상의 단자를 가지고 있는 능동소자를 말하며, 
(능동소자 : 입력과 출력을 가지고 있어 신호를 증폭이나 변환시켜 전기에너지를 변환시키는 소자를 말함)

트랜지스터는 3개의 반도체, 3개의 단자로 이루어져있습니다. 
npn형, pnp형 
E: emitter 
B: base 
C : collector 
E는 접지(-), B는 입력(전류 흐름을 제어하여 증폭 또는 변환), 
C는 출력(Output)

화살표가 밖으로 나가는 npn에서 N은 밖으로 나가는 모양, 
화살표가 안쪽으로 들어가는 pnp형에서는 P는 안으로 들어가는 모양

릴레이란

https://m.blog.naver.com/roboholic84/220460268471]

릴레이는 쉽게 말해 On, Off 가 있는 일종의 ‘스위치’ 입니다.

보통 사용하는 스위치는 수동으로 작동하지만, 릴레이는 ‘자동’으로 On, Off 할 수 있게끔 해주는 전자부품입니다. 
별도로 분리되어 흐르는 전기를 스위칭할 수 있는 신호 또는 펄스를 만들어 줍니다. 
릴레이는 작동하기 위해 필요한 전압은 낮지만, 입력될 수 잇는 전압은 높습니다. 
그래서 릴레이는 흔히 낮은 전압/전류를 이용하여 더 높은 전압/전류를 제어하는데에 많이 사용합니다.

일반적으로 조명은 220VAC, 60W 로 동작하는데, 전원과 조명 사이에 릴레이스위치(250VAC 10A, 125VAC 10A)를 두면, 
250VAC 10A 까지 버틸 수 있으니, 전기를 막고 있다가 5V 를 인가하면, 조명까지 전기를 흐르게 하여 스위치 같은 역할 을 합니다.

릴레이는 내부에 전자석이 있습니다.

모스펫(MOSFET)

[https://m.blog.naver.com/roboholic84/220467544049]

릴레이와 비슷하게 보다 큰 전압의 것을 제어하기 위해 릴레이나 모스펫을 사용합니다.

풀업저항, 풀다운저항, 플로팅 개념 알아보기

[http://blog.xcoda.net/77]

[플로팅 상태] 
디지털 로직은 High, Low, 즉 1과 0으로 표현됩니다. 
하지만, 1도 아니고 0도 아닌 애매모호한 것이 있는데, 이를 Float 상태라고 합니다.

[풀업저항] 
vcc, Digital입력, gnd 사이에 스위치가 열렸을 때, Floating 상태가 되는 것을 방지하기 위해서 스위치가 열려있을 때, 5V(High) 이든 0V(Low) 로 만들어주기 위한 저항회로임. 
[http://blog.xcoda.net/77] 
설명이 너무 잘 되어 있어서, 이게 왜 필요한지 쉽게 이해할 수 있었습니다.


블로그 이미지

ohnewdev

배워서 남주자

,
책 : JAVA 언어로 배우는 리팩토링 입문
히로시 유키 저
박건태 역

1. 정의

: 외부에서 본 프로그램의 동작은 변하지 않고 프로그램 내부의 구조를 개선하는 것입니다. 
리팩토링을 할때는 전후에 테스트를 실시합니다. 
- 리팩토링하기 전에 테스트를 합니다. 
- 리팩토링을 합니다. 
- 리팩토링한 후 다시 한번 테스트를 합니다.

2. 목적

  • 버그를 찾아내기 쉽게 한다.
  • 기능을 추가하기 쉽게 한다.
  • 리뷰하는 것이 쉬워진다.

3. 리팩토링의 한계

  • 프로그램이 아직 동작하지 않는 경우
  • 시간이 얼마 남지 않았을 경우(마감일에 가까워 졌을 때)

4. 코드의 악취

: 리팩토링이 필요한 부분

  • 코드가 여기저기 겹쳐 있다.
  • 메소드가 너무 길다.
  • 클래스의 파일이나 메소드가 너무 많다.
  • 메소드에 전달하는 인수의 수가 너무 많다.
  • 사양변경이 발생한 경우 수정할 곳이 여기저기 흩어져 있다.
  • 어떤 클래스를 수정하면 다른 클래스도 수정하지 않으면 안 된다.
  • 언제나 다른 클래스의 속성을 건드리고 있다.
  • 정리해서 다룰 수 밖에 없는 여러 개의 데이터가 하나의 클래스에 정리되어 있지 않다.
  • 클래스를 만드맂 않고 int같은 기본 데이터형만을 사용한다.
  • switch 문이나 if문을 사용하여 동작을 분할하고 있다.
  • 서브클래스를 만들면 클래스 계층에 따로 서브클래스를 만들어야 한다.
  • 클래스가 별로 하는 일이 없다.
  • 일시적으로 사용할 필드가 있다.
  • 메소드가 호출하는 연쇄가 너무 많다.
  • 위양(권리를 위임하고)자신이 하는 일은 없는 클래스가 있다.
  • {부적절한 관계} 필요 없는 쌍방향 링크가 걸려 있거나 is-a 관계가 아니면서 상속을 사용한다.
  • {클래스의 인터페이스 불일치} API 가 부적절하다.
  • 기존의 클래스라이브러리가 사용하기 힘들다.
  • {데이터클래스} 필드와 getter메소드와 setter 메소드만 가지고 있는 클래스가 있다.
  • {상속거부} 상속하고 있는 메소드면서 그것을 호출하면 문제가 발생한다.
  • {코멘트} 코드의 부족을 보충하기 위해 상세한 코멘트가 있다.

  • [요약]

    • 겹쳐있다.
    • 너무길다
    • 너무 많다
    • 이름이 어울리지 않는다
    • 너무 공개했다
    • 객체지향적이지 않다.

    리펙토링은 Step by step!!!


책 : JAVA 언어로 배우는 리팩토링 입문
히로시 유키 저
박건태 역


블로그 이미지

ohnewdev

배워서 남주자

,


그간 대강 두리뭉실 써왔던 javascript를 다시 보고 있다. 재입문이 아니라 처음 배우는 느낌이다.

함수 선언 VS. 표현식

함수에는 두 가지 리터럴 형태가 있는데, 다른지는 몰랐었다.

[함수 선언-function declaration]

function add(num1, num2){
return num1 + num2;
}

[함수 표현식-function expression]

var add = function (num1, num2){
return num1 + num2;
}

함수 선언식을 사용하면 코드가 실행 될 때 컨텍스트(선언된 함수를 포함하고 있는 함수 스코프 또는 전역 스코프) 상단에 끌어올려진다고 한다. 즉, 함수를 호출하는 코드가 함수를 선언한 코드보다 앞에 있어도 에러가 발생하지 않는다는 뜻이다.(hoisting)

var result = add(5,5);
function add(num1, num2){
return num1 + num2;
}

함수 호이스팅(hoisting)은 함 수 이름을 먼저 처리하기 때문에 일어나는 현상으로 함수 선언에만 적용된다. 
같은 자리에 함수 표현식으로 작성하면 에러가 난다.

[인용-객체지향자바스크립트의 원리]

정규식

숫자키 버튼 및 텍스트박스 직접 입력 등의 입력값에 대한 검증을 하기 위해 정규식 사용. 
참조 : 정규식

strict mode

개발과정에서 발생될 수 있는 오류에 대해 더 엄격하게 두기.

참조 : Strict mode


계산기 프로그램 OOP 로 만들기

객체지향 언어 특징을 다시 정리하면


'프로그래밍 > javascript' 카테고리의 다른 글

Closure  (0) 2018.07.04
[ECMAScrpt6] Arrow 함수  (0) 2018.04.03
블로그 이미지

ohnewdev

배워서 남주자

,

[postgresql] UPSERT

  1. SQL- upsert 만드는 법 
    기존 오라클에서 사용하던 merge 구문효과를 postgresql 에서 사용하기 위해 UPSERT 문을 만들어 사용한다.

    1)

    INSERT INTO spider_count (spider, tally) VALUES ('Googlebot', 1);

    2)

    UPDATE spider_count SET tally=tally+1 WHERE date='today' AND spider='Googlebot';

    이와 같은 2개의 구문이 있다고 할 때,변환 방법은 다음 처럼 한다. upsert 라는 변수로 가정하고,

     $insert = "INSERT INTO spider_count (spider, tally) SELECT 'Googlebot', 1";

    $upsert = "UPDATE spider_count SET tally=tally+1 WHERE date='today' AND spider='Googlebot'";
  2. 위 2개의 변수를 아래 모양에 맞춰 넣는다.

    WITH upsert AS ($update RETURNING *) $insert WHERE NOT EXISTS (SELECT * FROM upsert);
    WITH upsert AS ( (UPDATE spider_count SET tally=tally+1 WHERE date='today' AND spider='Googlebot') RETURNING *) INSERT INTO spider_count(spider, tally) SELECT 'Goolgebot', 1 WHERE NOT EXISTS( SELECT * FROM upsert)


'프로그래밍 > SQL' 카테고리의 다른 글

[SQL] rownum, limit(top), order by 순서지정  (0) 2017.04.11
블로그 이미지

ohnewdev

배워서 남주자

,

Java Pair 자료구조

C++ 에는 Pair 자료구조가 있는데, 자바에는 없다. 
직접 만들어서 써야 하는 건가? 
찾아보다가 맘에 드는 소스를 보관해본다.

    class Pair<L,R> {
final L left;
final R right;

public Pair(L left, R right) {
this.left = left;
this.right = right;
}

static <L,R> Pair<L,R> of(L left, R right){
return new Pair<L,R>(left, right);
}
}

list.add(Pair.of(x,y)); // my preference 
list.add(pairOf(x,y)); // use with import static x.y.Pair.pairOf

참고 : @simbo1905 http://stackoverflow.com/questions/521171/a-java-collection-of-value-pairs-tuples


'프로그래밍 > JAVA' 카테고리의 다른 글

Web-Scraping(XML)  (0) 2017.04.06
블로그 이미지

ohnewdev

배워서 남주자

,

이바닥 늦깍이로 시작했기에...
두고두고 볼 로드맵으로 생각하고 열심히 레벨업!!

번역: 上善若水님-개발자역량 메트릭스


원문 : Programmer Competency Matrix 


블로그 이미지

ohnewdev

배워서 남주자

,

[CMD] 사용법

TOOL/CMD, BASH 2017. 4. 14. 09:19

[CMD] 사용법

Redirection

C:\ dir > dir.log
C:\ type dir.log

dir의 결과를 dir.log 에 남깁니다. 
(기존 파일이 있다면 덮어씁니다.)

C:\ dir/w >> dir.log

dir.log 파일에 이어 저장합니다.

C:\dir/w >> dir.log | start notepad dir.log
C:\dir/w >> dir.log & start notepad dir.log

수행을 하면서, 지정한 프로그램으로 해당 파일을 엽니다.


근데, 뒤쪽에 이상한 것들이 붙는 것들이 있어서 좀 찾아봤다.

D:\temp\TEST>dir /w > text4.txt 2>&1

기본적으로 stdout 의 대상이 text4.txt 가 되고, 
또한 stderr 도 text4.txt 가 된다는 뜻. 
그래서, 일반적/오류가 나는 부분도 text4.txt 로 출력한다는 뜻임. 
여기서

  • 2 는 stderr 을 의미하고
  • > 는 redirection
  • &1 은 redirection 되는 대상인 text4.txt 가 된다.


참고(표준스트림
일단 여기까지….

[참고]


'TOOL > CMD, BASH' 카테고리의 다른 글

[gitlab] 프로젝트 CLI 생성  (0) 2018.03.07
Bash 를 잘 좀 써보기  (0) 2018.02.21
블로그 이미지

ohnewdev

배워서 남주자

,

[SQL] rownum, limit(top), order by 순서지정

사용자를 구별하는데 기존의 아이디가 변경될 수 있으니 키 값을 userid로 하지 않고 uniquenum 으로 식별하는 구조로 생각했더니, 
변경전(또는 퇴직) 아이디를 가지고 오는 경우가 발생했다. 
그래서 쿼리를 변경하려고 한다.

일단 잠재적인 문제가 발생할 수 있는 사용자가 얼마나 있는지 확인해보면… 
uniquenum 은 같으나 status가 Y(활성화)된 사용자를 한번 찾아보면…

select a.userid, a.uniquenum , count( a.uniquenum  ) from user_tbl a LEFT OUTER join user_tbl b
on 1=1
and a.uniquenum = b.uniquenum
group by a.userid, a.uniquenum, a.status
having count( a.uniquenum ) > 1
and a.status = 'Y'

예상데로 여러건들이 나왔다.

여러건이 나올 수 있는 결과에서 1개의 레코드만 필요하고, 특정 필드(예에서는 status)의 원하는 순서데로 뽑아야 한다.

하나의 record 를 뽑으려면 rownum 을 쓰지만, 
이미 rownum 데로 건수를 뽑고 그리고나서 orderby 가 먹힌다. 
과거에 TOP 과 비슷한 것이 생각나 찾아보니, limit 이란 것이 있어 아래와 같이 했다.

결과는 원하는데로 나왔지만, 찝찝하다.. 좀 더 정교하게 콘트롤 하고 싶은데, status 의 상태가 불안하다.

-- postgresql
select userid, uniquenum, status from user_tbl
where 1=1
and uniquenum = 'S123456789'
--and rownum=1
order by status desc
limit 1

찾아 보니, order by 에 케이스를 지정할 수 있었다.

link - sql ORDER BY multiple values in specific order?

2가지 방법이 나오는데, 2번째 방법이 눈에 더 잘 들어와서 
해보니, 잘된다 :) 
그러나 postgresql 에서만 되는 듯. 그리고, 지정을 낮은 단계부터 써야하는 조금 이상하다.

select userid, status from user_tbl
where 1=1
and uniquenum = 'S123456789'
and status in ('N', 'R', 'Y')
order by status = 'N', status = 'R', status = 'Y'
limit 1

그래도 좀 더 지지를 많이 받는 표현도 익혀보면~

select userid, status from user_tbl
where 1=1
and uniquenum = 'S123456789'
and status in ('R', 'N', 'Y')
order by
CASE status
when 'Y' then 1
when 'R' then 2
when 'N' then 3
else 4
end, userid
limit 1;


역시나 많이 쓰는 것으로 채택;;


'프로그래밍 > SQL' 카테고리의 다른 글

[postgresql] UPSERT  (0) 2017.05.11
블로그 이미지

ohnewdev

배워서 남주자

,
Web-Scraping

Web-Scraping(XML)

오늘 일하다가 웹스크랩핑 이란 것을 알게되었고,
간단히 테스트 프로그램을 만들어 보았다.

xml 페이지 읽어오기

package main;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;

public class GetCurrencyInfo {

public static void main(String[] args) {
getCurRate();
}

private static void getCurRate() {
try {
// String searchUrl = "http://localhost/eurofxref-daily.xml";
String searchUrl = "https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml";
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(searchUrl);

// xpath 생성
XPath xpath = XPathFactory.newInstance().newXPath();
String expression = "/*/*/*/Cube";

NodeList cols = (NodeList) xpath.compile(expression).evaluate(document, XPathConstants.NODESET);

System.out.println("=====================");
System.out.println(cols.item(0).getParentNode().getAttributes().getNamedItem("time").getNodeValue());
System.out.println("=====================");

for (int idx = 0; idx < cols.getLength(); idx++) {
String cur_rate = cols.item(idx).getAttributes().getNamedItem("currency").getNodeValue() + " " + cols.item(idx).getAttributes().getNamedItem("rate").getNodeValue();
System.out.println(cur_rate);
}
} catch (Exception e) {
e.printStackTrace();
}

}
}

구동결과

runnable jar 로 만들어서 돌려본 결과…

D:\dev_git\TestRunnable>java -jar CheckCur_local.jar
=====================
2017-04-05
=====================
USD 1.0678
JPY 118.49
BGN 1.9558
CZK 27.058
DKK 7.4354
...

[참고]
[ksah_web scraping]1
[xPath_doc_tutorial]2 


'프로그래밍 > JAVA' 카테고리의 다른 글

Java Pair 자료구조  (0) 2017.04.14
블로그 이미지

ohnewdev

배워서 남주자

,

이클립스에서 변수명 한번에 바꾸기


package main;
public class Account {
private int balance;
public Account(int i) {
// TODO Auto-generated constructor stub
this.balance = i;
}
public int getBalance() {
// TODO Auto-generated method stub
return this.balance;
}
}


[코드 출처:테스트 주도 개발]


변수명이 i라 money 로 일괄 바꾸고 싶은데… 비록 2개밖에 되지 않지만… 스마트하게 바꿔보자.

shift + alt + r

바꿀 변수 옆에 커서를 둔 상태에서 위와 같이 누르면 같은 변수들이 모두 사각형으로 쌓이면서 바뀐다. 
한번 더 누르면… 대화창도 열린다. 
(블로그 쓰는 재미에 소소한 것도 올려봅니다ㅎ)


블로그 이미지

ohnewdev

배워서 남주자

,