오버로딩 : 매개변수의 개수나 타입이나 타입의 순서가 서로 달라야 한다
리턴 타입은 오버로딩과 관련없다.
객체소멸 : new 에 의해 생성된 객체 메모리를 자바가상기계의 가용메모리로 되돌림
가비지: 가리키는 레퍼런스가 하나도 없는 객체
자바가상기계의 가비지 컬렉터가 자동으로 가비지 수집 반환.
가비지 컬렉션 : 자동으로 가비지를 자동 회수하는 과정, 가용 메모리로 반환, 가비지 컬렉션 스레드에 의해 수행
개발자의 강제 가비지 컬렉션 : System.gc(); // 가비지 컬렉션 작동 요청 , 자바가상기계가 가비지 컬렉션 시점을 전적으로 판단
패키지 : 관련있는 클래스 파일을 저장하는 디렉터
접근 지정자 목적: 클래스나 일부 멤버를 공개해 다른 클래스에서 접근하도록 허용하거나 캡슐화 정책(멤버를 보호하기 위해)에 묶인 보호를 일부 해제할 목적 2
private : 같은 클래스
default : 같은 패키지
protected : 같은 패지지 + 자식 클래스
public : 모든 클래스
인스턴스 멤버 = non - static 멤버
공간: 멤버들은 객체마다 독립적으로 존재
시간: 필드와 메소드는 객체 생성후 비로소 사용 가능
비공유: 멤버들은 다른 객체에 의해 공유되지않음
클래스 멤버 = static 멤버
공간: 클래스당 하나만 생성
시간: 클래스가 로딩될때 공간 할당
공유: 동일한 클래스의 모든 객체에 의해 공유
class area : static 멤버의 위치 , 클래스를 로드
heap : 인스턴스 멤버의 위치, 객체 메모리 할당
stack : 지역변수, 매개변수의 위치 , 스택 프래임 할당 main() f()
객체생성해서 레퍼런스변수로 스태틱 메서드를 접근할 수 있지만 클래스명.스태틱 멤버 로 사용하는게 좋음
스태틱메서드는 인스턴스 메서드를 호출할 수 없다!!!!!!!!
-> 정적 메서드는 정적 멤버만 사용할 수 있다
스태틱변수는 인스턴스 변수를 사용할 수 없다~!!!!!!!
스태틱 메서드는 객체가 생성되지않은 상황에서도 호출이 가능하므로
-> 정적 메서드는 현재 객체를 가리키는 this레퍼런스를 사용할 수 없다
static void sub(int x) { this.x = x;} 는 오류다~~~!!!!!
when static member?
1. 전역변수나 전역함수는 static으로 클래스에 작성
2. 공유멤버를 작성할때
final 클래스 = 종단 클래스 : 클래스상속 불가 / 보안상의 이유
final class FinalClass{}
class SubClass extends FinalClass{} //컴파일 오류
final 메소드 : 오버라이딩 불가
public class SuperClass {
protected final int finalMethod(){}
}
class SubClass extends SuperClass {
protected int finalMethod(){} // 오버라이딩 불가
static member : 동일한 클래스에 속한 객체들이 공유함.
즉, count 변수는 Counter 클래스의 모든 객체에 대해 공유되는 변수입니다. 객체 간의 상태를 공유하고 유지하는 데 유용하게 사용될 수 있습니다.
class Counter {
static int count;
public Counter() {
count++;
}
public void displayCount() {
System.out.println("Counter count: " + count);
}
}
public class Main {
public static void main(String[] args) {
Counter c1 = new Counter();
c1.displayCount(); // Output: Counter count: 1
Counter c2 = new Counter();
c2.displayCount(); // Output: Counter count: 2
Counter c3 = new Counter();
c3.displayCount(); // Output: Counter count: 3
}
}
생성자 : 인스턴스가 생성될때 호출되는 인스턴스=객체 = iv 묵음 초기화 메서드
this : 인스턴스(객체) 자신을 가리키는 참조변수 , 인스턴스의 주소가 저장된다 (lv 와 iv를 구별하기 위해서~!)
this() : 생성자 , 같은 클래스의 다른 생성자를 호출할 때 사용한다. 반드시 첫줄에서만 사용 가능하다
오버라이딩 : 자식클래스가 부모클래스의 메소드를 자신의 필요에 맞춰서 재정의하는 것이다
매소드 이름 ,매개변수 , 반환형은 동일해야 한다~!
super : 자손클래스에서 조상클래스로부터 상속받은 멤버(메서드나 필)를 참조하는데 사용되는 참조변수
super(): 생성자 바로밑에 써야함.
다형성이란 조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 하였다
참조변수의 형변환
자손타입의 참조변수를 조상타입의 참조변수로 변환하는 것을 업캐스팅,생략가능이라고 한다.
Shape s = (Shape) new Rectangle();
Shape s = new Rectangle();
업캐스팅: 묵시적
다운캐스팅 : 명시
1. 업캐스팅의 활용
참조 매개변수는 메서드 선언시 훨씬 더 넓은 범위의 객체를 받을 수 있도록 조상타입 매개변수가 써져있고
호출할때는 자신과 같은 타입/ 자손타입의 인스턴스를 넘겨준다
2. instanceof 연산자 - true / false 반환
변수가 가리키는 객체의 실제 타입을 알고싶으면
person
Student | Researcher |
Professor |
public static void print(Person person){
if(person instanceof Person){} // kim의 조상이 Person 타입인가요?? yes
if(person instanceof Student){}// kim의 조상이 Student 타입인가요?? no
if(person instanceof Researcher){}// kim의 조상이 Researcher 타입인가요?? yes
if(person instanceof Professor){}// kim의 조상이 Professor 타입인가요?? yes
}
public static void main(String [] args){
Person jee = new Student();
Person kim = new Professor();
Person lee = new Researcher();
jee.print();
kim.print();
lee.print();
}
상속 is 이다 | 구성 has 가진다 , 클래스가 다른 클래스의 인스턴스를 클래스의 필드로 가지는 디자인 기법 |
컴파일 시간에 결정 | 실행시간에 결정 |
사과는 과일이다. 사자는 동물이다. 집은 빌딩이다. (화살표모양) |
final로 선언된 클래스에서도 코드 재사용이 가능하다, 자동차는 엔진으로 구성된다.(검정 다이아몬드) - 구성 도서관을 책으로 구성된다.(꼭 필요함)(검정 다이아몬드) - 구성 연못이 오리를 소유한다.(흰 다이아몬드) - 집합 |
부모클래스의 public protected 매소드모두 노출한다 | 아무것도 노출X, 공개 인터페이스만을 사용해 상호작용한다 |
자동차는 엔진으로 구성된다.(꼭필요함)(검정 다이아몬드) - 구성
도서관을 책으로 구성된다.(꼭 필요함)(검정 다이아몬드) - 구성
public class A{
private B b = new B(); // B객체가 A클래스안에 구성됨
public A() {}
}
연못이 오리를 소유한다.(흰 다이아몬드) - 집합
publice class A{
private B b; // B클래스타입의 참조변수 선언
public A(B b){
this.b = b;
}
}
집합예제
추상클래스는 추상 메소드 abstract void play (int pos); 를 갖고 있는 클래스 -> 주로 상속 계층에서 추상적인 개념을 나타낼때 사용
interface는 추상메서드의 집합이다. 구현된 것이 전혀없다 . 모든 멤버가 public
static method, default method, 상수는 부수적임 , 필드 변수는 선언불가
인터페이스는 다른클래스에 의하여 구현될 수 있다.
다중 상속이 가능 interface Fightable extends Movable , Attackable{ }
public interface RemoteControl {
public void turnOn();
public abstract void turnOff();
public static final int A = 5;
int myField; // 컴파일 에러: 인터페이스에서 필드 변수를 직접 선언할 수 없음
default void defaultMethod() { System.out.println("This is a default method."); }
public default void printBrand() { //default method
System.out.println("Remote Control 가능");
}
static void print (Stirng msg){ //static method
System.out.println(msg + "인터페이스의 정적 메소드 호출");
}
외부 클래스 outer
중첩 클래스 nested
중첩 클래스 - 정적 중첩 클래스
- 비정적 중첩 클래스 - 내부 클래스
- 지역 클래스
- 익명 클래스: 클래스 몸체는 정의되지만 이름이 없는 클래스이다. 익클래스는 클래를 정의하면서 동시에 객체를 생성하게 된다. 이름이 없기 때문에 한번만사용
package preparation;
interface Remote{
void turnOn();
void turnOff();
}
public class Pre_18 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Remote r = new Remote() {
public void turnOn() {
System.out.println("Tv turnOn()");
}
public void turnOff() {
System.out.println("Tv turnOff()");
}
}; //익명클래스 정의되면서 동시에 객체도 생성
}
}
java.lang패키지는 자바프로그래밍에서 가장 기본이되는 클래스를 포함하기에 import문 없이도 사용가능하다
Object 클래스
boolean equals (Object obj) | 객체 자신과 객체 obj가 같은 객체인지 알려준다(같으면 true 리턴) |
Class getClass() | 객체 자신의 클래스 정보를 담고있는 Class 인스턴스 반환 |
int hashCode() | 객체 자신의 해시코드 값 리턴 |
String toString() | 객체 자신의 정보를 문자열로 리턴 |
void notify() | 현 객체에 대해 대기하는 하나의 스레드를 깨운다 |
vodi notifyAll() | 현 객체에 대해 대기하는 모든 스레드를 깨운다 |
void wait() | 다른 스레드가 깨울 때까지 현재 스레드를 대기한다 |
byte - Byte | short - Short | int - Integer | long - Long | char - Character | float - Float | double - Double | boolean - Boolean |
기본타입의 값을 객체로 다룰 수 있게 함
Wrapper 객체생성
static 메서드 valueOf(문자열) 이용
Byte b = Byte.valueOf((byte) 10);
Short s = Short.valueOf((short) 10);
Integer i =Integer.valueOf (10);
Long l =Long.valueOf(10L);
Character c = Character.valueOf('c'); //문자열을 받지않음
Float f= Float.valueOf(3.14f);
Double d = Double.valueOf (3.14);
Boolean b = Boolean.valueOf (true);
'Java' 카테고리의 다른 글
입출력 스트림과 파일 입출력 (0) | 2023.07.13 |
---|---|
12장 Collection FrameWork Generics (0) | 2023.07.10 |
11장 Collection FrameWork (0) | 2023.07.06 |
9장 Java.lang package & util classes (0) | 2023.07.04 |
5장 Array (0) | 2023.06.28 |