개발자의 오르막
SW 심화과정 교육 5일차 본문
# 상속관계 클래스의 캐스팅의 이해 - instanceof
# 자료형 타입의 연산
- c 는 정수값 0은 false, 0이 아닌 모든 정수는 true
- if(100) → true
- 비교연산은 boolean 값을 리턴 : ==, !=, >, <, >=, <=
- 거의 모든 연산은 같은 자료형 끼리 가능 : int + int = int
int / int : 나머지 자름, double / int : 자동변환 되는 부분을 캐스팅한다.
# package
- 패키지가 지정된 클래스 컴파일 : javac -d[폴더] Test064A.java
대상 폴더 아래에 패키지 이름으로 폴더 생기고, 그 아래에
class 파일이 들어간다.
- 패키지를 선언하지 않으면 unnamed 패키지에 속하게 됨.
사용시 제약이 많다.
- 현재 폴더를 패키지로 지정 : javac -d . Test064A.java
- 패키지는 클래스의 묶음, 파일 맨 위의 지정
이 파일 안에 선언한 모든 클래스는 지정된 패키지에 속한다.
# package 폴더가 다른 경로가 있을 때 컴파일 방법
- 다른 패키지의 클래스는 반드시 명시해야 사용할 수 있다. (import) 필요
- 만일 그래도 클래스를 못 찾으면, 위치를 지정해야 한다.
javac -classpath C:\A\Test064.java
javac -classpath .;C:\A\Test064.java
위치를 지정해줘야 import 하는 클래스파일을 찾을 수 있음
.; 는 컴파일하고자 하는 대상의 현재 위치이다. (;는 구분자)
- import 하고자 하는 패키지가 여러개일 때에는 위치를 모두 지정필요
구분자 ;를 활용
- -classpath 옵션을 안주면 -classpath . 이 자동으로 붙는다.
- Test065A 의 멤버변수 i 가 접근되는지 살펴본다. : protected, friendly
# static initializer : 클래스가 로딩되는 시점에 호출
# Class.forName
- 클래스를 찾아내서 해당 클래스를 강제로 메모리에 로딩시킨다.
- 로딩시키는 클래스의 static initializer 가 동작한다.
- static은 클래스가 로딩됬을 때 생성된다.
- non static 멤버변수는 인스턴스가 생성됬을 때 생성된다.
- static한 멤버변수는 하나만 존재한다.
- static initializer 는 클래스가 호출됬을 때 동작한다.
- static 한 멤버함수는 non static 멤버변수를 활용할 수 없다.
non static 멤버변수가 (생성이 되지 않았기 때문에)
- 생성자는 인스턴스 생성되는 시점에 호출한다.
- 클래스를 강제로 로딩시키는 것이 Class.forName이다.
# getMethod
- getMethods() : 클래스 안에서 선언된 함수에 대한 포인터들을 추출한다.
# command pattern 활용
- PrintStars
- javac -d c:\A\ PrintStars.java
→ c:\A\ 안에 temp 패키지를 생성하고 그 위치에 PrintStars.class를 생성한다.
*@interface 는 빈 인터페이스에 사용하고, 이렇게 선언된 건 implements를
안해도 연결된다.
같은 패키지안의 모든 클래스에 적용
한 자바파일에는 public class가 하나만 있어야 된다. (보통 main 메소드 있는 클래스)
-Test067.java
- javac -d C:\A\ -classpath C:\A\ Test067.java
- c:\A\ 안에 temp 패키지를 생성하고 그 위치에 Test067.class를 생성한다.
→ 컴파일 할 때 c:\A\ 안의 PrintStars 를 임폴트를 한다.
* commandpattern과 달리 class가 아닌 함수에만 어노테이션을 하니까
다른 클래스에서 사용가능
-Test067_2.java
- javac -classpath c:\A\ Test067_2.java
→ 컴파일 할 때 c:\A\ 안의 PrintStars 를 임폴트를 한다.
- java -classpath c:\A\;. Test067_2
→ 실행할 때 c:\A\ 안의 PrintStars 를 임폴트를 한다.
- 클래스를 못찾으면 classpath 로 위치를 지정한다.
* getAnnotation( PrintStars.class ) 는 PrintStars 클래스를 갖고 있니
anot 는 Annotation 을 가리키는 참조형 변수
mtd는 Test067 클래스 print 함수를 가져와서 invoke를 쓴다.
invoke 함수의 리턴값은 Object로 가져와서
Integer로 캐스팅 후 int로 언박싱
#56 commandPattern 과 비교했을 때,
거기서는 PrintStars를 implementes 하고 있는 애들을 구분해서 조건
(ls[n] instanceof PrintStars) 이 Annotation 역할을 함.
56은 클래스 자체를 함.
어노테이션은 함수단위로 가능
어노테이션 == NameTag
# ArrayList 와 LinkedList 의 비교
- ArrayList 속도가 빠르다. 내부적으로 배열을 이용한다.
- 배열을 써서 단순히 쌓는 속도는 빠른데, 중간 삭제시에는 비효율적이다.
- 반면 LinkedList 는 Node 를 이용하기에 단순하게 쌓는 속도는 느리다.
중간에 추가, 삭제가 빈번한 경우에는 용이하다.
- 둘 다 List를 상속한다. List를 상속받은 클래스는 특징이 존재한다.
중복되는 것을 허용한다. 검색 시에 들어간 순서대로 출력된다.
(즉, 순서대로 보관한다.)
# TreeSet
- Set 인터페이스를 상속받은 것 : TreeSet, HashSet
- 공통특징 : 순서 개념이 없다.
- 중복 허용하지 않는다.
- 검색속도가 List 보다 월등
- TreeSet : 트리를 이용하여 보관, HashSet 는 해쉬 알고리즘으로
기억 장소를 결정
- 같은 인터페이스를 상속받았기 때문에, 사용 방법이 똑같다.
같은 함수이름으로 각각 메소드를 재정의 했기 때문이다.
# HashSet
# Map
- Map은 순서개념 없이 key = value 형태의 마치 사전과 같은
형태로 저장합니다.
- put 함수로 저장, get 함수로 key에 해당하는 value 를 뽑아낸다.
- List , Set , Map 형태로 뭔가를 저장하는 형태를 흔히 Collection 이라한다.
- 각각의 중복여부와 순서 여부를 확인한다.
: List 는 순서개념 O, 중복허용 O / Set, Map 은 순서개념 X, 중복허용 X
: Map은 (Key, Value)로 저장
# Random
- Math.random() : 0에서 1사이의 소수값을 랜덤하게 출력한다.
- 곱해서 캐스팅 하는 형태로 해서 정수를 발생시킬 수 있다.
# RuntimeException
- java 에서 각종 에러는 class 로 구현된다.
extends Exception, extends RuntimeException
- 코드 수행시 에러가 발생되면 해당 예외 클래스의
인스턴스를 throw한다.
- 발생된 예외를 적절하게 처리하지 못하면 프로그램은 종료한다.
- "예외는 함수 수행시에 발생되고, 함수에 그 사실을 명시한다."
# RuntimeException 과 Exception의 차이, Try catch 문
- RuntimeException 일 때는 컴파일 되지만 실행 때 안됨.
- Exception 일 때는 컴파일 안됨. 그러나 함수 뒤에 throws 붙이면 됨.
- 함수에서 에러가 발생할 수 있다면 그 사실을 선언부에 명시해야 컴파일 된다.
- throws FuelException 으로 선언된 함수를 호출할 때는
반드시 에러가 발생할 수 있는 영역을 try{} 로 감싸준다.
- try에는 반드시 1개 이상의 catch 가 있어야 한다.
- 에러가 발생되면 에러 인스턴스를 throw 한다.
- catch( FuelException e )에 잇는 e 변수가 발생된 에러 인스턴스를 가리킬 수
있으면 catch에 딸린 {...} 가 동작한다.
... 에는 에러를 수습할 수 있는 코드가 들어가는 것이 바람직하다.
- 조상의 참조형 변수는 자손의 인스턴스를 가리킬 수 있어서,
Exception e 는 FuelException 을 가리킬 수 있다.
'교육과정 ( SW 개발자 심화과정 ) > Java' 카테고리의 다른 글
SW 심화교육 9일차 (0) | 2019.07.23 |
---|---|
SW 심화교육 8일차 (0) | 2019.07.22 |
SW 심화과정 D-4 (0) | 2019.07.18 |
SW 제주 심화 교육 - 코드 패턴 (0) | 2019.07.18 |
SW 심화과정 교육 4일차 (0) | 2019.07.18 |