열거 객체의 메소드

메소드 : java.lang.Enum 클래스에 선언된 메소드

- 모든 열거 타입은 컴파일 시에 Enum 클래스를 상속하게 되어있음

리턴타입 메소드(매개 변수) 설명
String name( ) 열거 객체의 문자열을 리턴
int ordinal( ) 열거 객체의 순번(0부터 시작)을 리턴
int compareTo( ) 열거 객체를 비교해서 순번 차이를 리턴
열거 타입 valueOf(String name) 주어진 문자열의 열거 객체를 리턴
열거 배열 values( ) 모든 열거 객체들을 배열로 리턴

 

name( ) 메소드

- 열거 객체가 가지고 있는 문자열 리턴 (문자열 : 열거타입을 정의할 때 사용한 상수 이름과 동일)

Week today = Week.SUNDAY;
String name = today.name();

today가 참조하는 열거 객체에서 name()메소드를 호출하여 문자열을 얻어냄

name()메소드는 얻어낸 문자열인 "SUNDAY"를 리턴하고 name에 저장함

 

ordinal( ) 메소드

- 전체 열거 객체 중 몇번 째 열거 객체인지 리턴

- 열거 타입을 정의할 때 주어진 순번 리턴(0부터)

Week today = Week.SUNDAY;
int ordinal = today.ordinal();

MONDAY(0) TUESDAY(1) WEDNESDAY(2) ... SUNDAY(6) 

today.ordinal()은 6을 리턴해서 ordinal에 저장함

 

compareTo( ) 메소드 ( A.compareTo(B) )

- 매개값으로 주어진 열거 객체(B)를 기준으로 전후로 몇 번째 위치하는 지 비교 

- 열거 객체(A)가 매개값의 열거 객체(B)보다 앞이면 (-) 

- 열거 객체(A)가 매개값의 열거 객체(B)보다 뒤면 (+)

Week day1 = Week.MODNAY;
Week day2 = Week.WEDNESDAY;
int result1 = day1.compareTo(day2);

day1.compareTo(day2) : day2(WEDNESDAY : 2)를 기준으로 day1(MONDAY : 0)의 상대적 위치(-2)를 리턴

 

valueOf( ) 메소드 

- 매개값으로 주어지는 문자열과 동일한 문자열을 가지는 열거 객체 리턴 

(외부로부터 문자열을 입력받아 열거 객체로 변환할 때 유용하게 사용)

Week weekday = Week.valueOf("SATURDAY");

위의 코드의 경우, weekday 변수는 Week.SATURDAY 열거 객체 참조하게 됨

 

values( ) 메소드

- 열거 타입의 모든 열거 객체들을 배열로 만들어 리턴

Week[] days = Week.values();
for(Week day : days){
	System.out.println(day);
}

Week열거 타입의 모든 열거 객체들을 배열로 만들어 각 원소 출력

배열의 인덱스 == 열거 객체의 순번

각 인덱스 값 == 해당 순번의 열거 객체의 번지

 

 

 

>>1. 열거타입이란?

bskwak.tistory.com/165

 

[JAVA] 열거 (enumeration)타입이란?

열거(enumeration)타입이란? 한정된 값만을 갖는 데이터 타입 예를 들면 (계절 : 봄,여름,가을,겨울) (요일 : 월,화,수,목,금,토,일) 몇 개의 열거 상수(enumeration constant) 중에서 하나의 상수를 저장하는

bskwak.tistory.com

 

>>2. 열거상수, 열거타입변수, 객체?

bskwak.tistory.com/167

 

[JAVA] 열거상수, 열거 타입변수, 객체 ?

열거타입이란? bskwak.tistory.com/165 [JAVA] 열거 (enumeration)타입이란? 열거(enumeration)타입이란? 한정된 값만을 갖는 데이터 타입 예를 들면 (계절 : 봄,여름,가을,겨울) (요일 : 월,화,수,목,금,토,일)..

bskwak.tistory.com

 

>>1. 열거타입이란?

bskwak.tistory.com/165

 

[JAVA] 열거 (enumeration)타입이란?

열거(enumeration)타입이란? 한정된 값만을 갖는 데이터 타입 예를 들면 (계절 : 봄,여름,가을,겨울) (요일 : 월,화,수,목,금,토,일) 몇 개의 열거 상수(enumeration constant) 중에서 하나의 상수를 저장하는

