달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
반응형

String객체에 연산을 하게되면 기존 String 객체에 크기가 늘어나는 것이 아니라

새로운 객체를 만들어 연산한 값을 넣는 방식입니다. 이는 연산 과정이 많을 수록 Heap 메모리 부하를 가져오죠.

이를 해결하기 위해 StringBuilder와 StringBuffer를 사용하게 됩니다. 이 둘은 연산 시 객체의 크기를 유동적으로 변경하기 때문에 String 연산의 단점을 해결했습니다. (객체의 크기가 늘어날 때는 기존크기*2)

StringBuilder와 StringBuffer의 차이는 동기화에 있습니다. StringBuffer는 동기화를 제공하는 대신 StringBuilder 보다는 속도가 느리죠. 스레드와 관련이 있다면 StringBuffer를, 없다면 StringBuilder를 사용하는 것을 권장 합니다. 

 

단순 성능 : StringBuilder > StringBuffer >>> String



출처: https://aljjabaegi.tistory.com/388?category=580127 [알짜배기 프로그래머]

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

출처 : yuhe-dogspaw.tistory.com/199

 

[java] String 배열을 int 배열로 바꾸는 방법

참고 https://zetawiki.com/wiki/%EC%9E%90%EB%B0%94_String_%EB%B0%B0%EC%97%B4%EC%9D%84_int_%EB%B0%B0%EC%97%B4%EB%A1%9C_%EB%B3%80%ED%99%98 자바 String 배열을 int 배열로 변환 - 제타위키 다음 문자열 포함..

yuhe-dogspaw.tistory.com

zetawiki.com/wiki/%EC%9E%90%EB%B0%94_String_%EB%B0%B0%EC%97%B4%EC%9D%84_int_%EB%B0%B0%EC%97%B4%EB%A1%9C_%EB%B3%80%ED%99%98

 

자바 String 배열을 int 배열로 변환 - 제타위키

다음 문자열 포함...

zetawiki.com

https://stackoverflow.com/questions/6881458/converting-a-string-array-into-an-int-array-in-java

 

Converting a String array into an int Array in java

I am new to java programming. My question is this I have a String array but when I am trying to convert it to an int array I keep getting java.lang.NumberFormatException My code is private void

stackoverflow.com

String[] strings = {"1", "2", "3"};

int[] nums = Arrays.stream(strings).mapToInt(Integer::parseInt).toArray();

 

String[] strings = {"1", "2", "3"};

int[] nums = Arrays.asList(strings).stream().mapToInt(Integer::parseInt).toArray();


스트림 Streams

자바 8에서 추가한 스트림(Streams)은 람다를 활용할 수 있는 기술 중 하나입니다. 자바 8 이전에는 배열 또는 컬렉션 인스턴스를 다루는 방법은 for 또는 foreach 문을 돌면서 요소 하나씩을 꺼내서 다루는 방법이었습니다. 간단한 경우라면 상관없지만 로직이 복잡해질수록 코드의 양이 많아져 여러 로직이 섞이게 되고, 메소드를 나눌 경우 루프를 여러 번 도는 경우가 발생합니다.

## 자바 8 이전 ## 

private void processLine(String[] strings) {

   Integer[] intarray=new Integer[strings.length];

   int i=0;

   for(String str:strings){

      try {

         intarray[i]=Integer.parseInt(str); i++;

      } catch (NumberFormatException e) {

         throw new IllegalArgumentException("Not a number: " + str + " at index " + i, e);

      }

   }

}

 

스트림은 '데이터의 흐름’입니다. 배열 또는 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있습니다. 또한 람다를 이용해서 코드의 양을 줄이고 간결하게 표현할 수 있습니다. 즉, 배열과 컬렉션을 함수형으로 처리할 수 있습니다.

또 하나의 장점은 간단하게 병렬처리(multi-threading)가 가능하다는 점입니다. 하나의 작업을 둘 이상의 작업으로 잘게 나눠서 동시에 진행하는 것을 병렬 처리(parallel processing)라고 합니다. 즉 쓰레드를 이용해 많은 요소들을 빠르게 처리할 수 있습니다.


스트림의 주요 기능

 

메소드명 

