<java.lang 패키지>

http://web.deu.edu.tr/doc/oreily/java/langref/ch10_js.htm

 

[Chapter 10] The java.lang Package

The package java.lang contains classes and interfaces that are essential to the Java language. These include: Because the classes in the java.lang package are so essential, the java.lang package is implicitly imported by every Java source file. In other wo

web.deu.edu.tr

 

<java.util 패키지>

 - 컬렉션 클래스들이 대부분을 차지

http://web.deu.edu.tr/doc/oreily/java/fclass/ch17_js.htm

 

[Chapter 17] The java.util Package

The package java.util contains a number of useful classes and interfaces. Although the name of the package might imply that these are utility classes, they are really more important than that. In fact, Java depends directly on several of the classes in thi

web.deu.edu.tr

 

<Object 클래스>

객체 비교 equals()

 - 두 객체를 비교해서 논리적으로 동등하면 true (객체가 같은지 여부를 보는게 아닌 객체가 저장하고 있는 데이터가 동일한지를 비교)

 - Object의 equals()를 직접 사용하지 않고 하위 클래스에서 재정의하여 논리적 비교를 하려고 할 때 equals() 메소드를 재정의하여 필드가 같음을 비교하는데 사용

 - instanceof 연산자로 기준 객체와 동일한 타입인지 먼저 체크한다.

 

객체 해시코드 hashCode()

 - 객체를 식별할 하나의 정수값

 - 객체의 메모리 번지를 이용해서 해시코드를 리턴. 객체마다 다른 값을 가진다.=.

 - 논리적 동등 객체를 확인하려는 경우에는 equals() 뿐만 아니라 hashCode()도 재정의 해줘야 한다.

 ex) String의 hashCode()는 같은 문자열인 경우 동일한 해시코드를 리턴한다.

 

객체 문자 정보 toString()

 

객체 복제 clone()

 - thin clone: 필드값만 복사해서 객체를 복제

 - clone()으로 객체를 복제하려면 원본 객체는 반드시 java.lang.Cloneable 인터페이스를 구현하고 있어야 한다.

 

deep clone

 - Object의 clone() 메소드를 재정의해서 참조 객체를 복제하는 코드를 직접 작성한다.

 

객체 소멸자 finalize()

 

<Objects 클래스>

 - Object의 유틸리티 클래스

 

객체 비교 compare(T a, T b, Comparator<T>c)

 - 두 객체를 Comparator로 비교해서 int 값을 리턴

 

동등비교 equals()와 deepEquals()

해시코드 생성 hash(). hashCode()

널 여부 조사 isNull(), nonNull(), requireNonNull()

객체 문자 정보 toString()

 

<System 클래스>

 - 운영체제의 일부 기능을 이용할 수 있다.

 - 프로그램 종료, 키보드 입력, 모니터 출력, 메모리 정리, 현재 시간 읽기, 시스템 프로퍼티, 환경 변수 읽기 등

 

현재시각읽기 currentTimeMillis(), nanoTime()

 - 1/1000초와 1/10^9초 단위의 long 값을 리턴 한다.

 

시스템 프로퍼티 읽기 getProperty()

환경 변수 읽기 getenv()

 - 프로그램상의 변수가 아니라 OS에서 Nave과 Value로 관리되는 문자열 정보

 

<Class 클래스>

 - 클래스와 인터페이스의 메타 데이터를 관리한다.

 

리플렉션

 - 클래스의 생성자, 필드, 메소드 정보를 알아냄

 - java.lang.reflect 패키지에 소속

 

동적 객체 생성 newInstance()

 

<String 클래스>

리턴 타입 매소드명(매개변수) 설명
char charAt(int index) 특정 위치의 문자 리턴
boolean equals(Object anObject) 두 문자열을 비교
byte[] getBytes() byte[]로 리턴
byte[] getBytes(Charset charset) 주어진 문자셋으로 인코딩한 byte[]로 리턴
int indexOf(String str) 문자열 내에서 주어진 문자열의 위치를 리턴
int length() 총 문자의 수를 리턴
String replace(CharSequence target, CharSequence replacement) target 부분을 replacement로 대치한 새로운 문자열을 리턴
String substring(int beginIndex) beginIndex 위치에서 끝까지 잘라낸 새로운 문자열을 리턴
String substring(int beginIndex, int endIndex) beginIndex 위치에서 endIndex 전까지 잘라낸 새로운 문자열 리턴
String toLowerCase() 알파벳 소문자로 변환한 새로운 문자열 리턴
String toUpperCase() 알파벳 대문자로 변환한 새로운 문자열 리턴
String trim() 앞뒤 공백을 제거한 새로운 문자열 리턴
String

