ava for-each에 대해서 쉽게 이해하기 



 



 for-each


: jdk 1.5 이후에 추가 된 문법이다. 따로 키워드가 있는 것은 아니다. 기존의 for문을 그대로 사용한다. 



코드의 가독성이 좋아지고, 반복자나 변수를 사용하지 않아 오류 가능성을 없앤다. 



/**
*
* @author hoTire
*
*/

for (int i = 0; i < 10; i++) {
System.out.println(list.get(i));
}
    
for (Integer integer : list) {
System.out.println(integer);
}


아래가 for-each 방법이다. 


for-each를 구현하기 위해선 


public interface Iterable<T> {
/**
* Returns an iterator over elements of type {@code T}.
*
* @return an Iterator.
*/
Iterator<T> iterator();
}


Iterable 인터페이스를 implements 구현하면 된다. 







성능 차이




@Benchmark
    public void testFor() {
        int[] classicFor = new int[200000000];
        int size = classicFor.length;
        int a;
        for (int i = 0; i< size; i++) {
            a = classicFor[i];
        }
    }
    
    @Benchmark
    public void testFor2() {
        int[] classicFor = new int[200000000];
        int a;
        for (int i = 0; i< classicFor.length; i++) {
            a = classicFor[i];
        }
    }
    
    @Benchmark
    public void testForEach() {
        int[] forEach = new int[200000000];
        int a;
        for (int n : forEach) {
            a = n;
        }
    }

Benchmark Mode Cnt Score Error Units
MyBenchmark.testFor avgt 5 390.766 ± 42.219 ms/op
MyBenchmark.testFor2 avgt 5 418.466 ± 219.746 ms/op
MyBenchmark.testForEach avgt 5 386.739 ± 47.636 ms/op

 


for문 안에 size나 length를 알아내는 코드가 있다면 느리다. 

계속해서 lenght, size를 알아내는 비용이 발생한다. 


크기가 크면 클수록 for-each가 빠르다. 

JIT컴파일러가 최적화를 하기 때문이다. 







이렇게 좋은 for-each를 사용하지 못할 때가 있다.


1. 필터링(filtering) : 순회하는 도중 특정한 원소를 삭제해야할 경우 


2. 변환(transforming) : 순회하는 도중 원소의 값을 수정해야할 경우


3. 병렬순회(parallel iteration) : 병렬적으로 순회할 경우 



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

JAVA 관련 사이트 기술 커리큘럼  (0) 2018.07.25
스트레티지 패턴  (0) 2018.07.23
JAVA 싱글턴 패턴  (0) 2018.07.19
자바 interface(인터페이스)  (0) 2018.07.18
JAVA 상속(Override) 재정의, super  (0) 2018.07.17
싱글턴 패턴

