같은 타입의 여러 변수를 하나의 묶음으로 다루는 것을 배열 이라 함.

 

서로 다른 타입의 변수들로 구성된 배열은 만들 수 없다. 

배열을 그림으로 그리게 된다면,

이러한 형태이고  변수와 달리 배열은 저장공간이 연속적으로 배치되어 있다는 특징이 있음.

 

선언은 int[] num  이나 int num[]  둘다 가능하며 

new 연산자를 사용하여 선언한다.

 

생성된 배열의 저장공간을 배열의 요소 라고 하며, 인덱스로 각 요소에 접근한다. 인덱스는 요소마다 붙여진 일련번호이며 , 0부터 시작한다.

 

만약 인덱스가 벗어난 값을 사용한다면, ArrayIndexOutBoundsException 이 발생한다.

'java' 카테고리의 다른 글

List, map, Set  (0) 2023.06.16
데몬,우선순위,쓰레드 그룹  (0) 2023.06.15
싱글 쓰레드와 멀티 쓰레드  (0) 2023.06.15
프로세스와 쓰레드  (0) 2023.06.15
오류와 예외  (0) 2023.06.14

알고리즘을 위해 Collection 을 더 공부해야겠다 생각이 들어 작성합니다

 

 

ArrayList

요소를 순차적으로 저장하고 조회하는데 효율적.

요소의 개수가 동적으로 변경되는 상황에 사용 --> int[] 대신 ArrayList<Integer>

 

 

LinkedList

요소 간의 링크를 통해 연결되는 구조, 요소의 추가 및 삭제가 빈번한 상황에 유용.

요소를 중간에 삽입하거나, 삭제하는 경우에 사용.

 

 

HashSet

중복을 허용하지 않는 요소의 모임을 관리.

순서를 보장하지 않으며 , 검색속도가 빠르기때문에 요소의 중복 여부를 확인하는 용도로 사용

 

TreeSet

요소들이 정렬된 상태로 저장되는 자료구조. 요

소들이 항상 정렬된 상태를 유지해야 하는 경우에 적합.

예를 들어, 정렬된 순서대로 데이터를 검색해야하는 경우에 사용됨.

 

HashMap

key-value 쌍을 저장하고 관리하는 자료구조.

특정 키를 사용하여 값을 빠르게 검색하고 조회할 수 있음

TreeMap

요소들이 키를 기준으로 정렬된 상태로 저장되는 구조 정렬된 순서로 데이터에 접근 하는 경우 사용.

 

 

 

상황별 어떤 Collection 을 써야 할지 예시

 

  • 학생들의 성적을 저장하고 조회해야 하는 경우
    • HashMap을 사용하여 학생의 이름을 키(Key)로, 성적을 값(Value)로 저장할 수 있습니다. 특정 학생의 성적을 빠르게 조회할 수 있습니다.
  • 게시판에 게시물을 작성하고 조회해야 하는 경우
    • ArrayList를 사용하여 게시물을 순차적으로 저장하고, 게시물 번호를 인덱스로 활용하여 조회할 수 있습니다. 새로운 게시물을 작성할 때는 ArrayList의 맨 뒤에 추가하면 됩니다.
  • 온라인 쇼핑몰에서 상품 정보를 관리해야 하는 경우
    • HashSet을 사용하여 장바구니 저장시 상품의 고유한 식별자를 저장할 수 있습니다. 중복된 상품을 방지하고, 특정 상품의 유무를 빠르게 확인할 수 있습니다.
  • 로또 번호 생성기
    • TreeSet을 사용하여 생성된 로또 번호를 정렬된 상태로 저장할 수 있습니다. 중복된 번호를 제외하고, 정렬된 번호로 결과를 제공할 수 있습니다.
  • 실시간 주식 가격 정보를 저장하고 조회해야 하는 경우
    • LinkedList를 사용하여 주식 가격 정보를 시간순으로 저장하고, 가장 최근의 가격 정보를 빠르게 조회할 수 있습니다.

'java' 카테고리의 다른 글

배열 다시보기  (0) 2023.09.14
데몬,우선순위,쓰레드 그룹  (0) 2023.06.15
싱글 쓰레드와 멀티 쓰레드  (0) 2023.06.15
프로세스와 쓰레드  (0) 2023.06.15
오류와 예외  (0) 2023.06.14

