많은 데이터를 쉽게 제어하기 위해 자주 사용하는 배열과, java에서도 절차지향 방식을 사용할 수 있게 해주는 람다식에 대해 알아보자.


◆ 배열 객체 (Array)

같은 타입의 데이터를 여러 개 묶어서 관리할 수 있는 객체, 만들 때 크기가 지정되어야 하고 정해진 타입(또는 같은 계열(상속관계))의 데이터만 저장 할 수 있다. (인덱스는 0번부터 시작)

▶ 선언

int[] a = new int[3];  // []표기는 자료형 뒤에 표기 하는 것을 권장.
int b[] = new int[4];  // 변수명 뒤에 [] 붙여도 되지만, 자료형에 붙이는것이 일반적
Pawn ap[] = new Pawn[3]; // 클래스타입의 배열도 생성할  있다.

클래스타입의 배열의 경우 실제 사용할 객체가 생성되는 것이 아니라 그 객체를 저장할 공간, 즉 배열객체 자체를 생성하는 것으로, 객체를 생성할 경우 해당 배열의 인덱스 안에 다시한번 new키워드를 통해 객체를 생성해야 한다.

cf) 인터페이스 배열
Runable[] rb = new Runnable[3];
=> Runnable은 인터페이스이므로 객체생성이 불가능 하지만, 배열객체는 실제 객체를 생성 하는 것이 아니므로 배열로써 생성은 가능하다!

▶ 선언과 동시 초기화

int a[3] = { 1,2,3 };  
int[] a = new int[] { 1, 2, 3 }; // 보통 위와같이 하지만 이같은 방법도 가능하다.
  • 선언과 동시에 값을 넣으면 new를 이용하여 배열객체를 생성한 것과 같다.
  • 해당 인덱스에 있는 데이터를 불러올 때는 ‘배열객체변수[인덱스번호]’ 를 사용.ex) a[0] == 1

length(배열의 길이)

  • 배열객체변수.lenght 는 배열의 길이를 반환 ( a.length == 3 )
  • final변수이기 때문에 변경은 불가

▶ 배열객체는 생성 시 기본적으로 모든 인덱스 값들에 대한 디폴트 초기화 작업을 해준다.

  • boolean = false
  • int, long, byte, short = 0
  • float,double = 0.0
  • 객체 등의 그 외는 전부 null

▶ 배열 복사 메서드

배열객체.clone(): 새로운 배열에 자신의 데이터를 그대로 복제

int[] b = a.clone();

복제된 배열은 clone()메서드를 사용한 배열객체와 다른 객체이다.
단, 기본형 데이터가 아닌 객체배열일 경우, 그 안에 복제된 객체데이터는 서로 같은 객체값을 가지고 있다.



◆ 이중배열

행 열로 관리되는 이중 배열 ( 실제 컴퓨터 내부에서는 행, 열로 관리하진 않음 )
선언할 때 두 번째 칸의 범위는 생략해도 된다. ( 각 행마다 열을 다르게 설정할 수도 있기 때문에. )

int[][] array = new int[4][];  
array[0] = new int[4];  
array[1] = new int[2];


  • 행열을 모두 선언한 후에도 열은 바꿀 수 있다.
int[][] ar = new int[4][5]; 
ar[2]=null;


▶ 여러 선언 방법

  • int[][] ar = new int[4][];
    행만 미리 선언해 두는 방식
  • int[][] ar = new int[][] { new int[3], new int[4], new int[5] };
    3행 3,4,5열로 구성된 배열로 선언
  • int[][] ar = new int[][] { new int[] { 1, 2, 3 }, new int[] { 4, 5, 6, 7 }, new int[] { 5, 5, 2, 2, 2, } };
    4행으로 구성된 해당 열들에 값을 미리 초기화 해두는 선언



◆ 람다식(lambda)

인터페이스를 implements하지 않고 바로 인터페이스의 함수를 구현하여 객체로 사용할 수 있는 방식

public interface LambdaClass{
	public void method(String s1, String s2, String s3);
}

public sattic void main(String[] args){
	// 람다식으로 메서드 정의
	LambdaClass la = (String s1, String s2, Strigs3) -> {
		System.out.println(“람다식 호출” + s1 + s2 + s3 );
	}
	// 람다식으로 정의한 메서드 호출
	la.method(hello, java, world);
}
  • 매개변수가 하나이거나, 모두 같은 타입의 매개변수일 경우 타입을 생략하여 사용해도 된다.
    LambdaClass la = (s1, s2, s3) -> { … }
  • 매개변수가 하나일 때는 ()를 생략할 수 있고, 실행문이 하나인 경우에는 {}를 생략할 수 있다.
    LambdaClass la = s1 -> System.out.println(“s1호출”);