bskwak.tistory.com

 

열거타입 변수 선언 

열거타입변수;
Week today;
Week reservationDay;

 

열거타입변수에 열거 상수 저장

열거타입변수 = 열거타입.열거상수;
Week today = Week.SUNDAY;
Week reservationDay = null;	//열거 타입도 참조 타입이기 때문에 null 저장 가능

 

열거상수는 객체 ? 

yes! 참조타입 변수는 객체를 참조하는 변수이고, 열거 타입도 참조 타입이기 때문에 객체

ex) 열거 타입 Week의 경우, MONDAY~SUNDAY까지의 열거 상수는 7개의 Week객체로 생성

     메소드 영역에 생성된 열거 상수가 해당 Week 객체를 각각 참조

 

today == Week.SUNDAY  true?

Week today = Week.SUNDAY;

열거 타입 변수 today : 스택 영역에 생성됨 

Week.SUNDAY 열거 상수가 참조하는 객체의 번지 : today에 저장되는 값

변수 today 와 열거 상수 Week.SUNDAY : 서로 같은 Week 객체 참조

따라서 today == Week.SUNDAY yes!

 

week1 == week2  true?

Week week1 = Week.SATURDAY;
Week week2 = Week.SATURDAY;
week1 == week2; //true

week1과 week2 모두 Week.SATURDAY 상수와 같이 동일한 Week 객체를 참조하기 때문에 

따라서 week1 == week2 yes!

 

>>3. 열거 객체의 메소드

bskwak.tistory.com/168

 

[JAVA] 열거 객체의 메소드

열거 객체의 메소드 메소드 : java.lang.Enum 클래스에 선언된 메소드 - 모든 열거 타입은 컴파일 시에 Enum 클래스를 상속하게 되어있음 리턴타입 메소드(매개 변수) 설명 String name( ) 열거 객체의 문��

bskwak.tistory.com

 

배열 복사

배열은 한 번 생성하면 크기를 변경할 수 없기 때문에 더 많은 저장 공간이 필요하면 더 큰 배열을 만들고 이전 배열의 항목을 복사해야함

 

1. for문 사용

int[] oldArr = {1,2,3}
int[] newArr = new int[5];

for(int i=0;i<oldArr.length;i++){
	newArr[i]=oldArr[i];
}

위의 경우, 1,2,3은 그대로 복사하고 4번째 5번째 항목의 경우 int형 배열의 초기값인 0이 된다. 

 

2. System.arraycopy() 메소드 사용

System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
// src : 원본배열 
// srcPos : 원본 배열에서 복사할 항목의 시작 인덱스
// dest : 새 배열
// destPos : 새 배열에서 붙여넣을 시작 인덱스
// length : 복사할 개수

예를 들면

System.arraycopy(arr1,0,arr2,0,arr1.length);
//arr1의 모든 항목을 arr2에 복사
String[] oldArr = {"kbs","sbs","mbc"};
String[] newArr = new String[5];

System.arraycopy(oldArr,0,newArr,0,oldArr.length);

String[] 배열의 초기값은 null이므로 newArr의 4번째 5번째 항목은 null이다. 

 

Shallow copy

참조타입 배열의 경우, 배열 복사가 되면 복사되는 값이 객체의 번지이므로 새 배열의 항목은 이전 배열의 항목이 참조하는 객체와 동일함 

 

Depp copy

객체도 별도로 생성 

열거(enumeration)타입이란?

한정된 값만을 갖는 데이터 타입

예를 들면 (계절 : 봄,여름,가을,겨울) (요일 : 월,화,수,목,금,토,일)

몇 개의 열거 상수(enumeration constant) 중에서 하나의 상수를 저장하는 데이터 타입

 

열거 타입 선언 

열거 타입 이름으로 소스파일(.java)생성

※ 열거 타입 이름

더보기

※ 열거 타입 이름

첫 문자는 대문자, 나머지는 소문자로 구성

여러 단어로 구성된 이름의 경우, 단어의 첫문자는 대문자로 구성 

Week.java
MemberGrade.java
ProductKind.java

소스파일 내용 - public enum 키워드 사용하여 열거타입 선언

public enum 열거타입이름 { ... }
// 열거타입이름의 경우, 소스파일명과 일치해야함

 

열거 상수 선언

- 열거 상수 : 열거 타입의 값으로 사용

