자바 함수 가변 인자 사용 방법



java로 프로그램 작성 중 함수 인자를 여러개 받아야 할 경우가 있다. 예를 들어 System.out.printf 함수 이용시 인자 값이 1개 혹은 2,3.. 이상으로 넣는 것 처럼 말이다. 사용자 함수를 만들 때도 이렇게 인자를 여러개 받는 방법에 대해 알아보도록 하겠다.

 

가변 인자 사용 방법



가변 인자사용예는 아래와 같다. 언제나 예제를 바로 보고 실행 해보는 것이 가장 이해가 빠르다. (복사 붙여넣어 테스트 해보자)


public class factor {

static String conString(String... args) {

      String result = "";

      

      for(String str : args){

           result += str ;

      }

      

      return result;

}

public static void main(String[] args) {

String str1 = "Hello";

String str2 = " World";

String str3 = " Welcome";

String str4 = " !!!";

String result = conString(str1, str2, str3, str4);

System.out.println("result : " + result );

}

}


[가변 인자 함수 만드는 방법]

String conString(String... args); // 인자 부분에 ...을 넣어 가변 인자 사용을 알린다. String 형으로 여러개의 인자를 받을 수 있다.


[가변 인자 함수 사용 방법]

String result = conString(str1, str2, str3, str4 ); // String 형 인자를 4개를 넣었지만 4개가 아닌 1,2...5개등 다양하게 테스트 해봐도 함수는 동작 한다.


반응형

'프로그램 > Java' 카테고리의 다른 글

[java] 파일 읽고,쓰기 사용법  (0) 2018.05.30
[java] 스레드 사용법  (0) 2018.05.27
[java] Random 사용법  (0) 2018.05.24
[java] sleep 사용법  (0) 2018.05.23
[java] printf 와 지시자  (0) 2018.05.22

[java] Random 사용법



java에서 난수 발생(Random) 방법에 대해 알아보겠다. 난수는 일정 범위 안에 아무 값을 발생 시키는 것을 의미한다. 예를 들어 범위를 0~9안에

난수 발생을 호출 할 때마다 0,1,2~8,9 아무 값이나 계속 다른 값이 나오게 된다.

 

Random 사용 예제



random 사용예는 아래와 같다.


import java.util.Random;


public class RandomMain {


public static void main(String[] args) {

//Random 클래스 객체 생성

Random r = new Random();

//사용자 지정한 값으로 랜덤값 추출 ( 0~9)

int value = r.nextInt(10);

System.out.println("value : " + value);

//int 범위 내에서 랜던값 추출

value = r.nextInt();

System.out.println("value : " + value);

}

}


nextInt에 인자를 넣지 않으면 int 범위내에 값이 발생한다. int 범위는 OS 마다 다르다. 인자 값을 넣으면 해당 수를 넘지 않은 범위에서 난수값이 발생 된다.


[import 할 클래스]

import java.util.Random;


[주요 함수]

Random r = new Random();

int value = r.nextInt(10); // value에 0~9까지 난수 값이 입력 된다.



반응형

'프로그램 > Java' 카테고리의 다른 글

[java] 스레드 사용법  (0) 2018.05.27
[java] 함수 가변 인자 사용 방법  (0) 2018.05.25
[java] sleep 사용법  (0) 2018.05.23
[java] printf 와 지시자  (0) 2018.05.22
[java] ServerSocket, Socket  (0) 2018.05.21

[java] sleep 사용법



프로그램 동작을 잠시 멈추기 위해 sleep 사용하는 방법에 대해 알아보겠다.  보통 CPU 점유을 다른 다른 프로세스나 스래드로 넘기기 위해 sleep을 사용 한다.

 

sleep 사용 예제



sleep 사용예는 아래와 같다.


public class Sleep {

public static void main(String[] args ) {

System.out.println("sleep 실행 전");

try {

Thread.sleep(1000); //1초 대기

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println("sleep 실행 후");

}

}


1000이면 1초다. sleep 인자 값에 적당한 시간 값을 넣어 주면 된다.


