String 클래스는 char\[] + 메소드(기능) 를 결합한 것.String 클래스는 내용을 변경할 수 없다. (read only)↳ a에 a+b의 값을 대입하면, 원래의 "a" -> "ab"로 값이 변경되는게 아니라, ab를 가진 새로운 주소가 생성되고 그것을 가
System.out.println(Arrays.equals(str2D, str2D2)); // falseSystem.out.println(Arrays.deepEquals(str2D, str2D2)); // true
정의: 객체를 정의해 놓은 것용도: 객체를 생성하는데 사용정의: 실제로 존재하는 것. 사물 또는 개념용도: 객체가 가지고 있는 기능과 속성에 따라 다름객체 = 속성(변수) + 기능(메소드)객체 : 모든 인스턴스를 대표하는 일반적 용어인스턴스 : 특정 클래스로부터 생성된
올바른 작성 예시잘못된 작성 예시하나의 소스파일에는 하나의 클래스만 작성하는 것이 바람직소스파일의 이름은 public class의 이름과 일치하나의 소스파일에는 하나의 public class만 허용
객체의 생성객체의 사용자바의 정석 기초편 ch6 - 6,7
Tv\[] tvArr = new Tv\[3]; Tv 타입 참조변수 3개를 만듦tv Arr\[0] = new Tv() : Tv 객체를 만들고 그 주소를 tvArr0 참조변수에 넣음➡︎ Tv 타입의 참조변수 3개를 만들고, tv 객체를 만든 것의 주소를 참조변수안에 넣는
클래스? 3개로 생각해볼 수 있음.설계도데이터 + 함수사용자 정의 타입변수 : 하나의 데이터를 저장할 수 있는 공간배열 : '같은 종류'의 여러 데이터를 하나로 저장할 수 있는 공간구조체 : 서로 관련된 여러 데이터(종류 관계X)를 하나로 저장할 수 있는 공간클래스 :
선언 위치에 따른 변수의 종류 = 3가지 타입인스턴스 변수 (iv)클래스 변수(cv / static 변수, 공유 변수)지역 변수 (lv)클래스 영역 : 선언문만 가능cv = static + iviv -> 인스턴스가 생성됐을때 만들어짐. (객체 생성)클래스영역에 선언되면
Card 객체에서 개별적인 속성은 iv로, 공통적인 속성은 cv로 저장. cv의 값을 설정할 때는, 참조변수(c)를 사용해도 되지만, 가능하면 클래스이름으로 하기. (iv랑 구별짓기 위해서)
문장들을 묶어 놓은 것= 작업 단위로 문장들을 묶어서 이름 붙인 것.→ 코드의 중복을 줄이기 위함값(입력)을 받아서 처리하고, 결과를 반환(출력)메소드 ≒ 함수메소드 : 객체지향 개념에서 함수. 클래스 안에 존재해야함함수 : 클래스에 독립적이다.코드의 중복을 줄일 수
메소드이름(값1, 값2, ...); // 메소드를 호출하는 방법메소드는 클래스영역에만 정의 가능long add(long a, long b) { long result = a + b; return result; }
실행 중인 메서드를 종료하고 호출한 곳으로 되돌아간다.반환타입이 void가 아닌 경우, 반드시 return문 필요: 메서드의 반환타입이 void가 아닐 때, return 옆에 써주는 값.메서드의 반환타입과 반환값의 타입이 일치하거나 자동형변환 가능해야 한다.
스택(stack) : 밑이 막힌 상자. 위에 차곡차곡 쌓인다.호출 스택(call stack) : 메서드 수행에 필요한 메모리가 제공되는 공간.메서드가 호출되면 호출스택에 메모리 할당, 종료되면 해제↳ 아래있는 메서드가 위의 메서드를 호출한 것(main이 먼저 들어왔음.
기본형 매개변수 : 변수의 값을 읽기만 할 수 있다. (read only)참조형 매개변수 : 변수의 값을 읽고 변경할 수 있다. (read & write)참조형 반환타입 : 객체의 주소를 반환한다.
인스턴스 메서드인스턴스 생성 후!, 참조변수.메서드이름()으로 호출인스턴스 멤버(iv, im)와 관련된 작업을 하는 메서드메서드 내에서 인스턴스 변수(iv) 사용 가능static 메서드 (클래스 메서드)객체생성 없이 '클래스이름.메서드이름()'으로 호출인스턴스 멤버(i
한 클래스 안에 같은 이름의 메서드를 여러개 정의하는 것메서드 이름이 같아야 한다.매개변수의 개수 또는 타입이 달라야 한다.반환 타입은 영향없다.오버로딩의 올바른 예 : 매개변수는 다르지만 같은 의미의 기능 수행메서드 이름이 같다 = 하는 작업이 같다.
: 인스턴스가 생성될 때 마다 호출되는 '인스턴스 초기화 메서드'인스턴스 생성시 수행할 작업 (iv 초기화)에 사용인스턴스 = 객체, ( iv 묶음) -> iv 초기화!이름은 클래스 이름과 같아야 한다.리턴값이 없다.(void 안 붙임)모든 클래스는 반드시 1개 이상
: 생성자에서 다른 생성자를 호출할 때 사용: 다른 생성자 호출시, 첫 줄에서만 사용 가능!1,2번 생성자가 3번생성자를 호출할 때, Car2로 호출하지 않고 this로 사용.인스턴스 자신을 가리키는 참조변수인스턴스 메서드(생성자 포함)에서 사용 가능지역변수(lv)와
지역변수(lv)는 수동 초기화 해야함 (사용전 꼭!!)멤버변수(iv, cv)는 자동 초기화 된다.참조형 변수null : 기본값객체주소인스턴스 초기화 블럭 : {}클래스 초기화 블럭 : static {} - cv 초기화클래스 변수 초기화 시점 : 클래스가 처음 로딩될 때
기존의 클래스로 새로운 클래스를 작성하는 것(코드의 재사용)두 클래스를 부모와 자식으로 관계를 맺어주는 것.자손은 조상의 모든 멤버를 상속받는다. (생성자, 초기화블럭 제외)자손의 멤버 개수는 조상보다 적을 수 없다.(같거나 많다.)자손의 변경은 조상에 영향을 미치지
클래스의 관계는 크게 1. 상속 2. 포함 으로 나눌 수 있다.: 클래스의 멤버로 참조변수를 선언하는 것작은 단위의 클래스를 만들고, 이 들을 조합해서 클래스를 만든다.왼쪽보다 오른쪽이 복잡도가 더 줄어듬.상속관계 : '~은 ~이다.(is-a)'포함관계 : '~은 ~을
: JAVA는 단일상속만을 허용한다.(C++은 다중상속 허용)( 하나의 부모만 상속 )\-> 충돌위험이 있기 때문이다.비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다.: 모든 클래스의 조상.부모가 없는 클래스는 자동적으로 Object클래스를 상속받게 된
: 상속받은 조상의 메서드를 자신에 맞게 변경하는 것1\. 선언부가 조상 클래스의 메서드와 일치해야 한다.(반환타입, 메서드이름, 매개변수 목록)2\. 접근 제어자를 조상클래스의 메서드보다 좁은 범위로 변경할 수 없다.3\. 예외는 조상 클래스의 메서드보다 많이 선언할
: 객체 자신을 가리키는 참조변수 (≒ this)인스턴스 메서드(or 생성자)내에서만 존재 (static 메서드 내에서 사용 불가)조상의 멤버를 자신의 멤버와 구별할 때 사용this : lv와 iv 구별에 사용조상의 생성자를 호출할 때 사용조상의 멤버는 조상의 생성자를
: 서로 관련된 클래스의 묶음클래스는 클래스 파일(\*.class), 패키지는 폴더. 하위 패키지는 하위 폴더클래스의 실제 이름(full name)은 패키지를 포함.(java.lang.String)rt.jar는 클래스들을 압축한 파일(JDK설치경로₩jre₩lib 에 위
클래스를 사용할 때 패키지이름을 생략할 수 있다.(원래 클래스이름 앞에 패키지이름 써줘야함)컴파일러에게 클래스가 속한 패키지를 알려준다.java.lang 패키지의 클래스는 import하지 않고도 사용할 수 있다.(String, Object, System, Thread.
클래스와 클래스의 멤버(멤버 변수, 메서드)에 부가적인 의미 부여접근제어자 : public protected default private그 외 : static final abstract native transient synchronized volatile strictf
private : 같은 클래스 내에서만 접근 가능(default) : 같은 패키지protected : 같은 패키지 + 다른 패키지 자손public : 접근 제한 전혀없음.
접근 제어자를 사용하는 이유?외부로부터 데이터를 보호하기 위해서외부에는 불필요한, 내부적으로만 사용되는 부분을 감추기 위해서!직접 접근은 막고 메서드를 통해 간접접근을 하도록 해야함.t.setHour(25);를 이용해서 메서드로 접근 (값을 보호)
조상 타입 참조 변수로 자손 타입 객체를 다루는 것자손 타입의 참조변수로는 조상 타입의 객체를 가리킬 수 없음.일반적으로 참조변수타입 변수 = new 객체(인스턴스)타입조상타입 변수 = new 자손타입(); // 타입 불일치 가능자바의 정석 기초편 youtube - c
사용할 수 있는 멤버의 갯수를 조절하는 것그 외 변하는건 없음.조상, 자손 관계의 참조변수는 서로 형변환 가능() 형변환 연산자로 변경가능자손의 메소드(조상보다 많음)를 다운캐스팅을 통해 이용할 수 있음f는 원래 FireEngine의 인스턴스. f를 FireEngine
참조 변수의 형변환 가능여부를 확인하는데 사용. 가능하면 true 반환 형변환 전에 반드시 instanceof로 확인해야 함. 변수 instanceof 본객체의조상 ; true. 자기 자신 & 조상도 참으로 나옴. → 조상으로도 형변환이 가능하다.
참조형 매개변수는 메서드 호출시, 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄 수 있다.다형성의 장점다형적 매개변수하나의 배열로 여러종류 객체 다루기
: 조상타입의 배열에 자손들의 객체를 담을 수 있다.
미완성 설계도. 미완성 메소드를 갖고 있는 클래스추상메소드 1개라도 가지고 있으면 추상클래스→ 추상 클래스는 다른 클래스 작성에 도움을 주기 위한 것임. 인스턴스 생성 불가⇒ 미완성이므로 제품생산 불가↳ 상속을 통해 추상 메소드를 완성하면 인스턴스 생성이 가능미완성 메
결론 : 추상 메소드의 집합 (프로그래밍 관점)핵심 : 구현된 것이 전혀 없는 설계도. 껍데기 (모든 것이 추상메소드이기 때문에, 모든 멤버가 public)추상클래스는 일반 클래스인데 추상메소드를 가지고 있는 것. (생성자, 변수 가짐)인터페이스는 추상메소드만 가짐.
인터페이스도 구현 클래스의 부모?: 명확히 말하면 아니지만, 가능하다.(중요!!) 인터페이스 타입의 매개변수는 인터페이스 구현한 클래스의 객체(인스턴스)만 올 수 있다.⇒ 메소드의 리턴타입에 인터페이스가 오는 것? Fightable 인터페이스를 구현한 클래스의 인스턴스
두 대상(객체)간의 '연결, 대화, 소통'을 돕는 '중간 역할'을 한다.
인터페이스에 default 메소드, static 메소드 추가 가능(JDK1.8 ~)인터페이스에 새로운 메소드(추상 메소드)를 추가하기 어려움∵ 기존에 인터페이스를 구현했던 클래스들에 추상메소드를 추가하려면, 또 구현하고 변경해야함.⇒ 해결책 : 디폴트 메소드(defau
: 클래스 안의 클래스장점 : 1) 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다. (객체 생성 없이도 멤버에 접근 가능)2) 코드의 복잡성을 줄일 수 있다. (캡슐화) ↳ 클래스 B를 A내부에서만 쓰는거면 따로 만들 이유가 없다.내부 클래스의 종류와 특
내부 클래스의 제어자는 변수에 사용 가능한 제어자와 동일내부클래스에 static 멤버가 필요하다면, 클래스도 static 이여야만 함!( static = 객체 생성없이 사용 가능해야 함 )↳ 내부에 있는 static 클래스는 외부 클래스의 인스턴스 멤버에 접근할 수
: 이름이 없는 일회용 클래스. 정의와 생성을 동시에 함→ 조상의 이름을 빌려다가 씀예시)→ 컴파일 하면, 파일 이름이 외부클래스$1.class 의 형식으로 나옴. 숫자는 1,2,3 ⋯ 증가함.AWT(JAVA의 윈도우 프로그래밍)을 작성할 때 아래와 같은 코드를 많이
1) 컴파일 에러(compile-time error) : 컴파일 할 때 발생하는 에러2) 런타임 에러(runtime error) : 실행할 때 발생하는 에러3) 논리적 에러(logical error) : 작성 의도와 다르게 동작자바 컴파일러 : javac.exe1) 구
↳ 참고) if문과 달리, try블럭이나 catch블럭 내에 포함된 문장이 하나뿐이어도 괄호{} 생략불가.try블럭 내에서 예외가 발생한 경우1) 발생한 예외와 일치하는 catch블럭이 있는지 확인한다.2) 일치하는 catch블럭을 찾으면,해당 catch블럭 내의 문장
printStackTrace() : 예외발생 당시의 호출스택(Call Stack)에 있었던 메소드의 정보와 예외 메시지를 화면에 출력한다.getMessage() : 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있다.→ 이 외의 메소드도 있지만 , 두개의 메소
연산자 new를 이용해서 발생시키려는 예외 클래스의 객체를 만듦키워드 throw를 이용해서 예외를 발생!throw e;checked 예외 : 컴파일러가 예외처리 여부를 체크(예외 처리(try-catch) 필수)↳ Exception과 자손unchecked 예외 : 컴파일
1) try-catch문 (직접 처리)2) 예외 선언하기 (예외 떠넘기기,알리기)3) 무시(은폐, 덮기) - 빈 catch문을 넣음: 메소드가 호출 시 발생가능한 예외를 호출하는 쪽에 알리는 것( 본인이 처리할 수 있는 일은 처리하지만, 할 수 없는 것은 자신을 호출한
우리가 직접 예외 클래스를 정의할 수 있다.조상은 Exception(사용자가 발생)과 RuntimeException(프로그래머의 실수로 발생)중에서 선택↳ checked는 try-catch가 필수적이기 때문에, 웬만하면 런타임(unchecked)으로 예외처리 해주면 편
한 예외가 다른 예외를 발생시킬 수 있다.예외 A가 예외 B를 발생시키면, A는 B의 원인 예외(cause exception)원인 예외 : SpaceException새로운 예외 생성 : InstallException→ initCause 메소드로 예외ie의 원인예외로 e
모든 클래스의 최고 조상. 오직 11개의 메소드만을 가지고 있다.notify(), wait()등은 쓰레드와 관련된 메소드다.protected 들은 자손, 같은 패키지밖에 못쓰기 때문에 다른데서 쓰기위해선 오버라이딩을 통해 public으로 변경해줘야 함.public Cl
: 객체의 해시코드(hash code)를 반환하는 메소드↳ 해시코드 : 정수값, 해시 알고리즘에서 사용Object 클래스의 hashCode()는 객체의 주소를 int로 변환해서 반환OS에 작성돼있는 메소드가 객체의 주소를 int로 변환해서 반환해줌.↳ 주소를 이용하기
: 데이터(char\[], 문자 배열) + 메소드텍스트(문자열 관련)문자열을 다루기 위한 클래스내용을 변경할 수 없는 불변(immutable) 클래스덧셈 연산자(+)를 이용한 문자열 결합은 성능이 떨어짐.(문자열은 내용을 변경할 수가 없어서 계속 새로운 객체가 만들어지
자바의 정석 기초편 : ch 9- 11
join()은 여러 문자열 사이에 구분자를 넣어서 결합한다.
String 처럼 문자형 배열(char\[])을 내부적으로 가지고 있다.그러나, String과 달리 내용을 변경할 수 있다.(mutable)↳ append()는 지정된 내용을 StringBuffer에 추가 후, StringBuffer의 참조를 반환한다.↳ 본인의 주소
↳ append()는 StringBuffer를 반환하기 때문에 결과가 StringBuffer라서 뒤에 이어서 append()를 호출할 수 있음 → 메소드 체이닝(method chaining, 메소드를 이어서 작성하는 것)자바의 정석 기초편 : ch 9- 19, 20
StringBuffer ≒ StringBuilder그러나, StringBuffer는 동기화 되어있지만 StringBuilder는 동기화 안돼 있음.동기화 : 데이터 보호, 멀티 쓰레드에 안전하게 하는 것(thread-safe)싱글쓰레드 : 한번에 1개 작업 → 지금까지
: 8개의 기본형을 객체로 다뤄야할 때 사용하는 클래스java: 객체지향언어(모든 것이 객체), 그러나 기본형은 객체가 아님→ java는 90%가 객체다. 왜냐하면 기본형이 있기 때문에 → 기본형이라는 예외를 둔 이유? 성능 때문에기본형은 직접접근이 가능한데, 참조형은
Integer 래퍼클래스는 intValue()메소드를 사용해서 int값을 얻을 수 있음위와 같이 Long 래퍼클래스 → longValue() → long 값 얻을 수 있음문자열 → 기본형문자열 → 래퍼클래스n진법의 문자열을 숫자로 변환
: 기본형과 참조형간의 자동변환JDK1.5 이전에는 기본형과 참조형간의 연산이 불가능이후에는 Autoboxing과 unboxing이 가능해지면서 연산이 가능해졌음.↳ !!컴파일러!!가 자동으로 래퍼클래스를 기본형으로 변환시켜줌↳ 컴파일러가 실제적으로 만들어주는 코드를
날짜와 시간 java.util.Date 날짜와 시간을 다룰 목적으로 만들어진 클래스(JDK 1.0, 1995년 말~) Date의 메소드는 거의 deprecated(앞으로 사용X)되었지만, 여전히 쓰고 있다.(예전부터 사용해서 뿌리가 깊기 때문에 아직 사용)
날짜를 지정하는 방법. 월(Month)이 0부터 시작한다는 점에 주의!시간 지정 방법: 년월일은 한 번에 셋팅할수있는데 시분초는 못함. 따로 해줘야 함.clear()는 Calendar객체의 모든 필드를 초기화↳ 1970년 1월 1일 00:00:00 : EPOCH Tim
: java.text 패키지의 DecimalFormat(십진수), SimpleDateFormat(날짜형식화)↳ 10진수를 지수형식으로 표현하고 싶을 때↳ Number : 모든 숫자 래퍼클래스의 최고 조상↳ <참고> Integer.parseInt()는 콤마(,)가
쓰이는 기호들↳ df에서 parse()로 date를 뽑아내고, 뽑아낸 데이터를 format()으로 문자열로 저장.시간과 관련된 기호들자바의 정석 기초편: ch10- 13~ 16
: 여러 객체(데이터)를 모아놓은 것을 의미: 표준화, 정형화된 체계적인 프로그래밍 방식↳ 정해진대로 따라하면 되니까 생산성↑, 유지보수가 쉬움: 컬렉션(다수의 객체)를 다루기 위한 표준화된 프로그래밍 방식: 컬렉션을 쉽고 편리하게 다룰 수(저장,삭제,검색,정렬) 있는
↳ Collection 인터페이스는 List와 Set의 자손 → List와 Set은 Collection 인터페이스의 메소드를 모두 가지고 추가로 더 가짐.set = 집합자바의 정석 기초편 : ch11- 3~6
: 기존의 Vector를 개선한 것으로 구현원리와 기능적으로 동일↳ Vector : 동기화O, ArrayList: 동기화X 라는 차이점List 인터페이스를 구현하므로, 저장순서가 유지되고 중복을 허용한다.데이터의 저장공간으로 배열을 사용한다.(배열기반)1) ArrayL
장점 : 배열은 구조가 간단하고 데이터를 읽는 데 걸리는 시간(접근시간, access time)이 짧다.단점: 크기를 변경해야 하는 경우 새로운 배열을 생성 후 데이터를 복사해야 함. ↳ ① 더 큰 배열 생성 ② 데이터 복사 ③ 참조 변경: 크기 변경을 피하기 위해 충
: LIFO 구조. 마지막에 저장된 것을 제일 먼저 꺼내게 된다.: FIFO 구조. 제일 먼저 저장한 것을 제일 먼저 꺼낸다.Stack의 메소드Queue의 메소드1) Queue를 직접 구현2) Queue를 구현한 클래스를 사용 ✔︎→ 많은 클래스들 중 LinkedLis
1) 수식계산2) 수식 괄호검사 - 갯수 맞는지↳ 괄호 (를 넣어놓고, )를 닫으면 ( 1개가 )와 짝이맞아나와서 빈 스택이 됨"((3+5\*8)" 에서, 여기는 (를 2개 넣었는데 )를 하나넣어서 (의 짝이 하나 없으므로 스택에 남아있게 됨.isEmpty() → fa
: 컬렉션에 저장된 데이터를 접근(읽기)하는데 사용되는 인터페이스 (읽어오는 방법을 표준화한 것)Enumeration은 Iterator의 구버전 (거의 같음)ListIterator는 Iterator의 접근성을 향상시킨 것(단방향 → 양방향)↳ 우리는 Iterator 쓰
: 배열을 다루기 편리한 메소드(static) 제공(비슷한 static 클래스: Math, objects, collections : 유용한 메소드(util) 제공)오버로딩이 돼있어서 아무배열 넣어도 \[] 문자열로 반환해줌: sort로 정렬하고, binarySearch
: 객체 정렬에 필요한 메소드(정렬기준 제공)를 정의한 인터페이스Comparable : 기본 정렬기준을 구현하는데 사용 (default)Comparator : 기본 정렬기준 외에 다른 기준으로 정렬하고자 할 때 사용compare()와 compareTo()는 두 객체의
set 인터페이스를 구현한 대표적인 컬렉션 클래스 ( 가장 일반적 )순서를 유지하려면, LinkedHashSet클래스를 사용하면 된다.객체를 저장하기 전에 기존에 같은 객체가 있는지 확인↳ 같은 객체가 없으면 저장하고, 있으면 저장하지 않는다.↳ boolean add(
이진 탐색 트리(binary search tree)로 구현. 범위 탐색(from~to)과 정렬에 유리이진 트리는 모든 노드가 최대 2개(0~2)의 하위 노드를 가짐↳ 각 요소(node)가 나무(tree) 형태로 연결(LinkedList(1개씩 연결)의 변형)부모보다 작
: Map 인터페이스를 구현. 데이터를 키와 값의 쌍으로 저장Map 인터페이스를 구현한 대표적인 컬렉션 클래스순서를 유지할 필요가 있을 때: LinkedHashMap 사용범위 검색과 정렬에 유리한 컬렉션 클래스HashMap보다 데이터 추가, 삭제에 시간이 더 걸림(비교
Collections? : 컬렉션을 위한 메소드(static)를 제공, like Objects(객체), Arrays(배열) 1) 컬렉션 채우기, 복사, 정렬, 검색 - fill(), copy(), sort(), binarySearch() 등 2) 컬렉션의 동기화 - s
자바의 정석 기초편 : ch 11 - 56
: 컴파일시 타입을 체크해주는 기능(compile-time type check) - JDK1.5→ 컴파일때 타입을 확인할 수 있긴했는데, 한계가 있었음. 그 한계를 넘게해주는게 지네릭스객체의 타입 안정성을 높이고 형변환의 번거로움을 줄여줌↳ 지네릭스를 사용하지 않을 때
: 지네릭 클래스를 작성할 때, Object타입(일반클래스) 대신 타입변수(E, 지네릭 클래스)를 선언해서 사용타입변수 대신 실제 타입이 지정되면, 형변환 생략가능자바의 정석 기초편 : ch 12 - 2,3
↳ 타입변수 T에는 실제 타입을 넣어주면 됨. 객체를 만들 때 마다 변경될 수 있음.1) 참조 변수와 생성자에 대입된 타입은 일치해야 한다.↳ 조상, 자손 관계도 안됨. 일치해야해!!2) 지네릭 클래스간의 다형성은 성립(여전히 대입된 타입은 일치해야함)3) 매개변수의
: 클래스를 작성할 때, Object타입 대신 T와 같은 타입변수를 사용: 여러 개의 타입변수가 필요한 경우, 콤마를 구분자로 선언자바의 정석 기초편 : ch12 - 7~8
: extends로 대입할 수 있는 타입을 제한한다.인터페이스인 경우에도 extends를 사용: 타입 변수에 대입하는 것은 인스턴스 별로 다르게 할 수 있음↳ new 연산자 다음에 T 사용 불가!자바의 정석 기초편 : ch 12 - 9 ~ 11
: 하나의 참조 변수로 대입된 타입이 다른 객체를 참조 가능↳ 와일드 카드를 이용해서 list라는 참조변수 하나로 서로 다른 지네릭 타입(Tv, Audio)이 대입된 객체들을 다룰 수 있음↳ Fruit의 자손인 Apple도 하나의 매개변수(box)에 들어올 수 있음1)
지네릭 타입과 원시 타입 간의 형변환은 바람직하지 않다.(경고 발생)서로 다른 타입이 대입된 지네릭타입들끼리는 형변환 안됨.와일드 카드가 사용된 지네릭 타입으로는 형변환 가능↳ String은 Object의 자손이기 때문에 형변환이 가능↳ 3번째 줄 new 연산자 앞에
: 관련된 상수들을 같이 묶어 놓은 것. java는 타입에 안전한 열거형을 제공(값&타입 둘다 체크)1) 열거형을 정의하는 방법2) 열거형 타입의 변수를 선언하고 사용하는 방법3) 열거형 상수의 비교에 ==와 compareTo() 사용 가능: 모든 열거형은 Enum의
불연속적인 열거형 상수의 경우, 원하는 값을 괄호()안에 적는다.괄호를 사용하려면, 인스턴스 변수와 생성자를 새로 추가해 줘야 한다.열거형의 생성자는 묵시적으로 private이므로, 외부에서 객체생성 불가방향을 회전시키는 메소드, num의 값만큼 90도씩 시계방향으로
: 주석처럼 프로그래밍 언어에 영향을 미치지 않으며, 유용한 정보를 제공: java에서 제공자바의 정석 기초편 : ch 12 - 23, 24
오버라이딩을 올바르게 했는지 컴파일러가 체크하게 한다. (javac.exe)오버라이딩할 떄 메서드 이름을 잘못적는 실수를 하는 경우가 많다.오버라이딩할 때는 메서드 선언부 앞에 @Override를 붙이면, 컴파일할 때 잘못적었다고 에러로 알려줌앞으로 사용하지 않을 것을
: 애너테이션을 위한 애너테이션: java.lang.annotation 패키지에 포함애너테이션을 정의할 때, 적용대상 지정에 사용애너테이션이 유지(retention)되는 기간을 지정하는데 사용SOURCE, RUNTIME을 자주 씀컴파일러에 의해 사용되는 애너테이션의 유
애너테이션을 직접 만들어 쓸 수 있다.애너테이션의 메서드는 추상메서드이며, 애너테이션을 적용할 때 지정(순서x)자신이 아닌 다른 애너테이션을 포함할 수 있다. (@DateTime)애너테이션을 사용하려면 요소의 값들을 다 써줘야 한다.적용시 값을 지정하지 않으면, 사용될
프로세스 : 실행중인 프로그램, 자원(resources, 메모리, cpu 등)과 쓰레드로 구성쓰레드 : 프로세스 내에서 실제 작업을 수행모든 프로세스는 최소한 1개의 쓰레드를 가지고 있다.프로세스 : 쓰레드 = 공장 : 일꾼싱글 쓰레드 프로세스 : 자원 + 쓰레드멀티
자바는 단일상속만 가능하기 때문에 다른 클래스를 상속받을 경우도 대비해서 밑에 방법이 더 좋다.\-> 상속받던, 구현하던 run이라는 메서드를 구현해야하는 것은 동일하다.\-> thread를 상속받는 경우에는 this(생략가능).getName()으로 호출하고, runn
: main 메서드의 코드를 수행하는 쓰레드: 쓰레드는 '사용자 쓰레드'(main)와 '데몬 쓰레드'(보조) 두 종류가 있다.실행중인 사용자 쓰레드가 하나도 없을 때 프로그램은 종료된다.Call stack(호출스택)에 main, run 쓰레드 2개가 있을 때,main
작업의 중요도에 따라 쓰레드의 우선순위를 다르게 하여 특정 쓰레드가 더 많은 작업시간을 갖게 할 수 있다.자바에서는 우선순위를 1~10까지 보유할 수 있게 함지정해주지 않으면 기본값은 5로 설정됨우선순위에 따라 할당받는 시간이 다름. 높으면 더 할당 많이받음winOS
: 일반 쓰레드(non-daemon thread)의 작업을 돕는 보조적인 역할을 수행일반쓰레드가 모두 종료되면 자동적으로 종료된다.가비지컬렉터(gc), 자동저장, 화면 자동갱신 등에 사용된다.무한루프와 조건문을 이용해서 실행 후 대기하다가 특정조건이 만족되면 작업을 수
: 현재 쓰레드를 지정된 시간동안 멈추게 한다.sleep, yield는 static 메서드이고 자기자신에만 해당된다.(내가 나를 자게할 순 있지만, 남을 재울순 없음)예외처리를 해야한다. (InturruptedException이 발생하면 깨어남)특정 쓰레드를 지정해서
: 멀티쓰레드 프로세스에서는 다른 쓰레드의 작업에 영향을 미칠 수 있다.: 진행중인 작업이 다른 쓰레드에게 간섭받지 않게 하려면 '동기화'가 필요쓰레드의 동기화 - 한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 못하게 막는 것동기화 하려면 간섭받지 않아야 하는 문
java : oop언어jdk 1.8부터 함수형언어의 기능을 추가시켰음.\-> oop언어 겸 함수형 언어인데, 함수형이 얼마 없긴 함함수(메서드)를 간단한 '식(expression)'으로 표현하는 방법익명함수(이름이 없는 함수, anonymous function)반환타입
: 단 하나의 추상메서드만 선언된 인터페이스 -> 람다식을 다루기 위해 사용@FunctionalInterface 애너테이션을 붙여주는게 좋음작성 방법 : new 조상이름(클래스||인터페이스) {멤버 작성}함수형 인터페이스 타입의 참조변수로 람다식을 참조할 수 있음(단,
: 자주 사용되는 다양한 함수형 인터페이스를 제공\-> 3번에서, 원래는 Function<T,R>처럼 Predicate<Integer, Boolean>이라고 써야하지만, 반환타입이 항상 Boolean이기 때문에 Boolean은 쓰지 않는다.매개변수가 2개인
: 다양한 데이터소스(컬렉션, 배열 등)를 표준화된 방법으로 다루기 위한 것List,Set,Map을 표준화된 방법으로 다루려고 컬렉션프레임워크로 정의했는데, list&set/map의 사용방법이 달라서 반쯤만 표준화됐다. 그러나 jdk1.8이후로 스트림이 나오면서 진짜
Collection 인터페이스의 stream()으로 컬렉션을 스트림으로 변환Stream<E> stream() -> collection인터페이스의 메서드객체 배열로부터 스트림 생성하기기본형 배열로부터 스트림 생성하기스트림 만들기 - 임의의 수난수를 요소로 갖는 스
: T 타입 객체의 래퍼클래스 - Optional< T>T가 있기때문에 모든 종류의 객체를 저장할 수 있고, null도 저장가능하다.\-> 왜 중요한가? 간접적으로 null을 다루기 위함! null을 직접 다루는 것은 위험하다.!1) NullpointerExcep