class
instance
new
keyword로 메모리 공간 생성변수
.
operator를 사용constructor(생성자)
JVM이 관리하는 memory 구조
Register
: program의 실행 포인터Runtime constant pool
: 상수가 관리되는 공간Method Area
: class 자체에 대한 정보Heap
: instance는 Heap에 저장된다.Call Stack
(Stack): method가 호출되면 해당 method를 위한 공간이 stack에 잡히고 method 안에서 사용하는 local 변수를 위한 공간class variable & instance variable
class variable
instance variable
method overloading
method의 이름이 같아도 parameter의 수나 data type이 다르면 다른 method로 구별
package
import
구문을 이용해서 package명을 생략할 수 있다.Access Modifier(접근자)
public
: package에 상관없이 사용가능protected
: 같은 package인 경우 사용가능, 다른 package여도 상속관계에 있으면 사용가능package(default)
: 같은 package 내에서만 사용가능private
: 같은 class 내에서만 사용가능Static block
static {
// main이 실행되기 직전에 프로그램에서 필요한 다른 library 같은 것들을
// loading할 필요가 있을 때 static block을 사용한다.
}
Inheritance(상속)
기존 class를 확장해서 새로운 class를 정의하는 방법.
Is-A reationship
이 성립 다형성(polymorphism)
: class로부터 파생된 instance의 data type을 상위 type으로 변환dynamic binding
super()
: constructor가 연속적으로 호출(instance 생성과정이 복잡)final keyword
abstract class
가지고 있는 method 중에 abstract method
가 단 1개라도 존재하면 abstract class
abstract method
: method의 선언만 되어있고 정의가 안되어있는 method
abstract
keyword를 꼭 붙여야 한다.interface
public static final
(상수) 이다.implements
keyword를 사용한다.package lecture0713;
class Human {
}
interface MyInterface {
}
interface Animal {
int weight = 10;
public static final int age = 20;
public void printName();
public abstract void printAge();
}
abstract class Myclass extends Human implements Animal, MyInterface {
// MyClass는 Human을 상속받고 Animal과 MyInterface를 다중 구현한다.
@Override
public void printName() {
// TODO Auto-generated method stub
}
@Override
public void printAge() {
// TODO Auto-generated method stub
}
}
public class Main {
}
상당히 많은 class가 package화 되어서 제공된다.
💡 Java의 class library 몇 가지들..
java.lang.xxx
- (lang은 language의 약자)
- 대표적으로 java.lang.Object
- java.lang이라는 패키지의 Object 클래스가 제공된다.
java.net.xxx
- (net은 networking의 약자)
- networking 관련 프로그램을 만들 때 사용한다.
java.awt.xxx
⇒ (구글링보다도) “API Reference에서 확인”
Overview (Java SE 11 & JDK 11 )
Java의 최상위 class
equals()
toString()
collection
⇒ 무조건 객체형태로만 저장이 가능String
문자열 생성
" "
String a = "Hello";
)new String(" ")
String b = new String ("Hello");
)public class Main {
public static void main(String[] args) {
String str1 = "Hello";
String str2 = "Hello";
String str3 = new String("Hello");
System.out.println(str1 == str2); //true
System.out.println(str1 == str3); //false
// == 은 메모리 주소값을 비교한다.
System.out.println(str1.equals(str3)); //true
// 문자열 내용을 비교하려면 equals()를 써야한다.
// 문자열 내용이 같은지 확인할 때 == 사용하지 말아요!
}
}
Primitive data type | Wrapper class |
---|---|
원시값 | 객체 |
byte | Byte class |
short | |
int | |
long | |
float | |
double | |
char | |
boolean |
code로 알아보아요~!
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
// 배열과 비슷한 놈이다! 단, 동적으로 크기가 늘거나 줄일 수 있다!
// 저장은 무조건 객체 형태로만 저장된다!
// 다양한 형태의 객체를 저장할 수 있다!
List list = new ArrayList<>();
list.add("Hello");
list.add("홍길동");
list.add(100); // 3번째 칸에 숫자(int 100)이 저장된 것 같이 보여요!
list.add(new Student());
//List를 만들어서 사용할 거에요.
// 같은 데이터 타입을 이용하는 경우가 사실 대부분.
List<String> list1 = new ArrayList<String>(); // 꺽쇠 안에 데이터 타입을 명시
list1.add("홍길동");
// list1.add(100); // error
}
}
JavaScript 객체(JSON)와 형태가 같다.
key/value의 쌍으로 저장
key | value |
---|---|
“0” | “홍길동” |
import java.util.*;
public class Main {
public static void main(String[] args) {
// Map
Map<String, String> map = new HashMap<String, String>();
map.put("1", "홍길동");
map.put("2", "Hello");
// API Reference를 참조해서 각 collection의 이용방법을 찾아서 써 보아요!
}
}