인스턴스 변수는 초기값을 따로 정하지 않아도 정해져있다.
로컬변수는 초기값을 주고 사용해야 한다.
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
현재 사용중인 컴퓨터가 64비트인 이유로 jarfix를 다운받은 폴더에 새 텍스트 문서를 만들어준다.
새 텍스트 문서를 열어, jarfix /64를 입력한다.
저장하고 종료한 후, 이름바꾸기를 통해 확장자를 .bat으로 바꿔준다.
새 텍스트문서.bat을 실행시켜준다.
lombok 라이브러리 다운로드 및 적용
위 사이트에서 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 |