복습
추상클래스 사용이유 :
- 강제성 : 함수이름을 미리 통일해놓고 밑에서 사용하기 위해
- 설계단계를 나중으로 미룰 수 있다.
protected 접근 제어자 :
같은 패키지는 다 접근가능한데
다른 패키지에서는 자식 클래스만 접근 가능함.
C15 02Interface 부터
클래스 다이어그램
클래스 내부 구성요소 및 클래스 간의 관계를 표현하는 대표적인 UML.
이를 통해 시스템의 일부 또는 전체의 구조를 나타낼 수 있다.
이를 통해 의존 관계를 명확히 보게 해주고 수정할 시에는 더 효율적으로 수정할 수 있게 해준다.
빈 다이아몬드 : 탈부착가능
인터페이스 관계선 : 점선 빈 삼각형
상속 관계선 : 실선 빈 삼각형
https://two-parks.tistory.com/50 클래스 다이어그램 작성법_참고
HashCode 란?
hashcode 란 객체를 식별하는 하나의 고유 정수값을 말한다.
쉽게 말해서 객체의 지문이다.
기밀성을 유지하기 위해 원데이터와 전혀 다른 숫자로 표현한 것이다.
hashCode() : 객체의 주소를 int 로 변환해서 반환해주는 메소드
System.out.println(person1.hashCode()); // 23423462
// person1 객체의 hashcode 를 정수로 나타낸다.
Object 클래스의 메소드라서 모든 객체에서 가지고 있는 메소드이다.
Wrapper 클래스(래퍼 클래스)
자바의 자료형은 크게 기본 타입 , 참조 타입 으로 나누어진다.
기본 타입은 int , char , float , boolean 등이 있고
참조 타입은 class , interface 등이 있는데 프로그래밍을 하다 보며 기본 타입의 데이터를 객체로 표현해야 하는 경우가 종종 있다. (기본 타입은
이럴 때에 기본 자료타입을 객체로 다루기 위해서 사용하는 클래스들을 래퍼 클래스라고 한다.
어떻게 사용하는건가 ?
Integer objNum = new Integer(5);
//정수를 객체로 감싼 형태이다.
이제 objNum은 객체이기 때문에 다양한 메서드를 사용할 수 있다.
Integer 자료형
- 박싱(Boxing) : 기본형을 참조형으로 변환하는것
- 언박싱(Unboxing) : 참조형을 기본형으로 변환하는것
기본타입(primitive type) 래퍼클래스(wrapper class)
byte | Byte |
char | Character |
int | Integer |
float | Float |
double | Double |
boolean | Boolean |
long | Long |
short | Short |
int intNum = (int)num; //1.
int intNum2 = num2; //2.
Integer integerNum = (Integer)456; //3.
Integer integerNum2 = intNum; //4.
}
}
1. 언박싱
2. 오토언박싱
3. 박싱
4. 오토박싱
기본 자료형을 객체로 다루는 이유는
- 컬렉션 API 사용 : 자바의 컬렉션 프레임워크 (List , Map , Set 등) 은 객체만 다룰 수 있는 메서드기 때문에 래퍼 클래스로 감싸서 객체로 만들어야 컬렉션에 저장할 수 있다.
제네릭 (Generic) = 일반적인
자료형 정하는거를 객체 생성시점으로 미루는것.
- <> 연산자를 사용함.
- 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법
제네릭 타입의 장점 :
- 타입 안정성
- 의도하지 않은 타입의 객체가 저장되는 것을 막는다.
- 저장된 객체를 꺼내올 때 다른 타입으로 잘못 형변환하여 발생할 수 있는 오류를 줄인다.
- 타입 안정성(type safety)
- 코드가 간결해진다
단점 : 다운캐스팅을 할 필요는 없지만 정해진 자료형만 사용가능하다.
public class Box <T> {
private T item ; } //어떤 타입의 item 도 담을 수 있다.
괄호 꺾쇠 안에 타입명을 기재한다. 따로 지정해주지 않으면 String타입으로 지정되어 문자열 데이터만 리스트에 적재할 수 있게 된다.
ArrayList<String> list = new ArrayList<>();
// String 타입의 list 선언
리스트와 배열의 차이
배열(Array)
ArrayList
ArrayList 는 interface 인 List 구현(implements) 한 클래스이다
그렇기 때문에 선언할 때 List로 업캐스팅을 해서 선언을 많이 한다.
List<String> listA = new ArrayList<String>();
//이렇게 하면 List 클래스를 참조하는 listA이기 때문에
나중에 다른 List 구현체로 변경할 수 있기 때문에 유연성이 높아진다.
생성자)
- new ArrayList() : 기본 크기가 10인 배열 생성
- new ArrayList(기본크기) : 기본 크기를 지정 (배열이 다 차면 기본크기만큼 사이즈가 증가함)
- new ArrayList<제네릭>() : 배열 값의 타입을 지정
ArrayList 의 대표적인 메소드
- .add((index) , value) : 순서대로 리스트를 추가 , 배열 사이즈 초과 시 초기 설정된 사이즈만큼 자동으로 사이즈가 증가함.(1.5배 정도)
- .get(index) : 해당 인덱스의 값 반환
- .set(index, value) : 인덱스의 값 변경
- .indexOf(value) : 값을 제공하면 해당 값의 가장 첫번째 인덱스를 반환
- .contains(value) : 해당값이 배열에 있는지 검색해서 true/false 반환
- .toArray() : 리스트 타입의 인스턴스를 일반 배열 타입으로 변환시킨다 . 자동으로 저장할 배열에 맞춰 타입이 형변환이 되고 새 배열의 길이 기준 또한 자동으로 맞춰진다.
- .clear() : 값 모두 비우기
- .size() : 요소개수 반환 (.length 랑 비슷)
리스트(List)
List
배열의 한계 때문에 만들어진 자료형
List는 메모리가 허용하는 한 계속해서 추가 할 수 있도록 만든 자료형이다.
List 는 interface 이다. 그렇기 때문에 List 만으로는 객체를 생성할 수 없다.
List 를 구현하는 하위 클래스타입으로 객체를 생성해야 한다
선언법
List<String> listA = new ArrayList<String>();
//인터페이스 List 를 참조하는 ArrayList 객체 listA 선언
향상된 for 문
배열에 한해서만 사용가능 !
그리고 for 문 실행문이 한줄만 있으면 괄호 생략가능
import 자동 정리 단축키 : 컨트롤 + 쉬프트 + O
'Developer Note > 국비과정 수업내용 정리&저장' 카테고리의 다른 글
24년 09월 30일 (1) | 2024.10.03 |
---|---|
24년 09월 27일 (1) | 2024.10.03 |
24년 09월 25일 (1) | 2024.10.03 |
24년 09월 24일 (4) | 2024.10.03 |
24년 09월 19일 (0) | 2024.09.19 |