설명 

 of

 지정된 값으로부터 Stream 생성 

 count

 Stream의 요소의 수를 반환 

 distinct

 Stream의 요소의 중복 제거 

 forEach

 Stream의 요소에 대한 반복 

 filter

 Stream의 요소에 대한 필터링 

 concat

 2개의 Stream을 연결 

 map

 Stream의 요소를 변환 

 mapToDouble

 Stream의 요소를 double형으로 변환해 DoubleStream 반환 

 mapToInt

 Stream의 요소를 int형으로 변환해 IntStream으로 반환

 mapToLong

 Stream의 요소를 long형으로 변환해 LongStream으로 반환

 floatMap

 Stream의 요소를 변환하고 요소를 정리

 allMatch

 Stream의 모든 요소가 조건을 충족하는지 확인

 anyMatch

 Stream의 요소가 1개라도 충족하는지 확인

 noneMatch

 Stream의 모든 요소가 충족하지 않는지 확인

 reduce

 Stream의 요소 집계

 sum

 Stream의 요소 합계

 sorted

 Stream의 요소 정렬

 collect

 Stream 요소의 집계 처리와 컬렉션 변환 등

 toArray

 Stream을 배열로 변환

 iterate

 무한값을 반환하는 Stream 생성

 limit

 지정한 건수만큼 반환

 parallelStream

 순차처리 Stream을 병렬 처리할 수 있는 Stream을 구함

 sequential

 병렬 처리가 가능한 Stream을 순차처리 Stream으로 구함


Stream 형태를 배열로 변환 할 경우, toArray로 쓰시면 됩니다.

IntStream으로 되어 있으므로, toArray를 할 경우 int형태의 배열이 생성 됩니다.

 



참고자료

https://aljjabaegi.tistory.com/397

 

Java 8 Stream 을 사용해보자. About Stream in collection of java8

Java 8 Stream 을 사용해보자. About Stream in collection of java8 Java 8 버전 부터 컬렉션 프레임워크에 Stream 인터페이가 추가되었습니다. 이를 사용해 컬렉션 데이터의 변환, 필터링, 집계등의 처리를 간결..

aljjabaegi.tistory.com

https://futurecreator.github.io/2018/08/26/java-8-streams/

 

Java 스트림 Stream (1) 총정리

이번 포스트에서는 Java 8의 스트림(Stream)을 살펴봅니다. 총 두 개의 포스트로, 기본적인 내용을 총정리하는 이번 포스트와 좀 더 고급 내용을 다루는 다음 포스트로 나뉘어져 있습니다. Java 스트�

futurecreator.github.io

 

Java 8 Stream 을 사용해보자. About Stream in collection of java8

출처: https://aljjabaegi.tistory.com/397 [알짜배기 프로그래머]

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

[개발툴][Log4j] 로그4J properties 설정법.개발툴

2012/11/21 17:53

복사http://blog.naver.com/skykingkjs/150152227953

전용뷰어 보기

로그4J 라이브러리 임포트 과정은 생략함니다.

 

로그4J가 import된 프로젝트의 Src 폴더에 아래와같은 파일을 생성함니다

 

log4j.properties

 

이제 log4j가 업무를 수행할때 해당 파일에 들어있는 환경변수들을 사용하여 출력 함니다.

 

log4j.properties 파일 내부데이터로 들어가겠습니다.

 

먼저 출력 객체의 선언 임니다.

 

두가지 객체 선언 방법이 있습니다.

log4j.rootLogger

 

log4j.logger.

 

전자의 경우 rootLogger로서 해당 프로젝트내에서 발생하는 로그업무를 모두 출력 합니다.

(레벨별 제한은 물론 함니다.)


후자의 경우 logger 뒤에 '.' 가 있는데. 해당 프로젝트내의 특정 패키지를 계속 이어붙임니다.
ex) log4j.logger.baeseulki.seul

이렇게하면 저 패키지에서 일어나는 로그업무에 대해서만 처리함니다.

객체선언의 마지막 할당 입니다.

log4j.rootLogger = debug, hoho, haha
log4j.logger.baeseulki.seul = info, seul, kikiki

오른쪽에 1번째 변수는 출력해줄 경보레벨의 제한임니다.
info의 경우 debug.info.warn.err.fatal 에서 debug는 출력되지 않습니다.

2번째 이상부터는 객체 명임니다. 아래에서 객체명을 통해서 로그의 출력방법, 출력 형식등을 설정함니다.

즉 현재 루트로거에는 hoho와 haha방식으로 출력한다고 보면 되겠습니다.

두방법 다 사용하면
두방법다 객체에 지정한 방법대로 출력함니다. 이제 출력 객체 설정에 들어감니다.


출력 객체로의 접근방법은 다음과 같습니다.

log4j.appender.객체명.객체의 속성값 = 속성에 적용할 값