소프트웨어 디자인 패턴에서 싱글턴 패턴(Singleton pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 이와 같은 디자인 유형을 싱글턴 패턴이라고 한다. 주로 공통된 객체를 여러개 생성해서 사용하는 DBCP(DataBase Connection Pool)와 같은 상황에서 많이 사용된다.


예제는 아래와 같다.



싱글턴 패턴은 데이터타입을 자신의 클래스로 한다. 객체를 생성하지 못해서(객체 접근 안되도록 private로 막음) 객체를 생성하기 전 클래스 생성 단계(static)으로 자기 자신을 생성해서 리턴해 주어야한다. 즉 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나가 된다(하나의 객체를 전역적으로 공유해서 쓴다)

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

스트레티지 패턴  (0) 2018.07.23
Java for-each 쉽게 이해하기  (0) 2018.07.19
자바 interface(인터페이스)  (0) 2018.07.18
JAVA 상속(Override) 재정의, super  (0) 2018.07.17
자바 Static 변수  (0) 2018.07.16

윈도우 파이썬에서 pip 사용시 cmd 관리자 권한으로 실행 후 pip 사용


http://ngee.tistory.com/336?category=662804


import pymongo

connection = pymongo.MongoClient("localhost", 27017)

db =connection.local

collection =db.users

rows=collection.find()

print(rows)

row=collection.find_one() //맨처음 것을 보고 싶을때사용

print(row)

collection.insert_one({"id":77,"name":"안녕","password":0})

// 하나를 삽입

results = collection.find()

for result in results:

    print(result)

//컬렉션(테이블) 내의 모든 값들 출력

collection.update_many({'id':'up33' },{"$set":{'id':77,'name':'hi'}},upsert=True)

업데이트 연산자를 지정해줘야 한다. $set <- 업데이트 연산자(?) 뭐지



http://brownbears.tistory.com/282

몽고디비 참고 사이트중에서 설명 가장 잘되어있음


DeprecationWarning: insert is deprecated.

 Use insert_one or insert_many instead.

insert는 더이상 사용되지않습니다.

insert_onde 이나 insert_many를 대신에 사용하세요


DeprecationWarning: update is deprecated.

 Use replace_one, update_one or update_many instead.

insert와 동일


=================5월 16일에 보기===========

https://velopert.com/594

https://velopert.com/436

몽고디비 !!


몽고디비는 컬랙션을 만들때 데이터의 사이즈를 결정해 줄 수 있다.

사이즈 결정시 그 사이즈 이상이 넘으면 가장 오래된 데이터를 삭제한후 삽입된다.

https://www.youtube.com/watch?v=m5k0RGd5rSI&index=33&list=PL9FpF_z-xR_GMujql3S_XGV2SpdfDBkeC


https://docs.mongodb.com/v2.4/reference/method/db.collection.find/

2.4버전에서의 Mongodb 사용방법

안드로이드 Node.js 연결

GET 방식

http://gakari.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-Nodejs%EC%84%9C%EB%B2%84%EB%A1%9C%EB%B6%80%ED%84%B0-GET%EB%B0%A9%EC%8B%9D%EC%9C%BC%EB%A1%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC-%EB%B0%9B%EA%B8%B0?category=414830


POST 방식

http://gakari.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-Nodejs%EC%84%9C%EB%B2%84%EB%A1%9C-POST%EB%B0%A9%EC%8B%9D%EC%9C%BC%EB%A1%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC-%EB%B3%B4%EB%82%B4%EA%B8%B0


nodejs 라즈베리 LED 제어

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


nodejs로 라즈베리 캠 제어

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


nodejs로 온습도 센서 보기

http://www.modulabs.co.kr/ModuIoT/4829

https://nodejs.org/ko/docs/guides/timers-in-node/

https://blog.naver.com/chandong83/221144142343

날씨



https://developer.yahoo.com/weather/?guccounter=1

어느 데이터를 가지고 올수 있는지 확인 할수있다

json 데이터 가져오는 방법. 

pprint(result.query.results.channel.item.forecast)

forecast의 키를 가지는 item의 키를 가지는 channel의 키를 가지는 

results의 키를 가지는 query의 키를 가지는 result를 찾아 불러온다..



https://blog.kjwon15.net/2017/11/27/yahoo-weather-api/

야후 날씨



https://developer.yahoo.com/weather/documentation.html

야후 날씨 코드



https://www.youtube.com/watch?v=XQHNrJ_3Rjc

파이썬 기상청

Node.js 설치부터 DB까지

https://javafa.gitbooks.io/nodejs_server_basic/content/chapter1.html



Node js와 몽고디비로 블로그 만들기

http://supdev.tistory.com/37

http://html5around.com/wordpress/tutorials/node-js%EB%A1%9C-%EA%B0%84%EB%8B%A8%ED%95%9C-%EA%B2%8C%EC%8B%9C%ED%8C%90-%EB%A7%8C%EB%93%A4%EA%B8%B0/



Node js 이메일

https://blog.naver.com/cck223/220982251294



node.js mongodb 연동 및 웹에 json 형식으로 데이터 보여주기

http://junnyproject.tistory.com/m/70

http://itpangpang.xyz/269?category=585481

web storm 5월 4일 1달간 무료로 사용 시작함.


https://blog.naver.com/kuhas2011/220596422744

무료 서버 호스팅


2018년 5월 5일 어린이날

node js 강의 7장 ch02 까지 완료 path 내장모듈 사용해서 파일의 경로를 자유자재로 사용 가능

객체 안에 함수 할당 가능 !!

13장 까지 완료 push,pop 내부함수 중요! callback 함수도 중요!


2018년 5월  7일 nodejs 유튜브 25장 까지 완료

콜백함수 .... 앞에 것이 되면 뒤에 함수 실행

express로 웹서버 만들기


2018 5월 8일 nodejs get 과 post로 클라이언트와 서버간에 데이터를 주고받을수있다.


2018 5월 9일

클라이언트가 데이터를 전달하고 싶은 방법 3가지

get 방식:query

post방식 :body

url 안에 넣어서 보내는 방식(path안에 포함) : params

ch05-13 까지 강의 완료

쿠키와 세션---> 자동으로 로그인 


2018년 5월 10일

ch05 모든 강의 완료 파일업로드 기능 해봤지만 에러뜸

다음 ch06은 몽고DB를 이용한 node js와 DB의 연결. DB를 사용해보기 전 node js의  기능들을 더 숙달해 봐야할듯 싶다


2018년 5월 11일

mongdb와 nodejs 연결 도중 db.collection is not a function에러

--->mongodb 버전 3.0이상을 사용할 때는, connection을 할 때에 database명을 명시해야 한다는 것이다.

3.0 버전 이후부터는 database 오브젝트를 가지고있는 클라이언트 오브젝트를 반환해주기때문에

db = database.db('local'); <----이렇게 해줘야 한다.


-----------------예시----------------------

var database;


function connectDB() {

    var databaseUrl = 'mongodb://localhost:27017/local';


    MongoClient.connect(databaseUrl,function (err,db) {

        if(err){

            console.log('데이터베이스 연결 에러 발생');

            return;

        }

        console.log('데이터베이스에 연결됨 : '+databaseUrl);

        database = db.db('local');

    });

}

----------------예시-----------------------

http://preamtree.tistory.com/109


mongoose 외장 모듈 사용시 UserShema와 UserModel을 선언해준다. 

UserShema은 테이블을 정의하는것과같다탇 UserModel은 데이터를 조작한다.

6-8까지 완료


2018년 5월 12일

C:\Program Files\MongoDB\Server\3.6\bin 들어가서

mongod --dbpath /Users/kim/database/local 마우스 오른쪽으로 복사 붙여넣기 실행

C:\Users\kim 에서 mongo 실행 완료..


/public 안에 html 파일의 버튼 액션

<form method="post" action="/process/adduser">

이 js파일의 router.route('/process/adduser') 과 같아야지 route안으로 들어와

동작하게된다.

https://www.youtube.com/watch?v=iXkl5lwjsD8&index=25&list=PLuHgQVnccGMBnrdKRODJmbH7UZ2A48LBK

query 사용예제


-get방식 사용 : 링크 클릭했을때 주소가 바뀌길 원하면( 복사 할때 친구한테 주소 복사해줄때)

쿼리 스트링으로 데이터를 전송!! <- 중요

express가 기본적으로 제공!


-post방식 사용:아이디와 비밀번호를 입력하려고 했을때 만약 get방식이면

아이디와 비밀번호가 url상에 나타나기 때문에 id,password를 복사하면

큰일난다. 그래서 url상에 나타나지 않는 방식인 post 방식을 사용하는게 맞다.

url상에 엄청나게 많은 데이터가 있으면 길이가 너무 길어진다 그래서 post방식을 쓰기도 한다.

데이터가 암시적으로 사람의 눈에 보이지 않게 전송<-중요!

express가 기본적으로 제공하지 않아서 미들웨어(body-parser)을 lead하고

app.use(bodyParser.urlencoded({extended:false}));

한다음 req.body에서 데이터를 받을 수 있다.


생활코딩 node js 34강까지 완료...

http://expressjs.com/ko/

express 설명들 있음


5월 19일

http://luckyyowu.tistory.com/346

req,res 객체 정리

router 안에서 res.write와 res.redirect를 같이 쓸수없다

이유는 다른한개가 버퍼에 저장되면 뒤에꺼를 잡아먹고 버퍼로 가기때문이다

res.write('<script>alert("패스워드가 틀립니다.");location.href="/views/login.html";</script>');

이렇게 해야한다.


5월 20일

static을 사용하면 따로 함수를 선언 않해주고도 router에서  사용할수있다

제 6강의 마지막 부분은 비밀번호를 암호화하는 부분이고 MYSQL과 NODEJS

를 연동하는 부분이기 때문에 넘어감

제 7-1강 부터 시작 exports사용

exports는 한계가 있음 exports 전역객체 설정

exports에다가 속성을 추가하는게 아니라 exports에 객체를 바로 할당

하면 문제가 생김

exports를 사용할때에는 무조건 속성으로 추갛해줘야한다.

그래서 module.exports를 사용한다.



5월 21일

http://supdev.tistory.com/37

php에서 php와 같은 역할은 하는 ejs 라는것을알았다


5월 22일

list를 js파일에서 ejs로

이제 views/listuser.html에서가 아닌 board.html 에서 조회 클릭시 데이터를

보여주게 ..... 

내일 할거 게시판 글 삭제.. 팀원소개 앞에꺼.... 


5월 23일

좋은거 알았다.https://getbootstrap.com/docs/4.1/examples/blog/

부트스트랩!

https://hidelryn.com/view/6

몽고디비 업데이트 delete


5월 25일 

iot 데이터 과제 index.html 파일 읽어오는 코드랑 app2.js 에서

 fs.writeFile('a.txt','weather: '+input2+'\n'+input,'utf-8',function(e){


        });

추가 해야함


5월 26일

NODE JS 

https://www.youtube.com/watch?v=SGU_UMDVEdM

여기서 동영상 강의 듣자 개념 완벽하지 않은거 여기서 보완할수 있을듯하다.

node js나 다른언어를 배울때도 책을 통해서 배우는 것이 좋아보인다


5월 29일

nodejs에서 context라는 객체의 값을 확인 하고 싶을때

console.log('context :',context); 하면 객체가 가진 값 확인 가능

사용자 행동 로그남기기 http://thesunrises.tistory.com/950


6월 1일

https://www.youtube.com/watch?v=PNtsOqW4wnE

6강

https://www.youtube.com/watch?v=HILKjcFePOA 

7강 여기있음


6월 2일

비동기 방식의 nodejs를  순차적으로 실행하기 위해서 async 를 쓴다.

async.series([ 태스크1, 태스크2, 태스크3],function(err,results){완료콜백});


https://www.youtube.com/watch?v=_kH7JJqe3lo

10강


6월 3일

https://www.youtube.com/watch?v=_kH7JJqe3lo

10강에서 JSON에 대해서 강의.

JSON은 V8 내장 클래스로서 모듈 로딩이 불필요하다.

JSON을 생성하는 코드는 JSON.stringfy()

JSON을 파싱하는 코드는 JSON.parse()


rest api

url 가져와서 그 url을 분석한뒤 사용자가 원하는 걸 보여줄수있다.

json과 xml 을 사용한다.


app.use('/public',static(path.join(__dirname,'public')));

(앞)public 경로를 요청하면 (뒤)public이라는 파일안에서 찾아서 있으면 요청에 답해준다.


로그 남기기 쉽게해주는 모듈 : morgan

다양한 형태로 로그 남기기: winston --> 별도의 transports(DailyRotateFile, MongoDB 등)

HTML METHOD 에서 GET이랑 POST 말고 다른거 쓰고싶으면 --> METHOD OVERRIDE 모듈씀

15강 까지 완료


6월 6일

https://opentutorials.org/module/938/7373

fs 모듈 read,write, 예외 처리



JAVA 백준 4948번 베르트랑 공준


이번 문제는 전에 풀었던 1929번 문제를 살짝 바꿔주기만 하면 된다.

http://oper6210.tistory.com/56?category=806896



자바 백준 1929번 소수 구하기


 저번에 풀었던 백준 2581번 소수 코드를 그대로 사용하였지만 조건이 10000(만)에서 1000000(백만)으로 확 커지는 바람에 시간 초과 오류가 발생하였다. 

그래서 더욱더 간단하게 할 수 있는 코드를 찾아내었다.

백만 까지의 값을 int형 배열에 넣어주고 맨처음 2부터 2씩 증가하는 값들의 배열 값을 0으로 만들어주고 그 후로도 i의 값이 1씩 증가하는 값들을 그 크기 만큼 더하며 그 위치 값을 0으로 만들어준다. 이렇게 하면 처음에는 백만번째까지의 2의 배수 배열들 값이 0이 되고 3의 배수 배열들 값이 0, 4의배수..... 이렇게 커지게 된다.

배열 값이 0이면 continue를 통해 다음 값으로 넘어간다.

이렇게 해서 만든 코드이다.



자바 Interface 문법


0.인테페이스는 작업 명세서(작업 지시서) 라고 불린다. 

1.인터페이스는 상수와 추상메소드만 존재 한다.

2.자바는 다중 상속(extends)는 불가하지만 인터페이스는 여러개의 클래스를 imprement(다중 구현) 가능하다.

3.인터페이스 안의 추상 메소드를 각각 재정의 해서 사용해야 한다.


객체 타입으로 인터페이스로 사용 할 수있다. ==> 배열의 타입으로 사용할 수 있다.

  


  3개의 데이터타입을 하나로 묶어주는 Toy


 PoohToyClass를 다양한 형식의 타입으로 나타낼 수 있다. (다형성)



인터페이스와 추상클래스의 공통점과 차이점


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

Java for-each 쉽게 이해하기  (0) 2018.07.19
JAVA 싱글턴 패턴  (0) 2018.07.19
JAVA 상속(Override) 재정의, super  (0) 2018.07.17
자바 Static 변수  (0) 2018.07.16
리펙토링(Refactoring)의 원칙과 정의  (0) 2018.07.16

+ Recent posts