* 자바 *
- 자바 프로그램 실행을 위한 필수 메소드 : main 메소드
public static void main(String[] args) {}
- 컴파일된 바이트 코드를 실행하는 가상 기계의 이름 : JVM (Java Virtual Machine)
- 자바에서 메모리 관리를 자동으로 수행하는 기능 : Garbage collection
변수에 값을 최초로 대입하는 것 : 초기화
자료형 변수명 = 값;
int num = 10;
- 연산을 수행하기 위해서는 연산 대상의 자료형의 종류가 [ 일치 ]해야 한다
따라서 형변환이 발생하는데 자동 형변환과 강제 형변환으로 분류됨
* 자동 형변환 조건 : 자료형의 범위가 작은 범위에서 큰 범위로 형변환이 일어난다
byte(1B) -> short(2B) -> int(4B) -> long(8B) -> float(4B) -> double(8B)
char(2B) ->
큰 범위에서 작은 범위로 넘어갈 때 :
강제 형변환 방법 : (자료형)값/변수
복합대입연산자 -> x = x + y;
클래스(객체)*
객체는 클래스의 인스턴스이다
생성자 - >
생성자란 객체를 생성할 때 사용되는 것으로, 보통 멤버변수의 초기화를 위해
사용된다
객체 배열이란? :
-객체 배열을 선언하고 초기화하는 방법이다
String[] str1 = new String[]{
new String("ddd"),
new String("sss"),
new String("ddd")
};
String[] str; // 객체 배열 선언
str = new String[5]; // 배열 초기화 및 생성 :
str[0] = "hello";
str[1] = "world";
str[2] = "java";
* 상속이란? :
클래스가 가지고 있는 멤버(변수, 메소드)를 다른 클래스가 물려받아 본인것처럼
사용할 수 있는 기능
접근제한자 class 하위(자식)클래스명 extends 상위(부모)클래스명 {}
다형성이란?
하나의 타입(클래스, 인터페이스)으로 여러 객체를 관리할 수 있는 기능이다
==========================================================================
종류 | 인터페이스 | 추상 클래스
==========================================================================
다중 상속 | O | X
메소드 구현 여부 | X (추상 메소드로 구성됨) | O ( 일부 구현 가능 )
인스턴스화 가능 여부 | X
==========================================================================
참조 변수로는 가능하나 인스턴스화로는 불가능하다
*예외 처리 :
- 예외 처리의 필요성 : 프로그램의 비정상 종료를 방지하고,
오류 발생 시 적절한 대응을 하기 위해서
[연산자]
: 프로그램이 실행될 때 연산을 도와주는 기호들
- 연산이 수행될때 우선순위 순서로 진행되며,
같은 우선순위의 연산자는 진행방향/결합방향에 따라 진행됨 (기본적으로 왼쪽에서 오른쪽으로 진행)
입출력 (IO) **
- 자바에서 IO는 [스트림]을 통해 이루어진다.
* 종류
[1] [ 바이트 (기반) 스트림 ] : 바이트 단위로 데이터를 읽고 씀
+ 최상위 클래스로 [ InputStream(입력) ] 클래스와 [ OutputStream(출력) ] 클래스가 있음
+ 이진 데이터, 네트워크 통신 시 주로 사용
[2] [ 문자 (기반) 스트림 ] : 문자 단위로 데이터를 읽고 씀
+ 최상위 클래스로 [ Reader(입력) ] 클래스와 [ Writer(출력) ] 클래스가 있음
+ 텍스트 데이터, 인코딩 변환 시 주로 사용
제네릭 :
-클래스 또는 메소드에서 사용되는 다양한 데이터 타입을 일반화 시켜서 정의하는 것
특징
- 코드 재사용성이 높아지고
- 타입 안정성 제공 (의도하지 않은 타입 사용 방지)
- 불필요한 형변환을 줄임
제네릭 클래스(제네릭 적용된 클래스)
표현법 *
[접근제한자] [예약어] class 클래스명<T> {} // T : 타입매개변수
* 특징 *
+ 제네릭 클래스 객체 생성 시 "타입 매개변수"를 결정해주는 것이 좋음
=> 명시되지 않으면 "Object"로 처리됨
ex) DataClass<String> d; // T --> String
DataClass d2; // T --> Object
제네릭 클래스의 참조 변수 선언 시 "타입 (매개변수)"를 명시하고,
생성 부분(new) 에서는 <>만 사용 가능.
ex) DataClass<String> d = new DataClass<String>();
DataClass<String> d2 = new DataClass<>();
=> 객체 생성 시 "일반 자료형"은 사용할 수 없음
* 일반자료형 : int, char, double, float, long, short, byte, boolean
--> 일반자료형 타입을 클래스화 => 래퍼클래스(Wrapper class)
* Float, Character, Integer, Long, ...
+ 타입 매개변수 적용 범위
: 메소드 매개변수타입 / 메소드 반환타입 / 필드의 자료형(데이터타입)
class DataClass<T> {
T value; // 필드의 데이터타입
public void method(T data) {} // 메소드의 매개변수 타입
public T method2() {} // 메소드의 반환타입
}
- 제네릭 메소드 (제네릭이 적용된 메소드)
* 표현법 * :
접근제한자 예약어 <T> 반환타입 메소드명(매개변수정보) {
T 지역변수;
}
*제네릭 메소드 타입 매개변수*
적용 범위 : 반환타입, 매개변수타입, 메소드 내 지역변수타입
* 특징 *
+ 메소드 내에서 사용하는 "데이터 타입"을 일반화시켜 정의
+ 제네릭 메소드의 타입 파라미터를 결정하는 방법
public <T> void method(T data) {} :
- 호출 시 직접 명시하기 => 참조변수.<String>method("금요일");
- 호출 시 전달되는 값의 타입에 따라 자동으로 결정되게 하기
=> 참조변수.method("금요일"); // T --> String
참조변수.method(128); // T --> Integer
참조변수.method(2.11); // T --> Double
=> 매개변수의 타입이 제네릭 타입이어야 함!
- 호출 시 반환 값을 받는 변수의 타입에 따라 자동으로 결정되게 하기
public <T> T method2() {
T data = null;
return data;
}
String data = 참조변수.method2(); // T --> String
int data2 = 참조변수.method2(); // T --> Integer
반환타입이 제네릭 타입이어야 함!
* 매개변수가 제네릭을 사용하지 않아야 함!
- 제네릭 타입 제한하기
<T> : 어떤 타입 파라미터든 허용
<T extends 클래스 또는 인터페이스>
: 부모 타입을 상속받은 자식 클래스만 허용
<T extends 클래스A>
: 클래스A, 또는 클래스A의 상속받은 클래스만 허용
<T extends 인터페이스A>
: 인터페이스A를 구현(상속)한 클래스만 허용
<T extends 클래스A & 인터페이스A>
: 클래스A를 상속받고 인터페이스A를 구현한 클래스만 허용
* 콜렉션 :
자바에서 제공하는 기본 자료구조 프레임워크
- 자료구조 : 많은 데이터를 효율적으로 관리할 수 있는 방법들
- 프레임워크 : 이미 만들어져 있는 틀 (뼈대)
================================================
List Set
----------------------------------------------------------------------------
순서 | O X
중복 데이터 허용 | O X
----------------------------------------------------------------------------
데이터 추가 메소드 | add(데이터)
데이터 삭제 메소드 | remove(데이터)
데이터 조회 메소드 | get(인덱스) | Iterator 객체 사용
| --> iterator() // 생성, hasNext() // 데이터 유/무 확인,
next() // 데이터 조회
데이터 길이 조회 | size()
================================================
public static void lotto() {
// Set 객체 생성
Set<Integer> lottos = new HashSet<>();
1. 먼저 1 ~ 45 사이 정수값 삽입
for(lottos.size() < 6 ) {
lottos.add( (int)(Math.random() * 45 + 1) );
}
int[] nums = new int[6];
Iterator<Integer> it = lottos.iterator();
for( int i=0; it.hasNext() ; i++ ) { // it.hasNext(); ---> 데이터 유/무 확인
int n = it.next(); // 참조변수.next(); ---> 데이터 조회
nums[i] = n; // 배열에 조회된 데이터 대입
}
for(int i=0; i < nums.length; i++) {
Syste.out.print(nums[i] + " "); // 배열의 i번째 인덱스 데이터 조회
}
System.out.println( Arrays.toString(nums) ); // [ d1, d2, d3, ... ]
}
}
'Java' 카테고리의 다른 글
자바 Map (0) | 2024.07.12 |
---|---|
자바 복습하기 _ 1 (0) | 2024.07.11 |
자바 Collection List, Set (0) | 2024.07.09 |
자바 입출력 완전 이해하기 (0) | 2024.07.07 |
클래스, 상속 (0) | 2024.07.06 |