데몬 쓰레드

  • 보이지 않는곳 에서 실행되는 낮은 우선순위를 가진 쓰레드.
  • 보조적인 역할을 담당하며 대표적인 데몬 쓰레드로는 GC(가비지 콜렉터) 가 있음

사용자 쓰레드

  • 보이는 곳에서 실행되는 높은 우선순위를 가진 쓰레드를 말함.
  • 프로그램 기능을 담당하며 대표적인 사용자 쓰레드로는 메인 쓰레드가 있음
  • JVM 은 사용자 쓰레드의 작업이 끝나면 데몬 쓰레드도 자동으로 종료시켜버림.(main 이 끝나면 종료)

 

우선순위

  • 쓰레드의 작업의 중요도에 따라서 쓰레드의 우선순위를 부여할 수 있음
  • 작업의 중요도가 높을때 우선순위를 높게 지정하면 더 많은 작업시간을 부여받아 빠르게 처리될 수 있음.

쓰레드 그룹

  • 서로 관련이 있는 쓰레드들을 그룹으로 묶어서 다룰 수 있음.
  • 쓰레드 그룹을 따로 지정해주지 않으면 자동으로 main 그룹으로 포함

'java' 카테고리의 다른 글

배열 다시보기  (0) 2023.09.14
List, map, Set  (0) 2023.06.16
싱글 쓰레드와 멀티 쓰레드  (0) 2023.06.15
프로세스와 쓰레드  (0) 2023.06.15
오류와 예외  (0) 2023.06.14

싱글 쓰레드

  • 프로세스 안에서 하나의 쓰레드만 실행되는 것을 말함
  • java 의 경우 main 메서드의 쓰레드 만 실행시킨다면 이것을 싱글 쓰레드라함.

멀티쓰레드

  • 프로세스 안에서 여러개의 쓰레드가 실행되는 것을 말함
  • 쓰레드 끼리 프로세스 자원 공유
  • java 의 경우 메인 쓰레드 외에 작업 쓰레드를 생성하여 여러개의 실행흐름을 만들수 있음

 

멀티 쓰레드의 장점과 단점

  • 장점
    • 여러개의 쓰레드(실행 흐름) 을 통해 여러개의 작업을 동시에 할 수 있어 성능이 좋아짐
    • 스택을 제외한 모든 영역에서 메모리를 공유하기 때문에 자원을 보다 효율적으로 사용
    • 응답 쓰레드와 작업 쓰레드를 분리하여 빠르게 응답을 줌.
  • 단점
    • 동기화 문제가 발생 할수 있음
      • 프로세스의 자원을 서로 사용하려고 하는 충동이 발생할 수 있음
    • 교착 상태가 발생할 수 있음.
      • 서로 자원을 원하는 상태가 되면 서로 끝나기만을 원해 작업이 안멈춤.

그래서 멀티쓰레드를 알고 사용해야함.

 

 

'java' 카테고리의 다른 글

List, map, Set  (0) 2023.06.16
데몬,우선순위,쓰레드 그룹  (0) 2023.06.15
프로세스와 쓰레드  (0) 2023.06.15
오류와 예외  (0) 2023.06.14
추상클래스 이해하기  (0) 2023.06.14

프로세스 

  • 운영 체제로부터 자원을 할당받는 작업의 단위
  • '실행중인 프로그램' 을 의미.

OS 가 프로세스를 할당할때 프로세스 안에 프로그램 code와 Data 그리고 메모리 영역(Stack, Heap) 을 함께 할당 

code : java main 메소드와 같은 코드

data : 프로그램 실행중 저장 할 수 있는 저장공간 (전역변수,정적변수, 배열등 초기화된 데이터를 저장하는 공간)

Stack : 지역변수, 매개변수 리턴 변수를 저장하는 공간

Heap : 동적으로 필요한 변수를 저장하는 공간.

 

 

쓰레드 

  • 프로세스가 할당받은 자원을 이용하는 실행의 단위
  • 프로세스가 작업중인 프로그램에서 실행요청이 들어오면 쓰레드를 만들어 명령을 처리하도록 함
  • 실행을 위한 프로세스 내 주소공간이나 메모리 공간을 공유 받음.
  • 명령처리를 위한 자신만의 메모리공간(Stack)도 할당 받음

 