객체명은 hoho , seul, 과 같이 우리가 생성한 객체입니다.
속성값은 file 같이 정해진 특정 속성입니다.
file 속성은 출력할 파일명을 말함니다.
ex) log4j.appender.hoho.file = c/log/hoho.log

일단 객체의 출력 방법부터 설정합시다. 출력 방법의 경우 속성값이 없습니다. 객체 자체에 넣습니다.

og4j.appender.객체명 = 출력방식

출력방식은 정해진 값들이 있습니다.
org.apache.log4j.ConsoleAppender //콘솔창에 출력
org.apache.log4j.DailyRollingFileAppender //파일에 출력

ex) log4j.appender.hoho = org.apache.log4j.DailyRollingFileAppender


layout 속성은 출력한 스타일을 표현함니다. 2중으로 사용함니다.
일반적인 PatternLayout을 사용함니다.

세부적인 내용은 layout.ConversionPattern 에 추가로 설정합니다.
아래와같이 함니다.

log4j.appender.hoho.layout=org.apache.log4j.PatternLayout
log4j.appender.hoho.layout.ConversionPattern=[%d] %-5p %l - %m%n

아래 패턴에 들어가는 내용은 프로그램상에서
private static Logger logger = Logger.getLogger(seul.class);
logger.debug("슬슬");

여기 들어간 슬슬 이라는 출력 내용을 ConversionPattern 의 형태로 변경하여 출력 함니다.
Pattern의 %? 값들의 내용은 다음과 같습니다.

%p : 호출명(ex DEBUG, INFO, WARN, ERROR, FATAL)
%n : 줄바꿈
%m : 매개변수 메세지
%t : 스레드
%F : 실행파일명
%M : 수행 메소드
%L : 라인????넘버
%d : 날짜


log4j.appender.hoho.DatePattern='.'yyyy-MM-dd
// 매일 자정에 로그파일을 교체하며 기존파일은 xx.log_2004.07.12

log4j.appender.hoho.Threshold=DEBUG
//출력할 정보의 최소단위.


소스

log4j.rootLogger = info, stdout, dailyfile

log4j.stdout = false
log4j.debug = false

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p ({%t} %F[%M]:%L) [%d] HIHI- %m%n

log4j.appender.dailyfile.Threshold = ERROR
log4j.appender.dailyfile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyfile.File = c:\\log\\logfile.log
log4j.appender.dailyfile.layout = org.apache.log4j.PatternLayout
log4j.appender.dailyfile.layout.ConversionPattern=%5p ({%t} %F[%M]:%L) [%d] - %m%n

log4j.appender.dailyfile.DatePattern ='.'yyyy-MM-dd


log4j.logger.log4j.bae=DEBUG, BAE
log4j.appender.BAE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.BAE.File=C:/logs/BAE.log
log4j.appender.BAE.DatePattern='.'yyyy-MM-dd
log4j.appender.BAE.Threshold=DEBUG
log4j.appender.BAE.layout=org.apache.log4j.PatternLayout
log4j.appender.BAE.layout.ConversionPattern=[%d] %-5p %l - %m%n

log4j.logger.log4j.hehe=INFO, HEHE
log4j.appender.HEHE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.HEHE.File=C:/logs/HEHE.log
log4j.appender.HEHE.DatePattern='.'yyyy-MM-dd
log4j.appender.HEHE.Threshold=DEBUG
log4j.appender.HEHE.layout=org.apache.log4j.PatternLayout
log4j.appender.HEHE.layout.ConversionPattern=[%d] %-5p %l - %m%n
반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

출처: http://sibnt.net/163