  try {

Thread.sleep(1000); //1초 대기

   } catch (InterruptedException e) {

e.printStackTrace();

   }




반응형

'프로그램 > Java' 카테고리의 다른 글

[java] 함수 가변 인자 사용 방법  (0) 2018.05.25
[java] Random 사용법  (0) 2018.05.24
[java] printf 와 지시자  (0) 2018.05.22
[java] ServerSocket, Socket  (0) 2018.05.21
[java] 다중 반복문 탈출 방법  (0) 2018.05.21

Iterator



어떠한 종류의 데이터 집합이 있다. 이 데이터를 조작, 검색 등을 하는 기능이 포함 되어있다. 이 중 검색 기능과 다른 기능이 뒤섞여 개발하면 클래스간의 결합도가 증가되어 코드가 보기가 어려워진다. Iterator 패턴을 이용해 검색 기능을 재사용 가능 하게 만들어 보자.


 

검색 기능을 재사용 하는 Iterator



Dvd 대여점이 있다. 이 대여점에 신작 Dvd가 추가되고 모든 Dvd를 데이터를 출력하는 것을 만들어 보겠다.



 이름

 해설

 Aggregate

 집합체를 나타내는 인터페이스 

 Iterator

 검색 실행하는 인터페이스 

 Dvd

 Dvd를 나타내는 클래스

 DvdStore

 Dvd 대여점을 나타내는 클래스 

 DvdStoreIterator

 Dvd 대여점을 검색하는 클래스 

 Main

 프로그램 시작 클래스 


[Aggregate]

public interface Aggregate {

public Iterator iterator();

}


[Iterator]

public interface Iterator {

public boolean hasNext();

public Object next();

}


[Dvd]

public class Dvd {

private String name;

public Dvd(String name) {

this.name = name;

}

public String getName() {

return name;

}

}


[DvdStore]

public class DvdStore implements Aggregate {

private Dvd[] Dvds;

private int last = 0;

public DvdStore(int maxsize) {

Dvds = new Dvd[maxsize];

}

public Dvd getDvdAt(int index) {

return Dvds[index];

}

public void appendDvd(Dvd dvd) {

Dvds[last] = dvd;

last++;

}

public int getLength() {

return last;

}

public Iterator iterator() {

return new DvdStoreIterator(this);

}

}


[DvdStoreIterator]

public class DvdStoreIterator implements Iterator{

private DvdStore dvdStore;

private int index;

public DvdStoreIterator( DvdStore dvdStore ) {

this.dvdStore = dvdStore;

index = 0;

}

public boolean hasNext() {

if ( index < dvdStore.getLength() )

return true;

else

return false;

}

public Object next() {

Dvd dvd = dvdStore.getDvdAt(index);

index++;

return dvd;

}

}


[Main]

public class Main {

public static void main(String[] args) {

DvdStore dvdStore = new DvdStore(5);

dvdStore.appendDvd(new Dvd("바람과 함께 사라지다."));

dvdStore.appendDvd(new Dvd("살인의 추억"));

dvdStore.appendDvd(new Dvd("바닷마을 다이어리"));

dvdStore.appendDvd(new Dvd("어벤져스"));

dvdStore.appendDvd(new Dvd("터미네이터"));


Iterator it = dvdStore.iterator();

while( it.hasNext() ) {

Dvd dvd = (Dvd)it.next();

System.out.println(dvd.getName());

}

}

}


이러한 복잡한 패턴을 왜 쓰냐고 반문 할 수 있을지 모른다.  이렇게 Iterator 검색 기능을 따로 분리 하지 않는다면 for문을 돌면서 배열로 검색해도 된다. 하지만 배열이 아닌 Vector나 다른 자료형으로 바뀌면 어떻게 되는가? 아마 처음부터 다시 프로그램 해야 될 것이다.  DvdStore에 배열로 되어 있는 부분을 Vector로 고쳐보면 다른 부분을 모두 재사용이 가능 할 것이다.


반응형

+ Recent posts