본문 바로가기

학원/JAVA - 학원

패키지

728x90

주요 패키지

java.lang

- 자바 language

- 문자열, 수학관련 등

- 자동

 

java.util

- 자바 유틸리티

- 날짜, 시간 관련 클래스와 인터페이스들

 

java.io

- 입출력 관련된 클래스와 인터페이스들

 

java.awt

- 자바 GUI 관련 클래스와 인터페이스들(그래픽 관련)

 

JAVA Object HashCode(객체 해시코드)

- 객체 고유의 서명을 정수값으로 표현

- 내부주소

 

Object 클래스

- java.lang 패키지 안에 있으며, 가장 꼭대기에 있는 슈퍼클래스

- 모든 클래스에 강제로 상속되어 있으며, 따로 상속 안하고 사용 가능

 

- boolean equals : 문자열이 같으면 참(매개변수로 객체를 받음)

- getClass : 예외처리할 때 사용, 현재 클래스에 실행되고 있는 객체를 리턴

- hashCode : 객체 고유의 서명을 정수값으로 표현

- toString : 객체에 대한 문자열형태로 리턴

 

<예제>

 

객체를 문자열로 변환

 

1.

둘은 같은 것으로 우리가 왼쪽처럼 입력하면 자동으로 오른쪽으로 변환해서 출력한다.

 

2.

toString은 화면에는 보이지 않지만 자동으로 오버라이딩되며, 이를 .을 붙여서 출력하는 것도 가능하다.

 

<예제>

 

객체 비교(==)와 equals()

 

a, b 2개의 객체 생성

c를 a로 받아서 c는 a객체 참조

조건문에서 객체를 비교하는데, 객체를 비교할 때는 ==를 사용

a와 b는 참조하는 것이 다르지만, a와 c는 같기 때문에 a==c가 출력

 

a,b,c객체 생성

처음 조건문은 서로가 다르기 때문에 출력하지 않음

equals는 객체의 내용을 비교

a.equals(b)는 b를 obj로 던지며, 이때 업캐스팅이 일어난다.

Point p = (Point)obj;로 다운캐스팅해서 받는다.

조건문에서는 x와 p.x, y와 p.y의 값이 같으면 참이 리턴된다.

a와 b는 x,y값이 같기 때문에 이 둘을 비교하면 참이 나오고, a와 c는 값이 다르기 때문에 거짓이 나온다.

 

<예제>

 

<예제>

 

a와 b가 같은 이유는 변수들의 곱이 같기 때문

3개의 비교들은 모두 equals메소드로 넘어가서 계산되어 비교된다.

이때 같다면 참이 나오고, 다르면 거짓이 나오게 될 것이다.

 

Wrapper 클래스

- 자바의 기본타입을 클래스화 한 8개의 클래스

 

Wrapper 객체 생성

 

 

1.

valueOf는 객체생성 없이 바로 사용한 메서드로 static메서드임을 알 수 있다.

Integer은 정수 기본 타입을 객체화한 것. 그 아래의 다른 것들도 마찬가지

 

2.

문자열로도 객체를 생성할 수 있다.

문자, 실수, 참거짓, 문자열 모두 가능

 

3. 

다른 타입으로 캐스팅해서 받을 수도 있다.

 

주요 메소드

 

- 모두 static인 것을 알 수 있다.

- toString : 매개변수 정수값을 문자열로 변환

- toHexString : 16진수 표현으로 변환하는 문자열

- parseInt : 문자열을 정수로 변환

 

Wrapper 활용

 

1.

i는 참조변수, ii는 그냥 변수값

doubleValue는 객체에서 실수값을 빼와 변수값에 집어넣는 것.

즉, 아래에 있는 것들은 객체에서 기본타입의 값을 가져와 변수에 집어넣는 것.

 

2. 

문자열을 정수, 불린, 더블 타입의 값으로 변환

 

3. 

기본타입의 값을 문자열로 바꾸는 경우

 

<예제>

 

박싱과 언박싱

 

- valueOf의 10이 int 10

- 객체에 값을 집어넣는 박싱을 하기 위해서는 Integer객체에 메소드로 값을 집어넣는다.