오라클 홈페이지에 접속합니다. (http://www.oracle.com)

접속 후 Downloads > Java for Developers 클릭

Java SE Downloads 에서, Java Platform (JDK) 7u45 클릭

내 컴퓨터가 32비트 컴퓨터라면, Windows x86에 해당하는 파일은,

64비트라면, Windows x64에 해당하는 파일을 다운로드 받으세요.

64비트인지, 32비트인지 확인하는 방법은, 내컴퓨터를 마우스 오른쪽버튼 클릭 → 설정으로 들어가서 보시면, 확인할 수 있습니다.

파일 다운로드가 완료되었다면, 다운로드된 파일을 실행시켜서 설치하시면 됩니다. (설치 과정은 생략)

설치가 완료되었다면 이제 환경변수를 설정해야 합니다.

javac명령어와 java명령어를 어느 위치에 있든 경로명을 지정하지 않고 사용하기 위해서 환경변수를 설정합니다.

환경변수설정은 내컴퓨터를 오른쪽 버튼으로 클릭하고 속성에 들어가면, 위의그림과 같이 설정변경이 있습니다.

설정변경을 클릭합니다.

고급메뉴로 들어가서 아래부분의 환경변수를 클릭합니다.

시스템 변수 중 Path라는 변수를 찾아서 편집버튼을 클릭합니다.

java.exe와 javac.exe가 있는 경로를 찾아서 ;(세미콜론) 뒤에 붙여줍니다.

제 컴퓨터 기준으로는 C:\Program Files\Java\jdk1.7.0_40\bin 가 되겠습니다.

여기까지 설정을 하면 자바프로그램을 컴파일하고 실행할 수 있게 됩니다.

시작메뉴를 클릭하면 프로그램 및 파일 검색란이 있습니다.

이곳에 cmd를 치고 엔터를 누르시면 도스창이 뜨게됩니다.

도스창에 javac를 입력하시면 위와 같은 메세지가 뜨는데 캡처한 화면과 같이 뜬다면 제대로 설치가 되고 설정이 된 것입니다.

만약 위와 같은 메세지가 뜬다면 환경변수를 잘 못 설정 했을 가능성이 큽니다.

JDK설치 끝.

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형
반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

<File 클래스>

파일 클래스는 파일명 자체를 표현함과 동시에, 파일과 디렉토리를 다루기 위한 클래스 이기도 하다.
File 클래스를 이용하기 위해서는 java.io 패키지를 임포트 해야한다.

메서드명 : 기능 : 사용법("OO.txt" 는 파일명, "dir" 은 디렉토리명)
생성자 : 파일명 초기화 : File f = new File("file.txt");
getAbsolutePath() : 파일 또는 디렉토리의 절대경로명을 가져온다 : File f = new File("file.txt"); String a = f.getAbsolutePath();
isAbsolute() : 절대경로명인지 판단한다 : File f = new File("file.txt"); boolean a = f.isAbsolute();
list() : 디렉토리에 있는 파일과 디렉토리를 문자열로 가져온다 : File d = new File("dir"); String [] b = d.list();
mkdir() : 디렉토리를 만든다 : File d = new File("dir"); boolean a = d.mkdir();
delete() : 파일 또는 디렉토리를 삭제한다 : File f = new File("file.txt"); boolean a = f.delete();
renameTo() : 파일명 변경하기 : File f1 = new File("file1.txt"); File f2 = new File("file2.txt"); boolean a = f1.renameTo(f2);
isFile() : 파일인지 아닌지 판정한다 : File f = new File("file.txt"); boolean a = isFile();
isDirectory() : 디렉토리인지 아닌지 판정한다 : File d = new File("dir"); boolean a = d.isDirectory();
exists() : 파일 또는 디렉토리가 존재하는지 확인 : File f = new File("file.txt"); boolean a = f.exists();

첨부적으로 설명을 덧붙이자면..
php 코딩을 해본 사람이나, 파일관련 프로그램을 짜본 사람은 어느정도 감을 잡을 것이다.
윈도우 운영체제에서는 파일이나 폴더의 개념이 구분되어 있어서,
일반적으로 사람들은 폴더안에 파일이 들어 있을거라는 생각을 하는데,
파일관련 프로그램을 짜다보면, 폴더 또한 파일처럼 취급하는 것을 알 수 있다.

정확한건 아니지만,
나의 생각으로는,
그렇다, C 프로그램에서 실제 그 변수가 아닌데 그 변수인것처럼 참조(별명)를 사용하듯이,
혹은, 단지 그 주소만을 지칭하듯이,
폴더라는 것은 실제로 무엇을 담고 있다기 보다는, 어떤 파일들이 그 폴더라는 분류에 의해 분류 될 수 있도록
지정된 일종의 분류명일 뿐이다.
즉, 물리적으로 파일을 담고 있는것이 아니라, 파일을 담고 있는것처럼 보여지는 참조정보일 뿐이라는 것이다.
따라서, '폴더' 또한 '파일' 의 일종일 뿐이라는 것이다.
그런데, 유닉스 계열(리눅스) 에서 프로그래밍을 한 사람이면 이런 개념이 일찍부터 서 있을것 같은데,
윈도우의 GUI 가 워낙 잘 되어 있다보니, 약간의 개념의 혼돈이 오는것 같다.

파일클래스의 실전 응용에 대한 것은 워낙 범위가 광대하기 때문에,
차후에 관련 프로그램을 짤 경우에 첨부파일과 함께 설명을 덧붙이기로 하고,
여기서는 생략한다.

반응형
Posted by 친절한 웬디양~ㅎㅎ
|