-복습-
Class
- 객체 modeling의 수단
- instance를 파생 (new 생성자)
- ADT(abstract data type) => Reference data type
Instance
: 'new' keyword로 메모리 공간 생성
-> instance를 사용하기 위해서는 "변수" (. operator를 이용하여 사용)
Constructor (생성자)
: class의 구성요소로, instance를 생성하고 초기화하려는 목적으로 사용
-
모든 class는 적어도 1개 이상(overloading)의 생성자를 가지고 있음
-
class 이름과 같다
-
return type을 명시하지 않음 -> return 값이 없음
-
명시적으로 작성하지 않으면 default construcotr가 자동으로 삽입 (명시적으로 작성하는 것 권장)
JVM이 관리하는 메모리 구조
- Register : 프로그램의 실행 포인터
- Runtime constant pool
- Method Area : Class 자체에 대한 정보
Class Variable과 Instance Variable
class variable (static field)
해당 클래스로부터 파생된 모든 instance가 공유하는 변수가 됨
instance variable
각각의 instance마다 독립적인 공간을 확보
Method Overloading
- method의 이름(식별자)이 같아도 parameter의 수나 data type이 다르면 다른 method로 구별
Package
java의 모든 class는 특정 package 내에 포함되고, package를 지정하지 않으면(package 구문을 사용하지 않으면) default package에 포함됨
- class의 이름이 같아도 속해있는 package가 서로 다르면 다른 class이다. -> package의 이름이 unique해야 한다.
- class의 유지보수 및 관리를 위해 class를 논리적으로 묶어주는 개념 -> package의 이름이 folder가 생성되고 그 안에 class 위치
- package화 되어있는 class는 사용할 때 full package명을 이용해서 class 사용 -> import를 이용해서 package 생략
Access Modifier
- public
- protected
- package(default)
- private
class(public O, public X = package(default)), field, constructor, method 앞에 붙음
public
package에 관계없이 사용 가능
protected
같은 package인 경우 사용 가능, 다른 package라도 상속관계에 있으면 사용 가능
package (default)
같은 패키지 내에서만 access 허용
private
같은 클래스 내에서만 access 허용
Static block
Inheritance (상속)
기존의 class를 확장하여 새로운 class를 정의하는 방법
- constructor와 private는 상속 불가
- Java는 단일 상속만 지원
Is-A Relationship
상속 관계에 있는 두 클래스는 is-a relationship 성립
- subclass is a superclass
- class로부터 파생된 instance의 data type을 상위 class type으로 변환 가능 => 다형성(polymorphism), Dynamic Binding
instance 생성 과정
- constructor가 연속적으로 호출됨
- 상위 class의 instance를 감싸며 만들어지는 형태
- 상위 class의 instance가 먼저 생성되어야 하므로 상위 class의 생성자가 먼저 호출된다. =>
super()
final
- final variable : 상수화
- final class : 상속 불가
- final method : overriding 불가
Abstract Class
- 가지고 있는 method 중에 abstract method가 1개 이상 존재하면 abstract class이다.
- abstract method : method의 선언만 있고 method 정의가 되어있지 않은 method
- instance 생성 불가 (완전히 정의된 class가 아니기 때문에) => 하위 class가 상속하여 method를 정의
---
Interface
- 내부에 존재하는 field는 public static final(상수)
- 내부의 method는 abstract method
interface를 구현
- abstract class를 상속하여 하위 class에서 abstract method를 정의하는 경우
abstract superClass {
...
}
public subClass extends superClass {
...
}
- interface를 하위 class에서 구현하는 경우
interface superClass {
...
}
public subClass implements superClass {
...
}
- 동시에 class 상속과 interface 구현 가능
- class는 단일 상속만 가능하지만 interface는 다중 상속(?) 구현 가능
- interface와 구현 class에서도 is-a relationship 성립 => 상위 type 형변환 가능 (interface도 특별한 class임)
Java가 제공하는 API (Class library)
- 상당히 많은 class를 제공 -> package화 되어 제공
- java.lang.xxx : java 언어 관련 기능 class들의 package)
- java.net.xxx : network program 관련 class, interface들의 package : 채팅 등
- java.awt.xxx : 프로그램 창 관련 기능 package
=> "API Reference"에서 확인 가능
equals()
: 두 객체가 같은지에 대한 결과를 boolean type으로 반환
public boolean equals(Object obj) {
return (this == obj);
}
toString()
: 객체의 정보를 문자열로 반환
public String toString() {
return super.toString();
}
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
자료구조
-> 배열
- size 고정
- 통일된 data type을 사용
Collection
=> 객체 형태로만 저장 가능
- List 계열
- 🌟 ArrayList Class : size가 동적, 서로 다른 data type이 가능
- Linked List
- Map 계열 : HashMap Class
- Set 계열 : HashSet Class
String
String a = "Hello";
String b = "Hello";
String c = new String("Hello");
- literal: Heap 내의 String Pool에 있으면 참조, 없으면 새로 생성
- new String(문자열) : 무조건 새로 생성
// 문자열 객체 주소 비교
str1 == str2 // true
str1 == str3 // false
// 문자열 내용 비교
str1.equals(str3); // true
Primitive Data Type
Primitive Data Type | Wrapper Class |
---|
byte | Byte Class |
short | Short Class |
int | Integer Class |
long | Long Class |
float | Float Class |
double | Double Class |
char | Character Class |
boolean | Boolean Class |
Map
like JS의 객체(JSON)와 형태가 같음