JAVA 참조타입 / 배열 / jar
참조타입 (Reference Type)
기본 타입을 뺀 나머지는 대부분 참조타입이다.
참조타입은 Heap 메모리의 특정 주소를 할당하여 연결한다. 링크개념으로 생각하면 될듯
참조타입의 == , !=
== : 같은 객체를 참조하는가
!= : 같은 객체를 참조하지 않는가.
String S = new Stirng(“JAVA”);
String s2 = S;
s=null;
참조타입 String
리터럴 ㅣ 소스코드상에 고정된 값
String varname ; // 선언
varname = “문자열”; <- 문자열 할당. “” 사이에 리터럴 값 설정
String varname = “문자열”;
String varname2 = new String(“문자열”);
String 값이 같은지 비교하려면 .equals 메서드를 사용한다
varname.equals(varname2); → False
String 의 포맷 Printf
System.out.printf(“Hello %s of %s%n, “World”, “java”);
-> Hello World of Java
String s = String.format(“The meaning of the %s is %d”, “universe”, 42”);
-> The meaning of the universe is 42
열거형 enum
몇 가지로 한정된 값만을 가지는 경우
예) 요일, 계절, 성별 등
- 모두 대문자로 작성(관례)
- 단어일 경우 _ 로 연결
- 왜 사용하나?
오타 / 문자열 <- 비교하는데 적합한 데이터 타입이 아님
public enum 열거타입명 { 열거 상수, … }
public enum Week{SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY}
compareTo(열거객체) sorting할때 사용
배열 Array
30명의 성적을 처리한다고 생각해보자. 30개의 변수를 선언할 것인가?
동일한 자료형의 여러 값으로 이루어진 객체(object)
new로 생성되는 참조 자료형
배열에 포함된 값들은 기본 자료형일수도 있고, 다른 객체를 참조하는 참조 자료형일 수 도 있음.
인덱스 : 0부터 lenght-1 까지 -> zero base index( Java, C, Python…)
배열(Array)의 선언
배열을 선언하는 두 가지 방법
타입[] 변수;
타입 변수[];
int[] intArray; // = int intArray[];
double[] doubleArray; // = double doubleArray[];
String[] stringArray; // = String stringArray[];
배열(Array)의 초기화
값 목록이 있다면, { }으로 값의 목록을 지정하여 초기화할 수 있음
타입 배열명[] = { 값0, 값1, 값2, 값3, …};
String[] days = {"월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"};
이 방식은 배열 변수 선언과 동시에 해 주어야 허용된다.
다음과 같은 방식으로 new 연산자 뒤에 나열할 수도 있다.
String[] days;
days = new String[] {"월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"};
new 연산자로 배열 생성
int[] intArray = new int[3];
intArray[0] = 3;
intArray[1] = 6;
intArray[2] = 9;
주의: 타입 선언시 배열 크기 지정 안됨
int[5] intArray = new int[]; // (x)
배열(Array)의 사용
배열의 length 멤버는 배열의 길이를 알아낼 때 사용할 수 있다
Array (배열)의 선언 → 생성 → 초기화
Array (배열) ArrayIndexOutOfBoundsException
배열의 범위를 벗어난 곳에 접근하면 ArrayIndexOutOfBoundsException 을 일으킨다
배열의 인덱스는 0부터 시작한다는 점을 잊지 말자
int[] intArray;
intArray = new int[5];
intArray[0] = 3;
intArray[1] = 6;
intArray[2] = 9;
int result = 0;
for ( int i = 0; i <= intArray.length; i++ ){
result = result + intArray[i];
}
System.out.println("intArray의 4번째 값: " + intArray[3]);
다차원 배열
int [] [] iaa! = new int [5] [2] ;
-> 5행 2열 배열 -> 5층 2번방
배열의 복사
배열은 한번 생성하면 크기를 변경할수 없다
추가로 저장 공간이 필요하다면 원래 배열보다 큰 배열을 만들고 이전 배열의 항목값을 복사해야 한다
System.arraycopy()로 배열을 복사할 수도 있다
ystem.arraycopy(원본배열, 시작인덱스,타겟배열, 시작인덱스, 복사할 길이)
참조 : 자바 메모리 관리 - 스택 & 힙 (yaboong.github.io)
*jar 파일 만들기
- 자바 압축파일
해당 클래스의 파일을 실행하는 자바 압축파일을 생성한다.
elipse에서 jar파일 생성 방법
1. 프로젝트 우클리 > Export 선택
2. 필터에서 jar 검색 > JAR 선택
3. JAR 파일이 저장될 위치 지정 (그림의 select the export destination)
설정했으면 next
4. 넥스트하다보면 아래와 같은 메뉴가 나온다.
여기서 Seal contents와 selelct the class of the appication entry point를 설정한다.
패키지는 자바 코드를 짤때 생성한 패키지이다.
엔트리 포인트는 메인 메소드를 설정한다.
그리고 저장.
5. CMD를 열어 jar 파일의 위치로 이동한 다음, 아래의 명령어를 입력한다.
java -jar 파일명.jar (필요시 arg 인자값)