valueOf(int i)

valueOf(double d)

기본 타입값을 문자열로 리턴

 

구분자 기준으로 문자열 분리하기

 - String split("구분자1|구분자2|...") : 파이프(|) 기호로 연결한 구분자들의 정규표현식을 매개값으로 준다.

 - StringTokenizer

 

<StringBuffer, StringBuilder 클래스>

메소드 설명
append(...) 문자열 끝에 주어진 매개값을 추가
insert(int offset, ...) 문자열 중간에 주어진 매개값을 추가
delete(int start, int end) 문자열의 일부분을 삭제
deleteCharAt(int index) 문자열에서 주어진 index의 문자를 삭제
replace(int start, int end, String str) 문자열의 일부분을 다른 문자열로 대치
StringBuilder reverse() 문자열의 순서를 뒤바꿈
setCharAt(int index, char ch) 문자열에서 주어진 index의 문자를 다른 문자로 대치

정규표현식, Pattern 클래스

 - java.util.regex.Pattern

 

기호 설명
[]

한 개의 문자

[abc]: a, b, c 중 하나의 문자

[^abc]: a, b, c 이외의 하나의 문자

[a-zA-Z]: a~z, A~Z 중 하나의 문자

\d 한 개의 숫자, [0-9]와 동일
\s 공백
\w 한 개의 알파벳 또는 한 개의 숫자, [a-zA-Z_0-9]와 동일
? 없음 또는 한 개
* 없음 또는 한 개 이상
{n} 정확히 n개
{n,} 최소 n개
{n,m} n개에서부터 m개까지
() 그룹핑

 

정규 표현식 예

 - 전화번호: (02|010)-\d{3,4}-\d{4}

 - 이메일: \w+@\w+\.\w(\.\w+)?

 

Arrays 클래스

Wrapper 클래스

 - Boxing, Unboxing

Math, Random 클래스

Date, Calendar 클래스

Format 클래스

 

java.time 패키지

클래스명 설명
LocalDate 로컬 날짜 클래스
LocalTime 로컬 시간 클래스
LocalDateTime 로컬 날짜 및 시간 클래스
ZonedDateTime 특정 타임존의 날짜와 시간 클래스
Instant 특정 시점의 Time-Stamp 클래스

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

[이것이자바다]8. 인터페이스  (0) 2020.04.20
[이것이자바다]7. 상속  (0) 2020.04.20
[이것이자바다]6. 클래스  (0) 2020.04.19
[이것이 자바다]5. 참조 타입  (0) 2020.04.19
[이것이 자바다]3. 연산자  (0) 2020.04.18

interface: 객체의 사용 방법을 정의한 타입

 - 개발 코드가 인터페이스의 메소드를 호출하면 인터페이스는 객체의 메소드를 호출시킨다.

 - 개발 코드를 수정하지 않고, 사용하는 객체를 변경할 수 있다.(실행내용과 리턴값을 다양화할 수 있다)

 

[ public ] interface 인터페이스명 { ... }

 - 인터페이스는 상수와 메소드만을 구성 멤버로 가진다.

    > Constant Field, Abstract Method, Default Method, Static Method

 - 인터페이스에 선언된 추상 메소드는 모두 public abstract 특성을 갖기 때문에 생략하더라도 자동적으로 컴파일 과정에서 붙게 된다.

 - 인터페이스에 선언된 메소드는 모두 public 특성을 갖기 때문에 생략해도 자동적으로 컴파일 과정에서 붙게 된다.

 

인터페이스 구현(implements)

 - 인터페이스에 선언된 추상 메소드에 대응하는 실체 메소드를 구현 클래스가 작성하지 않으면 구현 클래스는 자동적으로 추상 클래스가 된다. 클래스 선언부 abstract 키워드 추가

 

익명 구현 객체

인터페이스 변수 = new 인터페이스() {

   // 인터페이스에 선언된 추상 메소드의 실체 메소드 선언

};

 

타입 변환과 다형성

 