※ 한 단어로 구성되어 있는 경우 (대문자 사용)

public enum Week{MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURADAY, SUNDAY}

※ 여러 단어로 구성되어 있는 경우 ( 단어 사이 _ 사용)

public enum LonginResult {LOGIN_SUCCESS, LOGIN_FAILED}

 

 

열거타입을 이클립스에서 생성하는 방법

[File -> New -> Enum] 을 클릭한 후에 

아래와 같이 New Enum Type 창에서 Name 칸에 열거 타입 이름을 입력하면 됨

 

 

 

>>2. 열거 타입변수, 객체 ?

bskwak.tistory.com/167

 

[JAVA] 열거상수, 열거 타입변수, 객체 ?

열거타입이란? bskwak.tistory.com/165 [JAVA] 열거 (enumeration)타입이란? 열거(enumeration)타입이란? 한정된 값만을 갖는 데이터 타입 예를 들면 (계절 : 봄,여름,가을,겨울) (요일 : 월,화,수,목,금,토,일)..

bskwak.tistory.com

>>3. 열거 객체의 메소드

bskwak.tistory.com/168

 

[JAVA] 열거 객체의 메소드

열거 객체의 메소드 메소드 : java.lang.Enum 클래스에 선언된 메소드 - 모든 열거 타입은 컴파일 시에 Enum 클래스를 상속하게 되어있음 리턴타입 메소드(매개 변수) 설명 String name( ) 열거 객체의 문��

bskwak.tistory.com

 

for-each문

- 배열이나 열거(enumeration) 항목의 각 원소를 순차적으로 접근하는 데 유용한 for 문

- 반복 실행을 하기 위해 카운터 변수와 증감식을 사용X

- 배열 및 열거 항목의 개수만큼 반복하고 자동적으로 for문 종료 

 

for( 타입변수 : 배열) { ... }
// 타입변수 : 배열에서 꺼낸 항목을 저장할 변수 선언

 

다음의 코드로 예를 들어 과정을 설명하면

int[] scores = {95,71,92,89,61};
int sum=0;

//for-each문
for(int score : scores){
	sum=sum+score;
}

1. for문이 처음 실행될 때 scores에서 가져올 첫번째 값이 존재하는 지 확인 

2. "95"로 존재하므로 score변수에 저장

3. sum=sum+score;라는 실행문 실행

4. scores의 두번째 값부터 위의 과정 반복

5. 가져올 다음 값이 없으면 for문 종료

 

따라서 for문의 반복횟수는 배열의 항목수와 동일함

2020/10/09 - [Programming Language/Java] - [JAVA] main()메소드의 매개값 String[]args란 ?

 

[JAVA] main()메소드의 매개값 String[]args란 ?

public static void main(String[] args){ ... } java class로 프로그램을 실행하면 JVM은 길이가 0인 배열을 먼저 생성하고 main() 메소드를 호출할 때 매개값으로 전달함 ※ JVM (메모리 사용영역) 더보기 JVM..

bskwak.tistory.com

매개값을 주고 실행하는 것에 대한 내용은 위의 링크를 참고하면된다. 

 

이클립스에서 프로그램을 실행할 때 매개값을 주고 실행하는 방법

[Run] -> [Run Configurations]를 선택하면 된다. 

[Run Configurations]대화 상자에서 [Java Applicaton]을 클릭하고 [Arguments]탭을 클릭하면 된다. 

위와 같이 Program arguments란에 10 20 을 입력하고 (공백 필수 ) Run을 클릭하면 된다. 

 

위와 같은 행동들은 명령 프롬프트에서 아래와 같이 실행하는 것과 동일하다. 

java MainStringArrayArgument 10 20

 

이렇게 실행하면 args는 {"10", "20"} 배열을 참조하게 되고 args[0]은 "10", args[1]은 "20"을 얻을 수 있다 (문자열이기 때문에 " " 사용) 

 

문자열은 산술연산을 할 수 없기 때문에 산술연산을 하고자 한다면 정수로 변환시켜야 한다. 

문자열을 정수로 변환하는 방법

Integer.parseInt()메소드를 이용해서 정수로 변환 시킬 수 있음 

 

※ 정수로 변환하지 못하는 문자열의 경우 "NumberFormatException" 실행 예외가 발생함

 

'Programming Language > Java' 카테고리의 다른 글

