5주차 - 2) Java

변현섭·2023년 6월 10일
1

4th UMC Server-Spring Study

목록 보기
16/30

4) 배열

① 다차원 배열

  • 다차원 배열은 2차원 이상의 배열을 의미하는데 이는 배열 요소로 또다른 배열을 가지고 있다는 뜻이다. 다차원 배열 중 이차원배열을 구현하는 방법에 대해 알아보기로 하자.
  • 자바에서 2차원 배열을 바로 사용할 수는 없고, 1차원 배열의 배열 요소로 또 다른 1차원 배열을 사용함으로써 2차원 배열을 나타낸다.
  • 영화관 좌석을 예로 들어보자. A1-A5, B1-B5, C1-C5까지 총 5칸씩 3줄이 늘어서 있다. 이를 이차원배열로 나타내는 방법에는 아래와 같이 여러 방법이 있다.
  • 배열에 입력될 요소를 직접 입력하는 경우에는 new String[][]부분을 생략할 수 있다. 이 때, 대괄호는 String 뒤에 붙여도 되고 seats뒤에 붙여도 된다.


  • 배열의 인덱스에 접근하는 방법은 1차원에서와 동일하다. 예를 들어 B2라는 좌석으로 접근하는 경우 seats[1][1]을 사용하면 된다.
  • 만약, 이차원 배열의 각 행마다 열의 개수가 다르다면 어떻게 표현해야 할까? 첫 줄에는 3칸의 좌석만 있고, 둘째 줄에는 4칸, 셋째 줄에 5칸의 좌석이 있다고 가정하자.
  • 입력하는 방법은 크게 다르지 않다. 접근하는 방법 역시 동일하다. 단, 위의 직사각 배열과는 달리, seats[0][3]이나 seats[1][4]는 존재하지 않는 값이므로, 접근할 경우 ArrayIndexOutOfBoundsExceoption이 발생한다.
  • 3차원 배열은 사용할 일이 거의 없으므로 형태만 참고하자. 3차원 배열은 보통 아래와 같이 나타낸다.
  • 다차원 배열을 순회할 때에는 이중포문을 사용해야 한다. foreach로 구현하는 것도 가능은 하겠으나 사용 상의 이점은 없을 것 같다.

② 배열과 메모리

  • 배열은 구성하는 데이터의 자료형에 따라 메모리의 크기가 달라진다.
  • 배열은 동일한 타입의 데이터를 연속적으로 나열하고 있고 인접한 원소는 주소도 인접해 있다. 즉, 인덱스를 통해 접근하는 대신 주소에 대한 증감연산을 이용할 수도 있다.

그 외에도 자바에 대해 더 자세히 알고 싶다면 아래의 링크를 참조하라.
>>자바 설명 바로가기

5) 자료구조

Ⅱ. 실습

1. 자바 개발환경 구성

2. 백준 단계별 문제 풀이 진행

3. 자료구조 문제 풀이 진행

Ⅲ. 보충 설명

1. 자바의 메모리 관리 방법

자바의 메모리는 두 부류로 나뉘어져 관리된다.

1) Stack

  • 원시타입 데이터가 할당되는 곳이다.
  • heap 메모리에 할당된 Object타입 데이터들의 참조를 위한 값도 할당된다.
  • 각 스레드마다 1개의 스택을 담당하여 모든 메서드를 트랙킹한다.
  • 데이터가 순차적으로 저장되는 직선형 구조(LIFO)이다.

2) Heap

  • 주로 긴 생명주기를 갖는 데이터들이 저장되는 곳이다.
  • 스레드 개수의 무관하게 하나의 Heap 영역만 존재한다.
  • Heap영역의 데이터의 주소 값은 Stack에 저장된다.
  • 참조하는 변수가 없다면 자동으로 힙 영역에서 제거된다.
  • 배열타입, 열거타입, 클래스, 인터페이스를 가진다.

2. Kotlin

1) 함수형 언어

함수형 프로그래밍은 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임 중 하나이다.

명령형 프로그래밍에서 상태를 바꾸는 것을 강조하는 것과는 달리, 함수형 프로그래밍은 함수의 응용을 강조한다. 또한 함수형 프로그래밍은, 프로그래밍이 문이 아닌 식이나 선언으로 수행되는 선언형 프로그래밍 패러다임을 따르고 있다.

2) 자바 대신 코틀린이 사용되는 상황

코틀린은 간결성과 생산성이 우월하다. 코틀린은 자바보다 더 간결하고 직관적이라 읽고 쓰기에 편리하다. 자바에 비해 표준 라이브러리의 기능이 다양하여 코드의 반복성이 최소화되며, 자바에서 직접 입력해주어야 하는 코드들을 코틀린에선 묵시적으로 제공하기도 한다.

런타임 에러를 발생시키는 대신 컴파일 시점 검사를 통해 오류를 방지한다는 점에서 안정성이 높다. 자바에서는 NULL을 별도로 다루거나, 관리하기 위해 수많은 코드를 덧붙여야 한다.

하지만 코들린에서는 nullable type으로 null이 될 수 있는 타입이 별도로 존재하여 nullable이 아닌 변수에 null이 입력될 시 컴파일 에러를 발생시킨다(자바의 경우 런타임 에러). 더구나 try-catch문이나 Optional을 사용하는 자바의 방어로직을 코틀린에선 단순한 연산자로 대체할 수 있다.

자바와 코틀린은 상호 운용성이 높다. 즉, 100% 호환 가능하다. 따라서 Java클래스를 Kotlin클래스에서 사용할 수 있고 당연히 그 반대의 경우도 가능하다.

참고로, 우리가 흔히 사용하는 IDE인 IntelliJ를 만든 회사가 바로 Kotlin을 만든 JetBrain이라는 회사이다. 그러다 보니 인텔리제이에서 지원하는 기능이 자바에 비해 많을 수밖에 없다는 것도 코틀린을 선택하는 이유이다. 아직까지는 자바가 더 널리 사용되는 추세이나 차후에는 코틀린 사용이 더욱 확장될 것으로 보인다.

profile
Java Spring, Android Kotlin, Node.js, ML/DL 개발을 공부하는 인하대학교 정보통신공학과 학생입니다.

0개의 댓글