인터페이스 상속

 - 클래스와는 달리 다중 상속을 허용

 - 하위 인터페이스로 타입 변환이 되면 상/하위 인터페이스에 선언된 모든 메소드를 사용할 수 있으나, 상위 인터페이스로 타입 변환되면 상위 인터페이스에 선언된 메소드만 사용 가능하다.

 - 부모 인터페이스에 디폴트 메소드가 정의 되어 있을 경우, 자식 인터페이스에서 디폴트 메소드를 활용하는 3가지 방법

    > 디폴트 메소드를 단순히 상속만 받는다

    > 재정의해서 실행 내용을 변경한다

    > 추상 메소드로 재선언한다

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

[이것이자바다]11. 기본 API 클래스  (0) 2020.05.03
[이것이자바다]7. 상속  (0) 2020.04.20
[이것이자바다]6. 클래스  (0) 2020.04.19
[이것이 자바다]5. 참조 타입  (0) 2020.04.19
[이것이 자바다]3. 연산자  (0) 2020.04.18

부모 생성자 호출

자식 객체를 생성하면, 부모 객체가 먼저 생성되고 자식 객체가 그 다음에 생성된다.

 - 부모 생성자는 자식 생성자의 맨 첫 줄에서 호출된다.(super())

 

메소드 오버라이딩(@Override)

 - 부모의 메소드와 동일한 시그니처

 - 접근 제한을 더 강하게 할 수 없다.

 - 새로운 Exception throws 불가

 

super: 부모 객체를 참조하는 키워드

 - super.부모메소드();

 

final 클래스, 메소드

 - 클래스의 경우 상속할 수 없는 클래스가 된다.(ex. String 클래스)

 - 메소드의 경우 오버라이딩할 수 없다.

 

타입 변환과 다형성

 - 다형성: 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질

    > 부모 클래스로 타입 변환을 허용. 즉 부모 타입에 모든 자식 객체가 대입될 수 있다.

 - 자동타입변환(Promotion)

    > 부모클래스 변수 = 자식클래스타입;

 - 부모 타입으로 자동 타입 변환된 이후에는 부모 클래스에 선언된 필드와 메소드만 접근이 가능하다. 그러나 메소드가 자식 클래스에서 오버라이딩되었다면 자식 클래스의 메소드가 대신 호출된다.

 - 강제타입변환(Casting)

    > 자식클래스 변수 = (자식클래스) 부모클래스타입;

    > 모든 부모 타입을 자식 클래스 타입으로 강제 변환할 있는 것이 아니고, 자식 타입이 부모 타입으로 자동 변환한 후, 다시 자식 타입으로 변환할 때만 강제 타입 변환을 사용할 수 있다.

    > 자식 타입에 선언된 필드와 메소드를 사용해야되는 경우 Casting을 한다.

 - 객체타입확인(instanceof): 부모 변수가 참조하는 객체가 부모 객체인지 자식 객체인지 확인하는 연산자

    > parent instanceof Child

 

추상 클래스(abstract class)

 - 실체 클래스의 공통되는 필드와 메소드를 추출해서 만드는 클래스로 객체를 직접 생성해서 사용할 수 없다.

 - 일반 클래스와 마찬가지로 필드, 생성자, 메소드 선언할 수 있다.

 - new 연선자로 직접 생성자 호출은 할 수 없지만 자식 객체가 생성될 때 super(...)를 호출해서 추상 클래스 객체를 생성하므로 추상 클래스도 생성자가 반드시 있어야 한다.

 

추상 메소드와 오버라이딩

 - 추상 메소드는 추상 클래스에서만 선언할 수 있다. 메소드의 선언부만 있고 실행 내용인 중괄호 {}가 없는 메소드

 - 하위 클래스가 반드시 실행 내용을 채우도록 해야하는 경우 추상 메소드를 선언한다.

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

[이것이자바다]11. 기본 API 클래스  (0) 2020.05.03
[이것이자바다]8. 인터페이스  (0) 2020.04.20
[이것이자바다]6. 클래스  (0) 2020.04.19
[이것이 자바다]5. 참조 타입  (0) 2020.04.19
[이것이 자바다]3. 연산자  (0) 2020.04.18

인스턴스 멤버: 객체를 생성한 후 사용할 수 있는 필드와 메소드

this: 객체 내부에서 인스턴스 멤버에 접근하기 위한 키워드

 

정적 멤버: 객체를 생성하지 않고 사용할 수 있는 필드와 메소드(클래스에 소속된 멤버, 클래스 멤버)