[JAVA] 열거 (enumeration)타입이란?  (0) 2020.10.10
[JAVA] for-each문  (0) 2020.10.10
[JAVA] main()메소드의 매개값 String[]args란 ?  (0) 2020.10.09
[JAVA] 배열 Array  (0) 2020.10.09
[JAVA] HashSet  (0) 2020.09.18
public static void main(String[] args){ ... }

 

java class로 프로그램을 실행하면 JVM은 길이가 0인 배열을 먼저 생성하고 main() 메소드를 호출할 때 매개값으로 전달함

JVM (메모리 사용영역)

더보기

JVM 스택(Stack) 영역

- 각 스레드마다 하나씩 존재하며 스레드가 시작될 때 할당됨

- 메소드가 호출할 때마다 프레임(Frame)을 추가(push)하고 메소드가 종료되면 해당 프레임을 제거(pop)함

- 프레임 내부에는 로컬 변수 스택이 있는데, 기본타입변수나 참조 타입 변수가 push/pop됨

String[] args ={ };
// args : main( ) 메소드 호출 시 전달

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

 

만약에..

java class 뒤에 공백으로 구분된 문자열 목록을 주고 실행하면??

C:\>java class kbs sbs mbc ebs ...  tvn 

String[] args = {kbs, sbs, mbc, ebs, ... , tvn};
// args[0] => "kbs"
// args[1] => "sbs"
// args[2] => "mbc"

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

문자열 목록으로 구성된 String[] 배열이 생성되고 main()메소드를 호출할 때 매개값으로 전달됨

 

 

eclipse에서 프로그램을 실행할 때 매개값을 주고 실행하는 방법은 아래 링크에 나와있다.

bskwak.tistory.com/163

 

[JAVA] eclipse에서 프로그램을 실행할 때 매개값을 주고 실행하려면?

2020/10/09 - [Programming Language/Java] - [JAVA] main()메소드의 매개값 String[]args란 ? [JAVA] main()메소드의 매개값 String[]args란 ? public static void main(String[] args){ ... } java class로 프로..

bskwak.tistory.com

 

배열(Array)

- 인덱스와 인덱스에 대응하는 데이터들로 이루어진 자료구조로, 배열을 이용하면 한번에 많은 메모리 공간 할당이 가능

- 반복문을 이용하여 처리하기 용이하고 index는 0부터 시작

- 자바에서 '객체'로 관리

 

배열에 대한 레퍼런스 변수 arr 선언

int arr[];

arr라는 int형(정수형) 배열을 참조하기 위한 공간 생성

 

배열 객체 생성 : n개짜리 정수형 배열의 공간이 할당됨 

(1) 값 목록으로 배열 생성

int arr[]={1,3,5,7,9};
String[] names = {"KBS", "SBS", "MBC"};

 

(2) new 연산자로 배열 생성

int arr[] = new int[n];
//type 변수[] = new type [number]

 

 

값의 목록을 가지고 있지 않지만, 나중에 값들을 저장할 수 있도록 배열을 만들고 싶을 때 new 연산자로 배열 객체 생성

new연산자로 배열을 처음 생성할 경우, 배열은 자동적으로 기본값으로 초기화 됨

- int형 배열의 경우 0으로 초기화

-String 배열의 경우, null값으로 초기화

 

NullPointerException

배열 변수가 null값을 가진 상태에서 배열[index]로 값을 읽거나 저장하게 되면 "NullPointerException" error가 발생함

-> 배열 변수는 배열을 생성하고 참조하는 상태에서 값을 저장하거나 읽어야 함

 

배열 길이 : 배열에 저장할 수 있는 전체 항목 수 

- length 필드

배열변수.length;

length 필드는 읽기전용 필드이기 때문에 값을 바꿀 수 없음

 length필드는 배열 객체 안에 포함되어있음 (아래 사진 참고) 

 

 

배열 복사

bskwak.tistory.com/166

 

[JAVA] 배열 복사 ( System.arraycopy() 메소드 )

배열 복사 1. for문 사용 int[] oldArr = {1,2,3} int[] newArr = new int[5]; for(int i=0;i 위의 경우, 1,2,3은 그대로 복사하고 4번째 5번째 항목의 경우 int형 배열의 초기값인 0이 된다. 2. System.arraycopy..

bskwak.tistory.com

 

+ Recent posts