Module 08 참조타입
스택 - Stack ADT(Abstract Data Type)
Push : 데이터 넣기 | Pop : 데이터 꺼내기
시작 코딩! 스택구조 구현하기
| 값 타입(Value Type) | 참조 타입(Reference Type) |
|
|
자바는 값을 넘길 때, 값을 그대로 복사해서 넘긴다 ( 참조 : 같은 곳을 참조(주소 복사) | 값 : 값을 복사해서 넘김(실제 값 복사) )
클래스 밖에 작성 O = 전역변수, 어노테이션, 열거형(Enum), 클래스 및 인터페이스 선언, 주석, import문, package 선언
| String s1 = new String("abc"); String s2 = new String("abc"); System.out.println(s1 == s2); // 값이 위치한 장소를 비교한 것으로 "false" // Heap |
String s1 = "abc"; String s2 = "abc"; System.out.println(s1 == s2); // 실제 가지고 있는 값을 비교한 것으로 "true" // String constant Pool |
싱글톤(Singleton) 패턴이란?
싱글톤 패턴은 특정 클래스의 인스턴스를 1개만 생성되는 것을 보장하는 디자인 패턴이다.
즉, 생성자를 통해서 여러 번 호출이 되더라도 인스턴스를 새로 생성하지 않고,
최초 호출 시에 만들어두었던 인스턴스를 재활용하는 패턴이다.
enum 객체
- enum 객체는 Heap 영역에 저장됨
- enum 객체가 생성되면, 모든 enum 변수는 생성된 enum 객체의 위치를 가리킴
- 동등 값 비교: equals 또는 ==
- 비교 연산자 < >. ⇐, >=는 값을 비교하지 않음
- enum 클래스는 java.lang.Enum 클래스에서 파생
- 상속한 데이터와 메소드를 사용할 수 있음 ( = name, ordinal, compareTo, valueOf, value 메소드)
- 생성자는 private
- enum 타입은 고정된 상수의 집합으로, 컴파일시에 타입 안정성이 보장이 필요
- enum의 각 열거형 상수에 추가 속성 부여
String 클래스 StringBuffer / StringBuilder 클래스
: 여러 개의 유니코드 데이터 : 문자열을 내부 수정을 가능 O
: 읽기만 하고 변경할 수 없는 불변 클래스(Immutable class) : 수정을 위해 반복적으로 객체를 생성하는 번거로움 X
: 배열 형태로 액세스 할 수 없음
EX> public static void main(String[] args) {
String s = "abc";
System.out.println(s.replace("a", "z"));
}
String 클래스 메소드, 연산자
: length 메소드 / charAt 메소드 / indexOf 메소드 / split 메소드 / concat 메소드 / trim 메소드 / toUpper와 toLower 메소드
비교 연산자 : > , < , >= , <= , == , != | String의 비교 : compareTo() EX> s = "abc"; s.compareTo("abd");
compareTo() : (대소문자 신경써서) 비교 | compareToIgnore() : (대소문자 상관없이) 비교
(형태만 대충 알아보게 변환) (정확하게 알 수 있도록 변환)
암시적인 형변환 명시적인 형변환
double float long int short + char byte
*****BUT , 같은 계층의 변수들은 형변환 불가능*****
clone 메소드
: clone() 메소드는 해당 인스턴스를 복제하여, 새로운 인스턴스를 생성해 return 한다.
: 필드의 값만 복사하는 shadow copy를 수행해 return 하며, deep copy를 위해서는 clone() 메소드를 오버라이드 해야 한다.
: clone 메소드는 데이터의 보호를 이유로 Cloneable 인터페이스를 구현한 클래스의 인스턴스만이 사용할 수 있다.
java.lang 패키지 java.util 패키지
= import 없이 사용가능한 기본 패키지 = 다용도로 사용할 수 있는 유용한 클래스들이 포함되어 있는 패키지
: Integer, Long, Float, Double 등의 Wrapper 클래스 : Object 클래스의 보조 클래스인 Objects 클래스
: String, StringBuffer, StringBuilder 클래스 - 문자열 : 날짜, 시간과 관련된 클래스
: 표준 입출력을 위한 System.in, System.out 스트림 : Collections Framework 관련 인터페이스와 클래스 - 자료구조
: Thread 관련 주요 클래스 : 이벤트 모델과 국제화 기능
: 이외 다양한 클래스와 인터페이스 포함 : StringTokenizer, 난수 생성기
: Scanner 클래스 등 다양한 클래스와 인터페이스 포함
java.io 패키지 +) java.net 패키지, javafx 패키지
= 파일이나 통신 등 정보의 입출력을 처리하는 클래스가 포함된 패키지
: 파일 시스템의 파일 정보를 얻기 위한 File 클래스
: 콘솔에서 문자를 입출력하기 위한 Console 클래스
: InputStream, OutputStream 클래스 등 바이트 단위 입출력을 위한 스트림 추상 클래스
: FileInputStream, FileOutputStream등 바이트 단위 입출력을 위한 스트림 클래스
: Reader, Writer등 문자 단위 입출력을 위한 스트림 추상 클래스
: FileReader, FileWriter 등 문자 단위 입출력을 위한 하위 스트림 클래스
: 그 외 입출력을 위한 다양한 클래스 포함
Stack -> Heap : Boxing Heap -> Stack : Unboxing
new = 객체를 위한 메모리를 할당
Module 09: 객체 생성과 제거
생성자
= 특수한 형태의 메소드
= 객체 생성시에 객체를 초기화하는데 사용
private : 외부에서는 절대 접근이 불가능한 생성자
Java 프로그래밍 언어는 static 생성자를 지원하지 않음!
생성자를 하나 생성하면, 기본 생성자는 사라짐
규칙 1. new 하고 생성자 호출해야 한다.
규칙 2. 서브 클래스가 생성하려고 하면, 슈퍼 클래스를 호출해야 한다.
규칙 3. super()는 객체의 맨 앞에 위치해야 한다.
객체 생성
1. new 키워드를 사용하여 필요한 메모리를 할당
2. 생성자를 사용하여 new 연산자로 획득한 원시 메모리에 객체를 생성 (이때 객체의 상태는 Created)
객체 생성 시의 상태 3가지
1. In use or reachable : 사용 중
2. Invisible : 사용 중이며 접근 불가
3. Unreachable : 사용되지 않음 EX> 렉 걸림 = Unreachable한 객체가 빠져나오지 못해 시간이 걸리는 경우
객체 제거 시의 상태 3가지
1. Collected : 가비지 컬렉터의 대상이 됨
2. Finalized : 제거
3. Deallocated : 메모리 해제
Mark-and-Sweep
Mark = 필요한 Object를 표시 한다. 이를 위해, Garbage Collection Root(GC Root)라고 불리는 특별한 Object를 계속 추적한다.
Sweep = 그래프를 돌고 난 후 마크되지 않은(참조 되지 않는 Objects) 를 메모리에서 지우고 해당 메모리 공간을 되 찾는다.
메모리 누수
: 컴퓨터 프로그램이 필요없는 메모리를 계속 점유하고 있는 현상 | 할당된 메모리 사용 후, 반환하지 않는 것이 누적되면 메모리 낭비
가비지 컬렉션 : 사용되지 않는 객체를 소멸시켜며, 가비지 컬렉션은 자동으로 동작한다.
1. 객체를 소멸 : 가비지 컬렉터는 객체를 소멸시키지만, 언제 소멸되는지는 정확히 지정하지 않는다.
2. 객체는 한 번만 소멸 : C++에서 종종 발생하던 이 문제가 발생하지 않음을 의미한다.
3. 도달할 수 없는 객체만 소멸 : 가비지 컬렉션은 다른 객체가 참조하고 있는 경우 객체를 소멸시키지 않는다
























































'✎NHN Academy | JAVA' 카테고리의 다른 글
| NHN Academy - 2024.08.29(Thu) (0) | 2024.08.29 |
|---|---|
| NHN Academy - 2024.08.28(Wed) (1) | 2024.08.28 |
| NHN Academy - 2024.08.26(Mon) (0) | 2024.08.26 |
| NHN Academy - 2024.08.23(Fri) (0) | 2024.08.23 |
| NHN Academy - 2024.08.22(Thu) (0) | 2024.08.22 |