static block: 클래스가 메모리로 로딩될 때 자동적으로 실행되는 block

 > 인스턴스 필드는 생성자에서 초기화하지만, 정적 필드는 객체 생성 없이도 사용해야 하므로 생성자에서 초기화 작업을 할 수 없다.

 > 정적 메서드, 블록 내부에는 인스턴스 필드나 인스턴스 메소드를 사용할 수 없다. 객체 자신의 참조인 this 키워드도 사용 불가. 객체를 먼저 생성하고 참조 변수로 접근해야 한다.

 

final 필드: 초기값이 저장되면 프로그램 실행 도중에 수정 할 수 없음

상수(static final)

 

접근 제한자(access modifier)

 

Annotaion

 - 컴파일러에게 코드 문법 에러를 체크하도록 정보를 제공

 - 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보를 제공

 - 런타임 시 특정 기능을 실행하도록 정보를 제공

 

public @inteface AnnotaionName {

   타입 elementName() [default 값];

}

 

적용 대상: @Target

 > java.lang.annotaion.ElementType 열거 상수

유지 정책: @Retention

 > java.lang.annotation.RetentionPolicy 열거 상수

 

Reflection: 런타임 시에 클래스의 메타 정보를 얻는 기능

 > java.lang.reflect

리턴 타입 메소드명(매개변수) 설명
Field[] getFields() 필드 정보를 Field 배열로 리턴
Constructor[] getConstructors() 생성자 정보를 Constructor 배열로 리턴
Method[] getDeclaredMethods() 메소드 정보를 Method 배열로 리턴

method.invoke(new 객체()) : 해당 객체를 생성하고 생성된 객체의 메소드를 호출

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

[이것이자바다]8. 인터페이스  (0) 2020.04.20
[이것이자바다]7. 상속  (0) 2020.04.20
[이것이 자바다]5. 참조 타입  (0) 2020.04.19
[이것이 자바다]3. 연산자  (0) 2020.04.18
[이것이 자바다]2. 변수, 타입  (0) 2020.04.18

reference type: 배열 타입, 열거 타입, 클래스, 인터페이스

 

Runtime Data Area

https://www.geeksforgeeks.org/jvm-works-jvm-architecture/

 

How JVM Works - JVM Architecture? - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

Method Area

 - *.class 들을 클래스 로더로 읽어 클래스별로 런타임상수풀, 필드 데이터, 메소드 데이터, 메소드 코드, 생성자 코드 등을 분류해서 저장한다. JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역이다.

 

Heap Area

 - 객체와 배열이 생성되는 영역으로 이 영역에 생성된 객체나 배열은 JVM 스택 영역의 변수나 다른 객체의 필드에서 참조 한다.

 

JVM Stack Area

 - 각 스레드 마다 하나씩 존재하며 스레드가 시작될 때 할당된다. 메소드를 호출할 때마다 Frame을 push하고 종료되면 pop한다.

 - Frame 내부에는 로컬 변수 스택이 있다. 기본 타입 변수와 참조 타입 변수가 push, pop 된다. 변수가 이 영역에 생성되는 시점은 초기화 될 때, 즉 최초로 변수에 값이 저장될 때이다.

 

배열 타입

 - 배열 선언, 생성, 길이

 

 - Program Arguments: "java 클래스"로 프로그램을 실행시키면 JVM은 프로그램 인자 String 배열을 먼저 생성하고 main() 메소드를 호출할 때 매개값으로 전달한다.

  > Edit Configurations...

객체 참조 배열

 

배열 복사

 - System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

 - System.arraycopy(srcArr, 0, destArr, 0, srcArr.length)

 

shallow copy: 새로운 변수와 기존 변수의 참조 객체가 같음

deep copy: 참조하는 객체를 별도로 생성

 

열거 타입(enumeration type)

 - 추후 추가 예정

 

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

[이것이자바다]7. 상속  (0) 2020.04.20
[이것이자바다]6. 클래스  (0) 2020.04.19
[이것이 자바다]3. 연산자  (0) 2020.04.18
[이것이 자바다]2. 변수, 타입  (0) 2020.04.18
[이것이 자바다]1. 자바 시작  (0) 2020.04.18

String 비교 연산

