자바 String 배열에 대해 알아보자
2025. 1. 30. 23:58ㆍJAVA
728x90
반응형
안녕하세요. 진득코딩입니다.
이번 시간에는 지난 시간에 이어 String 배열에 대해 살펴보도록 하겠습니다.
String 배열의 선언과 생성
- String 배열의 선언과 생성 방법은 int 배열과 같습니다.
- 예를 들어 3개의 문자열(String)을 담을 수 있는 배열을 생성하는 문장은 다음과 같습니다.
String[] name = new String[3] = new String[3]; //3개의 문자열을 담을 수 있는 배열을 생성합니다.
- 위 코드는 3갱의 String 타입의 참조변수를 저장하기 위한 공간이 마련되고 참조형 변수의 기본값은 null이므로 각 요소의 값은 null로 초기화됩니다.
- 변수의 타입에 따른 기본값을 표로 정리해서 살펴보겠습니다.
자료형 | 기본값 |
boolean | false |
char | '\u0000' |
byte, shor, int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d 또는 0.0 |
참조형 변수 | null |
String 배열의 초기화
- 초기화하는 방법도 int 배열과 동일한 방법을 사용합니다.
- 괄호{}를 사용해서 다음과 같이 간단히 초기화할 수도 있습니다.
- 배열에는 실제 객체가 아닌 객체의 주소가 저장되어 있습니다.
- 참조형 배열의 경우 배열에 저장되는 것은 객체의 주소입니다.
- 참조형 배열을 객체 배열이라고도 합니다.
- 참조형 변수를 간단히 참조변수라고 하며, 모든 참조형 변수에는 객체가 메모리에 저장된 주소인 4byte의 정수값(0x0~0xffffffff) 또는 null이 저장됩니다.
- names라는 String 배열을 생성과 초기화하여 해당 값을 String에 넣고 향상된 for문으로 출력해 보는 예제입니다.
- 16진수를 2진수로 변환하는 예제입니다.
- 먼저 변환하고자 하는 16진수를 배열 hex에 나열합니다.
- 16진수에는 A~F까지 6개의 문자가 포함되므로 char 배열로 처리하였습니다.
- 그리고 문자열 배열 binary에는 이진수 '0000'부터 '1111'(16진수로 0~F)까지 모두 16개의 값을 문자열로 저장합니다.
- for문을 이용해서 배열 hex에 저장된 문자를 하나씩 읽어서 그에 해당하는 이진수 표현을 배열 binary에서 얻어 result에 덧붙이고 그 결과를 화면에 출력합니다.
char배열과 String클래스
- 지금까지 문자열을 저장할 때 String타입의 변수를 사용했습니다.
- 문자열이라는 용어는 '문자를 연이어 늘어놓은 것'을 의미하므로 문자배열인 char배열과 같은 뜻입니다.
- 자바에서 String 클래스는 char배열에 여러 가지 기능을 추가해서 확장한 것입니다.
- 그래서 char배열을 사용하는 것보다 String클래스를 사용하는 것이 문자열을 다루기 더 편리합니다.
String클래스는 char배열에 기능(메서드)을 추가한 것입니다.
- 객체지향언어에서는 데이터와 그와 관련된 기능을 하나의 클래스에 묶어서 다룰 수 있게 합니다.
- 즉, 서로 관련된 것들끼리 데이터와 기능을 구분하지 않고 함께 묶습니다.
- 여기서 말하는 '기능'은 함수를 의미하며, 메서드는 객체지향 언어에서 '함수' 대신 사용하는 용어일 뿐 함수와 같은 뜻입니다.
- char배열과 String클래스의 한 가지 중요한 차이가 있는데, String객체(문자열)는 읽을 수만 있을 뿐 내용을 변경할 수 없습니다.
- 위 코드에서 문자열은 변경할 수 없으므로 새로운 내용의 문자열이 생성됩니다.
String클래스의 주요 메서드
- String 클래스의 문자열 관련 메서드 중 가장 기본적인 몇 가지만 표로 정리해서 살펴보도록 하겠습니다.
메서드 | 설명 |
char charAt(int index) | 문자열에서 해당 위치(index)에 있는 문자를 반환합니다. |
int length() | 문자열의 길이를 반환합니다. |
String substring(int from, int to) | 문자열에서 해당 범위(from~to)에 있는 문자열을 반환합니다.(to는 범위에 포함되지 않음) |
boolean equals(Object obj) | 문자열의 내용이 obj와 같은지 확인합니다. 같으면 결과는 true, 다르면 false가 됩니다. |
char[] toCharArray() | 문자열을 문자배열(char[])로 변환해서 반환합니다. |
- CharAt메서드는 문자열에서 지정된 index에 있는 한 문자를 가져옵니다.
- charAt메서드의 index값은 0부터 시작합니다.
- substring()은 문자열의 일부를 뽑아낼 수 있습니다.
- substring()의 범위의 끝은 포함되지 않습니다.
- equals()는 문자열의 내용이 같은지 다른지 확인하는데 사용합니다.
- equals()는 대소문자를 구분합니다.
- 만일 대소문자를 구분하지 않고 비교하려면 equals() 대신 equalsIgnoreCase()를 사용해야 합니다.
char배열과 String클래스의 변환
- char배열을 String클래스로 변환하거나, 또는 그 반대로 변환해야 하는 경우에 위와 같이 코드를 작성합니다.
- String클래스의 charAt(int idx)을 사용하는 방법을 보여주는 예제입니다.
- idx의 값은 배열처럼 0부터 시작합니다.
- println()로 문자배열을 출력하면 문자열 출력하듯이 문자배열의 모든 요소를 이어서 한 줄로 출력합니다.
- 문자열(String)을 모로스(morse) 부호로 변환하는 예제입니다.
- String의 문자의 개수는 length()를 통해서 얻을 수 있고, charAt(int i) 메서드는 String의 i번째 문자를 반환합니다.
- for문의 조건식에 length()를 사용하고 charAt(int i)를 통해서 source에서 한 문자씩 차례대로 읽어올 수 있습니다.
커맨드 라인을 통해 입력받기
- 커맨드라인을 이용하여 프로그램을 실행할 때 클래스 이름 뒤에 공백문자로 구분하여 여러 개의 문자열을 프로그램에 전달할 수 있습니다.
- 예를 들어 main메서드가 담긴 클래스의 이름이 MainTest라고 가정하면 다음과 같이 실행할 수 있습니다.
c:\jdk1.8\javaStudyWorkspace\ch5>java MainTest abc 123
- 커맨드라인을 통해 입력된 두 문자열은 String배열에 담겨서 MainTest클래스의 main메서드의 매겨변수(args)에 전달됩니다.
- main메서드 내에서 args[0], args[1]과 같은 방식으로 커맨드라인으로부터 전달받은 문자열에 접근할 수 있습니다.
- 위 예제는 이제껏 실행한 것처럼 실행하게 되면 예제가 제대로 작동되지 않고 매개변수의 개수 0으로 출력됩니다.
- 이때 제대로 실행하기 위해 이클립스에서 실행하는 방법과 터미널에서 실행하는 방법이 있습니다.
- 먼저 이클립스에서 실행하는 방법에 대해 살펴보겠습니다.
- 일단 Run 옆에 있는 작은 삼각형 버튼을 눌러서 Run Configurations를 찾아 클릭해 줍니다.
- 이후 나온 Run Configurations 창에서 왼쪽 메뉴에서 원하는 class의 이름을 찾아 눌러줍니다.
- 보통 해당 클래스에서 위 창을 열게 되면 이미 클릭되어 있습니다.
- 그리고 상단 메뉴 중에서 Arguments 메뉴를 클릭해 줍니다.
- 해당 메뉴에서 Program arguments에 원하는 인자들을 입력해 줍니다.
- 원하는 인자들을 모두 입력했으면 Apply를 클릭해 줍니다.
- 인자들이 모두 apply된 상태에서 Run 버튼을 눌러주면 실행이 됩니다.
- 위 과정을 거쳐서 실행을 하게 되면 위와 같이 정상적으로 class가 작동하는 것을 확인할 수 있습니다.
- 다음에는 터미널에서 실행하는 방법을 살펴보겠습니다.
- 터미널에서 실행하기 위해서는 해당 파일이 있는 곳에서 터미널을 실행해야 합니다.
- 패키지가 있는 경우에는 해당 파일이 있는 경로가 아닌 그 상위 폴더 즉 패키지들이 있는 위치에서 터미널을 실행해 줍니다.
java -cp . ch5.ArrayEx16 abc 123 "Hello world"
- 실행한 터미널에서 위 코드를 작성해 주시면 터미널에서도 실행이 가능합니다.
javac -encoding UTF-8 ArrayEx16.java
- 만일 인코딩이 안 되는 오류가 나온다면 위 코드로 UTF-8로 실행해 주시면 문제가 해결됩니다.
- 커맨드라인에 입력된 매개변수는 공백문자로 구분하기 때문에 입력될 값에 공백이 있는 경우 큰따옴표("")로 감싸주어야 합니다.
- 커맨드라인에서 숫자를 입력해도 숫자가 아닌 문자열로 처리됩니다.
- 만일 매개변수가 없다고 해서 배열을 생성하지 않으면 참조변수 args의 값은 null이 될 것이고, 배열 args를 사용하는 모든 코드에서 에러가 발생합니다.
- 이러한 에러를 피하려면 위와 같이 if문을 추가해 주면 됩니다.
- 위 예제는 화면으로부터 사칙연산을 수행하는 수식을 입력받아서 계산하여 그 결과를 보여주는 예제입니다.
- 커맨드라인으로부터 입력받은 데이터는 모두 문자열이므로 숫자와 문자로 변환이 필요하며, Integer.parseInt()를 사용했습니다.
- 터미널에서 실행하기 위해서는 위와 같이 패키지들이 있는 경로에서 터미널을 실행해 줍니다.
- 이후 UTF-8로 실행하기 위해 인코딩을 하면서 컴파일해 주었습니다.
- 인자 없이 실행하게 되면 위 코드에서 작성한 if문에 걸려서 위와 같은 문구가 출력됩니다.
- 인자들을 입력하게 되면 결과값이 잘 출력되는 것을 확인할 수 있습니다.
원래 이번 시간에는 String 배열과 다차원 배열을 모두 다루려고 했지만 String 배열이 생각보다 길어져서 여기에서 마무리하게 되었습니다.
또한 커맨드로 입력받는 부분이 생소한 부분이어서 알아보면서 블로그를 작성하여 오래 걸려서 시간 관계상 여기에서 마무리하는 이유도 있습니다.
이렇게 예상하지 못한 문제가 생겼을 때 구글 검색과 여러 방면으로 해결하는 것도 좋은 개발자의 자세라고 생각합니다.
이번에 배우게 된 String배열을 이용해서 String을 자유롭게 이용하고 String 클래스의 비밀을 알게 된 느낌이라 뜻깊은 포스팅이었습니다.
이번 시간은 여기까지입니다.
궁금하신 사항이나 문의하실 사항이 있다면 댓글에 남겨주시면 열심히 답글 달도록 하겠습니다.
끝까지 봐주셔서 감사합니다.😊
728x90
반응형
LIST
'JAVA' 카테고리의 다른 글
객체지향언어 자바의 객체와 클래스를 알아보자 (0) | 2025.02.03 |
---|---|
자바 다차원 배열과 가변 배열에 대해 알아보자 (2) | 2025.01.31 |
자바 배열에 대해 알아보자 (2) | 2025.01.29 |
자바 반복문 while문에 대해 알아보자 (0) | 2025.01.06 |
자바 반복문 for문에 대해 알아보자 (0) | 2025.01.03 |