[Java] Java8, 람다 표현식(Lambda expressions)

많은 프로그래밍 언어에서 람다 표현식은 한번 사용하고 버릴 함수를 정의하기 위한 용도로 많이 사용됩니다. 물론 이 람다 표현식에 의해 만들어진 함수를 변수에 담아 두번 이상 사용할 수도 있지만… 어찌되었든, 람다는 빠르게 함수를 만들어 사용하고는, 버리는 용도로 사용합니다.

Java 8에서 람다 표현식을 지원하고 있는데요. 문자열 요소를 가지는 리스트를 정렬하는 예를 통해 람다 표현식을 살펴 보겠습니다. 정렬할 문자열 리스트로 사용할 names 객체 변수는 아래와 같습니다.

List names = 
    Arrays.asList("검소", "겸손", "명상", "욕심", "탐하는 마음", "경솔", "교만", "어질지못함");

람다 표현식이 아닌 우리가 이미 알고 있는 방식의 코드는 아래와 같습니다.

Collections.sort(names, new Comparator() {
    @Override
    public int compare(String a, String b) {
        return -b.compareTo(a);
    }
});

위의 Collections의 sort 함수의 두번째 인자에 1회용 목적으로 익명 객체를 생성해 던져주고 있습니다. 이 익명 객체를 생성하기 위한 인터페이스가 단 하나의 매서드에 대한 정의를 필요로 합니다. 이를 람다 표현식으로 바꾸면 아래와 같습니다.

Collections.sort(names, (String a, String b) -> {
    return -b.compareTo(a);
});

람다식을 컴파일로가 해석할 때 어떤 타입의 어떤 매서드를 정의하는지를 자동으로 추론해 줍니다. (염병할, 나보다 더 똑똑해!) 위의 람다식을 보면 함수의 코드가 한줄이므로 아래처럼 더 줄일 수 있습니다.

Collections.sort(names, (String a, String b) ->  -b.compareTo(a));

코드가 한줄이므로 {}을 제거할 수 있고, return 키워드를 제거해도 반환한다라는 개념을 이미 추론을 통해 파악하고 있습니다. (이제 니가 코딩해라, 난 뭐하냐?) 충분히 줄였다 싶을 람다 표현식을 더 줄일 수 있는데요. 어차피 어떤 함수를 람다식으로 정의하는지를 알고 있다면 해당 함수의 타입을 명시적으로 언급하지 않아도 추론이 가능할 것으므로 아래처럼 더 최적화할 수 있습니다.

Collections.sort(names, (a, b) -> -b.compareTo(a));

(이젠 나도 모르겠을 암호 코드.. ㅜ_ㅜ) 위의 내용은 람다식의 일부입니다. 람다에 좀더 깊이 들어가면.. 깜짝 놀라거임.. -O-;

CentOS 7에서, 인터넷이 되지 않는 환경에서 PostgreSQL, PostGIS 설치 절차

인터넷이 되지 않은 환경에서 PostgreSQL과 PostGIS를 설치하는 절차에 대해 정리한 글을 Keep해 둡니다. Windows에서 pgAdmin으로 접속하여 ‘CREATE EXTENSION postgis’ 명령 처리에 대한 내용까지 확인하였습니다.

먼저 PostgreSQL 설치 절차입니다.

# postgresq RPM Install
rpm -Uvh pgdg-centos94-9.4-2.noarch.rpm
rpm -ivh postgresql94-libs-9.4.9-1PGDG.rhel7.x86_64
rpm -ivh postgresql94-9.4.9-1PGDG.rhel7.x86_64.rpm
rpm -ivh postgresql94-server-9.4.9-1PGDG.rhel7.x86_64.rpm
rpm -ivh postgresql94-devel-9.4.9-1PGDG.rhel7.x86_64.rpm
rpm -ivh libxslt-1.1.28-5.el7.x86_64.rpm
rpm -ivh postgresql94-contrib-9.4.9-1PGDG.rhel7.x86_64.rpm

# init DB
./postgresql194-setup initdb

# OS start, start PostgreSQL Server
systemctl enable postgresql-9.4

# Start Postgresql service
systemctl enable postgresql-9.4.service
systemctl start postgresql-9.4.service

# Firewall allow port 5432
firewall-cmd --zone=public --add-port=5432/tcp

# allow connection for all client IP
vi postgresql.conf
listen_addresses = "*"

# Configuring PostgreSQL Authentication
su - postgres
psql
\password postgres
\q

# edit pg_hba.conf
local all all peer
-> Do change
local all all md5