- 이 객체의 참조변수 ten에는 intValue메소드를 사용해서 변수에 이 값을 넣는 언박싱 실행한다.

 

- 뒤의 메소드를 생략하고 자동으로 박싱과 언박싱이 일어나는게 아래의 그림

- 자동으로 실행되면서 뒤에 메소드를 굳이 신경쓰진 않아도 될 듯? 필요에 따라 사용

 

<예제>

 

스레드(thread) 개념과 실(thread)

- 스레드를 작업이라고 보면 됨

- 스레드 a가 발생했을 때, 그와 관련된 메소드들이 호출되고, 이때 스레드 b와 관련된 메소드가 실행되서 스레드 b를 호출?

 

테트리스 프로그램 구성하는 멀티스레드 분석

 

메모리 사용 영역

JVM이 사용하는 메모리 영역

 

- 메소드, 힙, 스레드 3가지 영역으로 구분된다.

- 메소드 영역에는 클래스가 존재한다.

- 배열이나 객체를 생성하면 객체들이 들어가는 영역이 힙 영역이다.

- 기본타입의 변수들은 스택에 들어가며, 이는 스레드별로 들어가게 된다.

 

자바의 String 객체와 String 리터럴

- 리터럴은 정수나 실수 값 등의 어떠한 값

- 객체의 값과 리터럴을 비교할 수 있다.?

 

- kimtaeng는 리터럴이기 때문에 String constant pool에 들어감

- someObject객체를 생성하면서 여기에 kimtaeng를 넣으면 힙 메모리에 별도로 객체가 생성

- someObject가 intern메소드를 호출, equals로 kimtaeng와 비교?

 

String의 특징과 객체 생성

 

- str1은 리터럴로 힙 메모리 안에 존재

- str2는 객체를 생성하고, 문자 배열을 받아 문자열로 만들어 abcd로 만들고, 힙 메모리에 바로 객체 생성

(char을 합쳐서 문자열로 만든다)

- str3역시 abcd값 문자열로 들어가 있다.

 

매개변수 없거나, 문자 받아서 문자열로 만들거나, 그냥 문자열

 

스트링 리터럴과 new String()

- s는 리터럴, c는 객체

- 리터럴 끼리는 값이 같으면 같은 리터럴

- 객체는 값이 같아 보여도 다르다.

 

스트링 객체의 주요 특징

- concat : 문자열을 연결

- t는 별도의 공간에 만들어지기 때문ㅇ, hello에 java를 넣는다고 바뀐 것이 아니다.

 

주요 메서드

 

문자열 비교

 

- int compareTo(String anotherString)

- java와 cpp를 비교해서 res값에 넣으려고 함.

- 비교는 사전순으로 비교하며, java가 cpp보다 먼저 나오면 음수, 아니면 양수가 리턴되며, 여기선 양수가 리턴

 

문자열 연결

 

- +연산자 연결은 지금까지 우리가 했던 것

- concat으로 문자열을 연결한다고 기존의 문자열이 변경되는 것이 아니라, 별도의 공간에 새로운 문자열이 만들어 지는 것

 

concat()은 새로운 문자열을 생성하는 메서드

 

- concat을 쓴 경우 s1이 가리키는 것이 abcd가 아닌 새로운 문자열 abcdefgh가 되며, 연결이 끊긴 abcd는 가비지

 

문자열 내의 공백제거

 

- a : 양쪽 공백은 제거해도, 문자 사이의 공백은 살아있음

- b : 왼쪽 공백과 \t로 만들어진 탭 공백 제거

 

문자열의 각 문자 접근

 

- char c에는 'a'들어감. class에서 2 인덱스 자리는 a

- count는 2출력

- 문자열 안에서 charAt를 사용하면 각 문자마다 하나의 인덱스 번호가 주어짐

 

<예제>

 

 

728x90

'학원 > JAVA - 학원' 카테고리의 다른 글

제네릭  (0) 2022.02.18
String  (0) 2022.02.18
내부 클래스, 무명 클래스  (0) 2022.02.16
(상속) 추상 클래스 / 추상 메소드 / 인터페이스  (0) 2022.02.16
상속  (0) 2022.02.11