java 쓰레드

  • 일반 쓰레드와 동일하며 JVM 프로세스안에서 실행되는 쓰레드
  • java Main쓰레드부터 실행되며 JVM 에 의해 실행됨.

 

 

'java' 카테고리의 다른 글

데몬,우선순위,쓰레드 그룹  (0) 2023.06.15
싱글 쓰레드와 멀티 쓰레드  (0) 2023.06.15
오류와 예외  (0) 2023.06.14
추상클래스 이해하기  (0) 2023.06.14
다형성  (0) 2023.06.13

오류

  • 회복이 불가능한 문제
  • 시스템 레벨에서 환경적인 이유로 발생
  • 예상치 못한곳 에서 발생.

예외

  • 회복이 가능한 문제
  • 예상이 가능한 문제.
  • 그래서 인지하고 대응처리할수 있음

예외엔 두가지 종류가 있는데 하나는 컴파일에러, 하나는 런타임 에러이다.

컴파일에러에는 주로 문법적인 이유로 발생하며 문법만 고친다면 해결 가능하다.

런타임에러는 실행중 발생하는 에러인데 컴파일은 잘되었지만 프로그램이 발생시키는 에러이므로 처리가 필요.

 

 

throws 와 thorw

먼저 throws 를 이용해 예외가 발생할수 있다는 것을 알리고 throw 로 예외 발생시 예외 객체를 던지며 해당 메서드는 종료된다.

 

 

 

'java' 카테고리의 다른 글

싱글 쓰레드와 멀티 쓰레드  (0) 2023.06.15
프로세스와 쓰레드  (0) 2023.06.15
추상클래스 이해하기  (0) 2023.06.14
다형성  (0) 2023.06.13
오버라이딩  (0) 2023.06.13

미완성된 클래스

public abstract class 추상클래스명{

	public abstract 반환타입 메소드명();
}

위 처럼 부모 클래스에서 abstract를 이용해 추상클래스로 선언 해주고, 자식 클래스에서 상속받아 완성되어야 한다.

 

 * 또한 상속 받은 클래스에서 추상 클래스의 추상 메서드는 반드시 오버라이딩 되어야 함.

--> 만약  안경을 물려받는다고(상속) 생각하면 안경테(일반 메소드)는 그대로 써도 되지만,

안경알(추상메소드)은 사람마다 도수가 다르기 때문에, 다시 맞춰 써야한다.(오버라이딩)

'java' 카테고리의 다른 글

프로세스와 쓰레드  (0) 2023.06.15
오류와 예외  (0) 2023.06.14
다형성  (0) 2023.06.13
오버라이딩  (0) 2023.06.13
클래스간의 관계와 상속  (0) 2023.06.13

참조변수의 타입변환

  • 자동타입변환
부모타입 변수 = new 자식타입

자식  객체는 부모 객체의 멤버를 상속받기 때문에 부모와 동일하게 취급 가능.

 

  • 강제타입변환
부모타입 변수 = new 자식타입
//이후에
자식타입 변수 = (자식타입) 부모타입;

부모타입 변수로는 자식타입객체의 고유한 멤버를 사용할 수 없기 때문에 사용이 필요.

단! 무조건 자동타입변환이 일어났을 경우에만 강제타입변환이 가능하다!

 

 

다형성이란?

  • 여러 가지 형태를 가질 수 있는 능력 --> 같은 타입으로 여러 객체를 다룰수 있음.
  • 객체의 타입에 따라 다른 메서드가 호출됨.
  • 코드의 유연성과 확장성을 높이는데 사용

 

 

 

instanceof

  • 다형성 기능으로 인해 해당 클래스의 객체의 원래 클래스명을 체크하는 것이 필요할때 씀.
  • 내가 의도하는 클래스의 객체인지 확인 가능
(대상객체) instance of(클래스 이름)  // return boolean

 

 

 

'java' 카테고리의 다른 글

오류와 예외  (0) 2023.06.14
추상클래스 이해하기  (0) 2023.06.14
오버라이딩  (0) 2023.06.13
클래스간의 관계와 상속  (0) 2023.06.13
객체 1  (0) 2023.06.13

+ Recent posts