인스턴스 변수는 초기값을 따로 정하지 않아도 정해져있다.
로컬변수는 초기값을 주고 사용해야 한다.
for-each 구문
for(int i=0; i<10; i++){}
위 같은 구문은 흔하게 썼었지만 for-each구문은 접해본적이 없어서 낯설었다.
다음과 같은 예제를 보자
for(String i : cars) {
System.out.println(i);
}
위에서 cars는 Loop를 돌릴 객체이고 cars 객체에서 한개씩 순차적으로 i에 대입되어 for문을 수행하게 된다.
그렇다면 cars에 들어갈수 있는 타입은 당연히 Loop를 돌릴수 있는 형태인 Array 및 ArrayList등이 된다.
예제를 살펴보자
cars는 4개의 String요소를가진 배열이다.
for(String i : cars) 에서 cars는 Loop를 돌릴 객체이다.
이 객체는 한개씩 순차적으로 i에 대입되어 for문을 수행하게 된다.
즉,cars[0] cars[1] cars[2] cars[3] 까지 반복수행 되게된다.
정리해보자,
for ( type var : iterate ) {
body-of-loop
}
iterate 객체에서 한개씩 순차적으로 var에 대입되어 for문을 수행
.jar파일이 알집모양으로 설정되어 있을때
수업 중 getter와 setter를 이용하기 위해 lombok 라이브러리를 이용해야 했는데
lombok.jar을 다운하니 알집모양으로 표시되고 연결 프로그램을 찾아봐도 java로된 연결매개체가 없었다.
파일탐색기 -> 옵션 -> 폴더 및 검색옵션 변경 -> 보기 탭 -> 알려진 파일 형식의 파일 확장명 숨기기 체크해제
이후에 jarfix 프로그램을 다운해준다.
johann.loefflmann.net/en/software/jarfix/index.html
Jarfix
Jarfix 3.0.0 fix the jar association on Windows Description If you doubleclick on a jar file, and your Java application does not start, your .jar association has been hijacked. You can fix the problem with Jarfix. The problem ... The root cause for the pro
johann.loefflmann.net
현재 사용중인 컴퓨터가 64비트인 이유로 jarfix를 다운받은 폴더에 새 텍스트 문서를 만들어준다.
새 텍스트 문서를 열어, jarfix /64를 입력한다.
저장하고 종료한 후, 이름바꾸기를 통해 확장자를 .bat으로 바꿔준다.
새 텍스트문서.bat을 실행시켜준다.
lombok 라이브러리 다운로드 및 적용
Download
projectlombok.org
위 사이트에서 lombok을 다운로드한다.
1.해당 라이브러리를 추가할 프로젝트 폴더 아래 임의의 폴더(예를 들어 lib)를 생성한 뒤 lombok.jar를 폴더안에 넣는다.
2.이클립스가 쓸수있도록 lib 파일을 우클릭 후 show in -> System Explorer->lib 폴더를 선택 후 폴더를 열어준다.
위에서 Shift+마우스 우클릭 후 PowerShell을 실행한다.
->java -jar lombok.jar 입력 후 Can't find IDE 경고창이 뜰시 확인을 클릭한다.
->Specify location 에서 eclipse.exe를 찾아 선택해준다
->Install/Update 를 클릭한 후 이클립스를 재시작한다.
3.해당 라이브러리가 들어갈 프로젝트 우클릭 후 Bulid Path -> Configure Bulid Path 를 선택한다.
->상단 탭 Project를 클릭한 뒤 build all을 선택한다.
->상단 탭 Project를 클릭한 뒤 clean을선택한다.
ArrayList
요소 수정
cars.set(0, "Opel");
cars.set(0,"Opel");
요소 삭제
cars.remove(0); //0은 index number
모든 요소 삭제
cars.clear();
모든 요소의 갯수
cars.size();
예제를 살펴보자
위와 같이 ArrayList를 사용하려면 import java.util.ArrayList를 입력해줘야 한다.
위는 myNumbers에 각각의 값을 넣어줘서 위에서 봤던 for-each 구문을 이용하여 myNumbers안에 있는
ArrayList값을 하나씩 찍어준다.
근데, 위에서 궁금한것이 생겼다
ArrayList<Integer> myNumbers = new ArrayList<Integer>();
여기서 <Integer>는 왜써주는 것일까?
방법부터 알아보자.
ArrayList는 Method옆에 parameter를 주듯이 Type옆에 parameter를 준다.
public String check(String a)
위에서 Method옆에 parameter a를 주듯이
public class SimpleDotCom<T>
Type옆에 parameter T 를 준다
여기서 말하는 Type이란 Class,Interface,Enum 이 있다.
위의 예제는 Class옆에 parameter를 준 예제이다.
자 그럼 <T>의 명칭은 정확히 뭘까?
Generic
Generic은 왜 써주는것일까?
먼저 generic을 사용하지않는 예제를 살펴보자
위 예제는 generic을 사용하지 않고 어떤 타입이든 5개 요소를 담을수 있는 ArrayList를 만든 것이다.
private Object[] elementData = new Object[5];
여기서 Object는 무엇이고 왜 쓴것일까?
모든 클래스는 Object 클래스를 상속받기 때문에 Object 타입으로 받으면 그 어떤 타입이라도 받을 수 있다.
이제 아래를 실행시켜보자.
실행파일도 잘 되고 잘 동작된다.
add()메소드는 파라미터로 Object를 받기 때문에 어떤 데이터타입도 모두 받을 수 있다.
그러므로 list.get()부분에서 형 변환을 잘 시켜주면 어떤 데이터 타입도 저장할 수 있다.
그럼, add(50)에 들어가게 될 50이 String으로 들어가게 됐다고 가정해보자.
컴파일은 잘되나, 런타임 오류가 발생하게 된다
잘못된 TypeCasting이 이루어졌다.
String을 넣어놓고서 Integer로 형변환했기 때문이다.
이것은 매우 좋지않은 방식이란것이 증명됐다.
Generic 사용
위와 같이 잘 실행되는것을 볼 수 있다.
즉,제네릭은 클래스나 메소드에서 사용할 데이터 타입을 나중에 확정하는 기법이다.
클래스나 메소드를 선언 할 때가 아닌 사용할 때, 즉 인스턴스를 생성할 때나 메소드를 호출할 때 정한다.
위의 예제로 인해 제네릭을 쓰는이유 두가지를 추려볼수 있다.
- 컴파일 단계에서 오류가 검출된다.
- 중복의 제거와 타입 안전성을 동시에 추구할 수 있게 되었다.
'인공지능 교육 > Java' 카테고리의 다른 글
21/05/05 8일차 인공지능 교육 (0) | 2021.05.08 |
---|---|
21/05/04 7일차 인공지능 교육 (0) | 2021.05.06 |
21/05/04 6일차 인공지능 교육 (0) | 2021.05.04 |
21/04/30 4일차 인공지능 교육 (0) | 2021.04.30 |