[JAVA]객체지향(11): 배열

ho's·2022년 4월 26일
0
post-custom-banner

배열의 메소드

copyOfRange


자바가 제공하는 Arrays 클래스는 static한 필드를 갖기 때문에, 메소드를 부를때 객체를 생성하지 않고 사용 할 수 있다.

char[] copyTo = java.util.Arrays.copyOfRange(copyFrom, 1,3); 

copyFrom의 배열의 index번호 1~2번까지 출력하는 코드

sort


sort역시 static 필드의 메소드이다. 반환값은 없고 오름차순으로 배열을 정렬한다.

binarySearch 메소드

binarySearch는 key값을 찾아주는 index를 반환한다.
binarySearch 메소드를 사용하기 위해서는 정렬이 먼저 우선시 되어야 한다.

클래스 배열

public class Array172 {
    public static void main(String[] args) {
    }
}

class Item{
    private String name;
    private int price;

    public Item(String name, int price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }
}
  • Item클래스를 생성
  • name과 price를 입력받을 수 있는 getter,setter메소드 입력
  • Item의 생성자 생성

객체를 정렬하고 싶으면 기준을 정해야 한다.

Comparable는 어떤 Item이 큰지, 작은지 기준을 정하는 interface이다.

위와 같이 items를 정렬을 하고 싶어서 Arrays.sort(); 를 이용했지만
오류가 발생했다. 그 이유는 items를 어떤 기준으로 정렬할 것인지 설정을 하지 않았기 때문이다.

-item 클래스에서 Comparable을 구현하고,
-interface Comparable에 있는 compareTo 메소드를 오버라이딩 한다.

정렬 방법을 정의하는 클래스 만들기

  • ItemSorter라는 클래스를 만든다.
  • compare 메소드를 오버라이딩한다.
  • 반환값이 int형태이고 메소드명이 compare를 정의한다.
  • 매개변수는 Object타입의 o1, o2이다.
  • Item1객체는 o1(Object타입)을 Item타입으로 형변환해준다.
  • Item2객체는 o2(Object타입)을 Item타입으로 형변환해준다.
  • return 값으로 item1.getName()과 item2.getName()을 비교한다.
    결과 값으로는 1, 0 , -1이 나온다.

이를 통해 외부에서 정렬하는 방법을 정의하고, 적용할 수 있다.

람다인터페이스

메소드가 하나만 있는 인터페이스를 람다인터페이스라고 한다.

과정을 보자

1) 외부에 클래스를 만들어 사용.

2) ItemSorter클래스를 외부에 따로 만들지 않고 아래와 같이 한번에 붙여 주자.

Arrays.sort(items, new ItemSorter());

위의 코드 대신 아래와 같이 변경하자.

Arrays.sort(items, new Comparator(){
});

3) 람다식으로 변경

Array.sort(items, new Comparator() {
	@Override
    public int compare(Object o1, Object o2) {
    	Item item1 = (Item) o1;
        Item item2 = (Item) o2;
        return item1.getName().compareTo(Item2.getName());
    }
});

Array.sort(items, (Object o1, Object o2) -> {
		Item item1 = (Item)o1;
        Item item2 = (Item)o2;
        return item1.getName().compareTo(item2.getName());
}
};

추가적으로 type을 입력하지 않아도 java내에서 처리해준다고 한다.

한번 더 추가적으로... return도 생략 가능하다.

완성! 코드가 더 깔끔해 졌다!

명령행 아규먼트(Command-Line Arguments)

  • 강좌에서 가장 많이 사용되는 배열이 무엇인지 물어보면, 그것은 바로 main메소드에 있는 String[] args
  • main메소드는 JVM이 실행하는 메소드
  • JVM이 main메소드를 실행할 때 String[]을 아규먼트로 넘겨 준다는 것을 의미한다.

제한없는 아규먼트

public static int(int ... args) 

int ... 은 제한없는 제한자로 args배열에 들어갈 수 있다.

profile
그래야만 한다
post-custom-banner

0개의 댓글