host all all 127.0.0.1/32 ident
-> Do change
host all all 0.0.0.0/0 md5

host all all ::1/128 ident
-> Do change
host all all ::1/128 md5

# restart Postgresql service
systemctl stop postgresql-9.4.service
systemctl start postgresql-9.4.service

다음은 PostGIS 설치 절차입니다.

# proj 설치
tar zxf proj-4.8.0.tar.gz
cd proj-4.8.0
./configure
make && make install

# geos 컴파일
tar xvf geos-3.4.2.tar.bz2
cd geos-3.4.2
./configure
make && make install

# libxml 설치 (rpm에서 package 총돌시 --replacefiles 옵션을 사용)
rpm -ivh ./libxml2-2.9.1-5.el7_1.2.x86_64.rpm
rpm -ivh ./xz-libs-5.1.2-12alpha.el7.x86_64.rpm
rpm -ivh ./xz-devel-5.1.2-12alpha.el7.x86_64.rpm
rpm -ivh ./zlib-libs-1.2.7-15.el7.x86_64.rpm
rpm -ivh ./zlib-devel-1.2.7-15.el7.x86_64.rpm
rpm -ivh ./libxml2-devel-2.9.1-5.el7_1.2.x86_64.rpm

# json 설치
rpm -ivh ./json-c-0.11-4.el7_0.x86_64.rpm

# gdal 컴파일
tar zxf gdal-1.9.2.tar.gz
cd gdal-1.9.2.tar.gz
./configure
make && make install

# postgis 컴파일
tar zxf postgis-2.0.3SVN.tar.gz
cd postgis-2.1.8
./configure --with-pgconfig=/usr/pgsql-9.4/bin/pg_config --with-raster
make && make install

# 모듈 파일(.so) 업데이트
echo /usr/local/lib >> /etc/ld.so.conf
ldconfig

# postgis 배포
cd extensions/postgis
make clean
make && make install
cd ..
cd postgis_topology
make clean
make && make install

# restart Postgresql service
systemctl restart postgresql-9.4.service

인터넷이 되지 않는 환경에서 PostgreSQL과 PostGIS 설치를 하는 분들에게 도움이 되시기 바랍니다.

jQuery 선택자 컨닝 페이퍼 2

filter

filter 함수는 이미 선택된 항목에 대해서 다시 한번 더 선택을 하고자 할 때 사용합니다.

