2022-07-13

강아람·2022년 7월 13일
0

Kakao Cloud School

목록 보기
7/30
post-thumbnail

-복습-

Class

  1. 객체 modeling의 수단
  2. instance를 파생 (new 생성자)
  3. 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이 관리하는 메모리 구조

  1. Register : 프로그램의 실행 포인터
  2. Runtime constant pool
  3. Method Area : Class 자체에 대한 정보
    • Class variable (Class 내 Static으로 지정된 field에 대한 공간)

    • Heap : instance는 Heap에 저장됨
    • Heap 안에 String pool 영역이 존재 -> 문자열(String instance) 관리

    • Call Stack(Stack) : method가 호출(invoke, call)되면 해당 method를 위한 공간이 stack 내에 할당 (method 내에서 사용되는 지역 변수를 위한 공간 등)


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

  1. public
  2. protected
  3. package(default)
  4. private
class(public O, public X = package(default)), field, constructor, method 앞에 붙음

public

package에 관계없이 사용 가능

protected

같은 package인 경우 사용 가능, 다른 package라도 상속관계에 있으면 사용 가능

package (default)

같은 패키지 내에서만 access 허용

private

같은 클래스 내에서만 access 허용



Static block

  • 해당 클래스가 동작하기 전에 필요한 자원을 미리 준비하기 위해 사용 (native library 등)

    static {
        ...
    }


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

  1. final variable : 상수화
  2. final class : 상속 불가
  3. 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 TypeWrapper Class
byteByte Class
shortShort Class
intInteger Class
longLong Class
floatFloat Class
doubleDouble Class
charCharacter Class
booleanBoolean Class

Map

like JS의 객체(JSON)와 형태가 같음

  • key-value의 쌍으로 저장

0개의 댓글