Java

자바 변수부터 콜랙션까지 내용 정리

최종군 2024. 7. 10. 19:45

* 자바 *


- 자바 프로그램 실행을 위한 필수 메소드 : 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