$('h1').css('background', '#ff0000').filter(':even').css({'color', '#00ff00');

인자를 함수 객체를 던져 처리하는 형태도 가능하며, 아래의 예는 h1 요소 중 짝수번째 요소들에 대한 처리입니다.

$('h1').filter(
    function(index) {
        return (index % 2) == 0;
    }
).css({'color', '#00ff00'});

eq, first, last

요소에 대한 위치 순서로 선택하는 선택자 함수입니다.

$('p').eq(3).css('color', '#00ff00'); // 4번째 요소
$('p').first().css('color', '#ff0000'); // 첫번째 요소
$('p').last().css('color', '#0000ff'); // 마지막 요소
$('p'').eq(-1).css('color', '#ff00ff'); // 끝에서 첫번째 요소

add

이미 선택된 요소들에 다른 요소를 추가하는 함수입니다.

$('p').css('color', '#ff0000').add('span').css('background', '#ffff00');

is

해당 요소가 선택 조건에 맞는지를 검사합니다.

$('h1').each(
    function() {
        if($(this).is('.a')) {
            $(this).css('color', '#ff0000');
        }
    }
);

find

특정 태그 또는 클래스를 갖는 요소를 선택하는 함수입니다.

var doc = $('

...

...

...
'); doc.find('p').each( function(index) { $(this).css('background', '#0000ff'); } );

전력용어

출처 : 전력신문(http://www.epnews.co.kr)

◆ 송변전 분야

△경간(徑間)→지지물간 거리 △지상고(地上高)→전선 높이 △재폐로→(자동)재투입 △쇄정→잠금 △응동→동작 △이면 배선→내부 배선 △뇌써지→낙뢰충격전압 △(발전기)감발→(발전기)출력감소 △(발전기)증발→(발전기)출력증가 △조류(潮流)→전력 흐름 △HVDC 케이블→고압직류송전케이블 △회선긍장(回線亘長→회선길이 △반도(反跳)→되튐 △철탑 도괴→철탑 넘어짐 △밧데리(Battery),축전지→축전지 △블랙아웃(Blackout)→대정전 △제로에너지하우스(zero-energy house)→에너지 자급주택 △가선(架線)→전선 설치 △연선(延線)→전선 펴기 △긴선(緊線)→전선 당기기 △Relay, 보호계전기→보호계전기 △써모비전(Thermo Vision)→열화상 측정기 △방압변(Pressure Relief Device)→과압 방출장치 △MCCB,Auto Breaker→배선용 차단기 △병가→병행 가선 △조상설비→무효전력 보상장치 △CT, 변류기→전류변성기 △MOF→전압전류변성기 △PT→전압변성기 △전선 실장→전선 실제길이 △수트리→수분침투 균열 △어스, Ground→접지 △뇌격→낙뢰 △로드 쉐딩(Load Shedding)→일부 부하차단

◆ 배전 분야

△원방제어(遠方制御)→원격제어(遠隔制御) △인입선(引入線)→고객공급선(顧客供給線) △연접인입선(連接引入線)→이웃고객 공급선 △애자 두부→애자 머리 △긍장(亘長)→선로 길이 △말구(末口), 말구경(末口徑)→윗동, 윗동지름 △지선→지지선 △승주(昇柱)하다→(전주에) 오르다 △재폐로→재투입 △E-type 계기→E형 전력량계 △DM 수동복귀버튼→최대수요전력 초기화 버튼 △건전구간(健全區間)→정상구간(正常區間) △잠바선→점퍼선 △가공지선(架空地線)→공중 낙뢰유도선 △구배(勾配)→기울기 △이도(弛度)→늘어짐(정도) △휴즈→퓨즈 △호광시간(弧光時間)→아크 발생시간 △철탑정부(鐵塔頂部)→철탑꼭대기 △타이(Tie)→연계 △프레샤→시험용 단자 △변대주→변압기주 △단가업체→협력회사 △오계량→계량 오류 △섹셔널라이저(Sectionalizer)→선로구분 자동개폐기 △리클로저, 자동재폐로차단기→자동재투입 차단기 △직결(直結)→직접 연결 △내장(耐張)→장력 견딤 △콘넥타→연결기 △랙크(Rack)→랙 △입상주→케이블 오름전주 △암타이→완철 지지대

◆ 신기술분야

△Smart Meter, 스마트 미터→스마트 전력량계 △BEMS(Building Energy Management System), 건물에너지관리시스템→빌딩에너지관리시스템(BEMS) △PLC(Power Line Communication)→전력선 통신 △ESS(Energy Storage System), 에너지 저장장치, 전력저장장치→에너지 저장장치 △BMS(Battery Management System)→축전지 관리장치 △DR(Demand Response)→수요반응 △CPP(Critical Peak Pricing),피크요금제→피크요금제 △RTP(Real Time Pricing)→실시간 요금제 △EV(Electric Vehicle)→전기차 △Smart Thermostat→스마트 온도조절기 △우드팰릿→압착나무연료 △비회(Fly Ash)→날림재 △저회(Bottom Ash)→바닥재 △개거(開渠)→개방 수로 △그린 프라이스(Green Price)→녹색가격제도 △블레이드(Blade)→날개 △그리드 패리터(Grid Parity)→그리드 평형점 △부하 평준화, Load leveling→부하 평준화 △첨두부하 저감, Peak Shaving→피크부하 저감 △총체적 품질경영, 전사적 품질경영, TQM→전사적 품질경영 △연돌→굴뚝 △연도→연소가스 통로 △Off-taker→생산품구매자 △풍도→공기 통로 △제매장치→그을음 제거장치 △런백(Run Back)→출력 감소 △BOP(Balance Of Plant)→보조설비 △가바나프리(Governor free)→조속기 개방

◆ ICT분야

△AMI(Advanced Metering Infrastructure)→지능형 전력계량시스템 △AMR(Automatic Meter Reading)→원격 검침 △VoIP(Voice over Internet Protocol)→인터넷전화 △HDTV→고화질 텔레비전 △DR(Disaster Recovery)→재해 복구 △GIS(Geographic Information System)→지리정보시스템 △In-house 개발→자체 개발 △SRM(Supplier Relationship Management)→공급자관계관리(SRM) △Batch→일괄 △ISP(Information Strategic Planning)→정보화 전략계획

◆ 전력수급분야

△소내 소비전력→발전소내 소비전력 △PPA(Power Purchase Agreement)→직접구매계약 △절전규제→전력사용규제 △축열→열저장 △축냉→냉기저장 △민간부문 공급능력 활용→민간발전기 활용