이것이 자바다 p.90 내용과 다름 확인 필요!

 - 자바는 문자열 리터럴이 동일하다면 동일한 String 객체를 참조하도록 되어 있다.

 - str1과 str2는 동일한 객체, str3는 새로운 다른 객체

 - 예상 결과: true, false, true, true

 

비트 연산자(추후 공부 후 내용 추가)

 - 정수 타입만 가능

 - 비트 논리 연산자와 비트 이동 연산자로 구분

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

[이것이자바다]7. 상속  (0) 2020.04.20
[이것이자바다]6. 클래스  (0) 2020.04.19
[이것이 자바다]5. 참조 타입  (0) 2020.04.19
[이것이 자바다]2. 변수, 타입  (0) 2020.04.18
[이것이 자바다]1. 자바 시작  (0) 2020.04.18

literal: 소스 코드 내에서 직접 입력된 값

constant: 값을 한 번 저장하면 변경할 수 없는 변수

 

정수 리터럴

 - 0, 10, -100: 10진수

 - 02, -04: 0으로 시작되는 리터럴은 8진수

 - 0x3, 0xB, 0xBC01: 0x로 시작되는 리터럴은 16진수

 

실수 리터럴

 - 0.1, -3.12: 10진수 실수

 - 3e3 = 3 * 10^3

 - 0.4E-4 = 0.4 * 10^(-4)

 

primitive type

 - 정수 타입: byte(8), char(16), short(16), int(32), long(64)

 - 실수 타입: float(32), double(64)

 - 논리 타입: boolean(8)

 

정수 타입 값 범위: -2^(n-1) ~ 2^(n-1)-1

 

char 타입

 - 유니코드 0~65535 범위의 2byte 크기를 가진 정수 값(2^16개)

 - 0~127은 ASCII문자, 44032~55203은 한글 11172자 할당

 - 'A' = 65 = '\u0041'

 

실수 타입

부동 소수점 방식: +- m * 10^n

 - 부호, 가수(m), 지수(n)

 - float: 부호(1) + 지수(8) + 가수(23)

 - double: 부호(1) + 지수(11) + 가수(52)

 

타입 변환

자동 타입 변환(Promotion): 작은 크기 타입이 큰 크기 타입에 저장될 때 발생

 - 큰 크기 타입 = 작은 크기 타입

강제 타입 변환(Casting): 강제적으로 큰 데이터 타입을 작은 데이터 타입으로 쪼개어서 저장

 - 작은 크기 타입 = (작은 크기 타입) 큰 크기 타입

연산식에서의 자동 타입 변환: 서로 다른 타입의 피연산자(operand)가 있을 경우 두 피연산자 중 크기가 큰 타입으로 자동 변환된 후 연산을 수행한다.

 

정수 기본(리터럴, 연산): int

실수 기본(리터럴, 연산): double

 

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

[이것이자바다]7. 상속  (0) 2020.04.20
[이것이자바다]6. 클래스  (0) 2020.04.19
[이것이 자바다]5. 참조 타입  (0) 2020.04.19
[이것이 자바다]3. 연산자  (0) 2020.04.18
[이것이 자바다]1. 자바 시작  (0) 2020.04.18

Dynamic Loading: 애플리케이션이 실행될 때 모든 객체가 생성되지 않고, 객체가 필요한 시점에 클래스를 동적 로딩해서 객체를 생성한다. 프로그램 수정 필요시 해당 클래스만 수정하면 되므로 전체 애플리케이션을 다시 컴파일할 필요가 없어 유지보수가 쉽다.

 

JVM

http://net-informations.com/java/intro/jvm.htm

 

What is Java virtual machine?

What is Java virtual machine? Java Virtual Machine (JVM) is a specification that provides runtime environment in which java bytecode can be executed. As the name implies, the JVM acts as a “virtual” machine or processor. Java's platform independence consis

net-informations.com

Java SE의 구현체

 - JRE = JVM + 표준 클래스 라이브러리

 - JDK = JRE + 개발에 필요한 도구

 

API 다큐먼트: http://docs.oracle.com/javase/8/docs/api 

 

Java Platform SE 8

 

docs.oracle.com

 

 

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

[이것이자바다]7. 상속  (0) 2020.04.20
[이것이자바다]6. 클래스  (0) 2020.04.19
[이것이 자바다]5. 참조 타입  (0) 2020.04.19
[이것이 자바다]3. 연산자  (0) 2020.04.18
[이것이 자바다]2. 변수, 타입  (0) 2020.04.18

+ Recent posts