-
2. Java 자료형(신) Java 2021. 7. 27. 14:54
자료형
자료형은 프로그래밍을 할 때 쓰이는 숫자, 문자열 등의 자료 형태를 의미합니다.
정수(int, long)
숫자 자료형은 정수 실수로 이루어집니다. 숫자 자료형은 byte, short, int, long을 사용합니다. 하지만 byte와 short는 거의 사용하지 않습니다.
https://wikidocs.net/204 즉 정수는 int와 long을 쓰는 경우가 대부분이고 long을 사용하는 경우에 숫자에 가장 마지막에 접미사 L을 붙여줍니다.
실수 (float, double)
자바의 실수를 표현하기 위한 자료형은 float와 double입니다. float와 double의 차이는 표현할 수 있는 숫자의 범위입니다. 자바에서의 실수형은 디폴트가 double이므로 float 변수를 사용할 때는 접미사 F를 숫자의 가장 마지막에 붙여주면 됩니다.
8진수와 16진수는 int 자료형을 사용하여 표기할 수 있습니다. 8진수는 0으로 시작하면 사용할 수 있고 16진수는 0x~식으로 사용하면 사용할 수 있습니다.
사칙 연산
자바의 사칙연산은 실생활의 사칙연산과 다르바가 없습니다. + - * % / 의 기호들을 통해서 사칙연산을 수행합니다. 여기서 '%' 이 연산자를 궁금해하는 사람이 많을 수 있습니다. 이 것은 나머지 값을 반환하는 연산자입니다.
증감 연산
자바는 ++, -- 기호를 이용하여 값을 증가하거나 감소시킬 수 있습니다. 이러한 기호를 증감 연산자라고 합니다. 증감 연산자는 위치에 따라 작동하는 것이 다른데 ++i --i 이 경우 이 값이 실행이 될 때 바로 올라가게 됩니다. 하지만 i-- i++의 경우 실행이 된 이후에 증가하게 되는 차이가 있습니다.
부울(boolean)
부울 자료형은 참 또는 거짓의 값을 가지는 자료형이라고 합니다. 부울 자료형은 불린이라고도 부르고 불린은 참과 거짓만 값에 들어올 수 있습니다.
boolean isTrue = true;
boolean isFalse = false;
불린의 연산 결과는 참 또는 거짓이므로 if문과 같은 조건문에 쓰이거나 부울 자료형에 대입될 수 있습니다.
문자(char)
한 개의 문자를 변수에 담을 때는 char를 사용합니다. 주의할 점은 '' 홑따음표를 사용해서 저장을 해야하고 char은 거의 사용되지 않기 때문에 이런 것이 있다 정도로 알아두면 좋습니다.
문자열(String)
문자열은 문장을 뜻합니다. 문자는 우리가 기존에 배웠던 자료형들과는 조금 다릅니다. String의 경우 문자열 자료형인 변수를 선언하는 방법은 2가지 입니다.
String a = "Hello World";
String b = new String("Hello World');
String 자료형에는 몇 가지 유용한 메소드들이 있습니다. 자주 사용되는 것을 알아보도록 하겠습니다.
1. equals : 두 개의 문자열이 동일한 것을 갖고 있는지를 비교하여 boolean을 반환합니다.
* 왜 문자열은 ==를 사용하지 않고 equals를 사용하는 이유는 String은 기본 자료형이 아닌 참조 자료형 즉 객체이기 때문에 메모리 주소가 다르기 때문에 다른 객체로 인식하게 됩니다. 그래서 같은 값을 갖고 있다 하더라도 false가 리턴되기 때문에 ==가 아닌 equals를 사용해야 합니다.
2. indexOf
indexOf는 문자열에서 특정 문자가 시작되는 인덱스를 리턴합니다. 만약 Hello World라는 문자열이 String 변수에 저장이 되어 있다면 W라는 글자는 6번째 있는 것을 알 수 있습니다.
String a = "Hello World";
a.indexOf("W");
3. replaceAll
replaceAll은 문자열 중 특정 문자를 다른 문자로 바꾸고 싶은 경우에 사용합니다.
String a = "Hello World";
a.replaceAll("World", "Java");
위를 하게 되면 a의 값은 Hello Java로 변경이 되게 됩니다.
4. substring
subString은 문자열 중 특정 부분을 뽑아낼 경우에 사용합니다.
String a = "Hello World";
a.substring(0,4);
위의 과정을 거치게 되면 Hell이 반환되는 것을 확인할 수 있습니다. 즉 substring(시작위치, 끝위치)를 사용하면 그 문자열을 뽑아낼 수 있게 됩니다.
* 단 substring은 끝 위치는 포함이 되지 않는다는 것을 꼭 유념해야합니다.
5. toUpperCase
toUpperCase는 모두 대문자로 변경하고자 할 때 사용합니다.
(모두 소문자로 변경할 때는 toLowerCase를 사용하면 됩니다.)
String a = "Hello World";
a.toUpperCase()
위의 과정을 거치게 되면 HELLO WORLD가 되어 있는 것을 알 수 있습니다.
StringBuffer
StringBuffer는 문자열을 추가하거나 변경할 때 주로 사용하는 자료형입니다.
1. append
StringBuffer sb = new StringBuffer();
sb.append("Hello");
sb.append("World");
를 하게 되면 sb에는 Hello World가 들어간 것을 확인할 수 있습니다. 즉 계속해서 문자열을 추가해 나갈 수 있는 것입니다. toString을 사용하면 String 자료형으로 변경도 가능합니다.
StringBuffer가 왜 필요한지에 대해 의문이 들 수 도 있습니다. 왜냐하면 충분히 String으로도 추가할 수 있기 때문입니다. 하지만 여기서 우리가 알아야 할 것은 메모리의 차이입니다. StringBuffer는 우리가 new를 통해서 객체를 생성할 때 단 한번만 생성되지만 String은 연산이 있을 때마다 새로운 객체로 생성이 됩니다. 좀 어렵게 말하면 String은 값이 불변합니다. 영어로는 immutable 하다고 할 수 있습니다. String을 갖고 연산을 하면 문자열이 바뀌는 것처럼 보이지만 실제로는 다른 String 객체를 생성하여 리턴하는 것 뿐입니다. 이와 반대로 StringBuffer는 mutable 즉 가변적이기 때문에 한번 생성된 값을 언제든지 수정할 수 있습니다.
그러면 String보다 StringBuffer가 이점이 많으니 StringBuffer를 사용하는 것이 더 이점이라고 볼 수 도 있찌만 StringBuffer는 String보다 무거운 편에 속하고 속도도 느리기 때문에 문자열의 추가나 변경 등의 작업이 많은 경우에는 StringBuffer, 문자열 변경 작업이 거의 없는 경우에는 String을 사용하는 것이 유리합니다.
2. insert
insert는 특정 위치에 원하는 문자열을 삽입할 수 있습니다.
StringBuffer sb = new StringBuffer();
sb.append("Hello");
sb.insert(0, "Java");
sb.toString()의 값은 Java Hello입니다. insert는 insert(시작위치, 넣고자 하는 값)을 통해 값을 내가 원하는 특정 위치에 추가할 수 있습니다.
3. substring
StringBuffer의 substring은 String의 substring과 사용법이 동일합니다. 시작위치와 끝나는 위치를 지정하게 되면 문자열을 뽑아낼 수 있게 됩니다.
배열(Array)
배열은 하나의 자료형을 여러 개를 저장할 수 있는 데이터 형태를 말합니다. 쉽게 생각하면 여러 개의 박스가 붙어있다라고 생각하면 편합니다.
int[] odds = {1,3,5,7,9};
String[] weeks = {"월", "화", "수", "목", "금", "토", "일"};
즉 배열이란 자료형의 종류가 아닌 자료형의 집합을 의미합니다. 배열의 가장 큰 특징은 길이가 고정되어 있다는 것입니다.
만약 String weeks= new String[7];이라고 한다면 7개의 값만을 저장 받을 수 있는 것이고 배열을 선언할 때 길이를 지정해야만 배열을 사용해야합니다.
- 배열은 index를 접근해서 사용합니다. weeks[3] 이런식으로 3번째 인덱스에 있는 값을 가져올 때 사용합니다.
- weeks.length를 하면 배열의 길이를 얻을 수 있습니다.
- 우리는 배열을 사용하게 되면 ArrayIndexOfOfBoundsException는 많은 에러로 접하게 될 겁니다. 길이가 7개인데 8번째 값을 얻으려고 시도하면 에러가 발생하게 됩니다.
리스트(List)
리스트는 배열과 비슷한 자바의 자료형으로 배열보다 편리한 기능을 많이 가지고 있습니다. 배열은 크기가 정해져야 하지만 리스트는 길이가 정해져 있지 않습니다. List 자료형에는 ArrayList와 LinkedList 등의 List 인터페이스를 구현한 자료형이였다.
1. add
ArrayList list = new ArrayList();
list.add("123");
list.add("456");
list.add("789");
list.add(0, "123");
add는 2가지 방법이 있습니다. 바로 뒤에 추가되는 방법이 add()를 사용하는 것이였습니다. add(인덱스 위치, 값)을 사용하면 내가 원하고자 하는 위치에 값을 저장할 수 있습니다.
2. get
List에서 add한 값을 얻기 위해서 get(인덱스)을 이용하면 특정 인덱스의 값을 추출할 수 있습니다.
3. size
list.size()를 사용하면 리스트 안에 들어있는 개수를 리턴할 수 있습니다.
4. contains
list.contains("값") 이런 방식으로 사용하여 contains 메소드는 리스트 안에 해당하는 값이 있는지 boolean으로 리턴합니다. 만약 list에 해당 값이 포함되면 true 포함되지 않으면 false를 리턴합니다.
5. remove
remove 메소드에는 2개의 방식이 있다. remove(객체) , remove(인덱스)의 경우는 리스트에 해당하는 항목을 삭제하고, 삭제한 결과를 리턴합니다. remove("129") [remove(객체)]이런식으로 사용하면 list에 값이 있다면 true가 나올 것입니다. remove(0)[remove(인덱스)]을 넣게 되면 삭제한 값을 리턴합니다.(0 위치에 129가 있다면 삭제되고 129가 리턴됩니다.)
제네릭스(Generics)
제네릭스는 이 안에 담을 수 있는 것은 지정한 타입 뿐인 것을 명시합니다. 예시를 들어 설명하면 ArrayList<String> list = new ArrayList<String>(); 즉 ArrayList 안에 담을 수 있는 자료형은 String 타입 뿐이라는 것을 명시하는 것입니다.
만약 제네릭스를 사용하지 않으면 Object 자료형으로 인식이 되기 때문에 명시적 형변환을 해주어야 합니다.
제네릭스를 사용하면 해당 값이 어떤 값이 형변환 과정이 필요가 없고 어떠한 값이 들어가 있는지 검증이 됬는지도 과정이 필요해지기 때문에 제네릭스를 사용하면 코드를 간결하게 줄일 수 있습니다.
맵(Map)
자바의 맵을 대응관계를 쉽게 표현할 수 있게 해주는 자료형입니다. Map은 people : 사람, baseball : 야구 이런 관계를 갖습니다. 좀 더 어렵게 말하면 Map은 Key와 Value라는 한 쌍으로 구성됩니다.
Map은 리스트나 배열처럼 순차적으로 해당 요소 값을 구하지 않고 Key를 통해 Value를 얻습니다. 좀 더 간결하게 말하면 Key로 Value를 얻어내고 있습니다.
1. put
HashMap<String, String> map = new HashMap<String, String>();
map.put("people", "사람");
map.put("baseball","야구");
Map에 값을 넣을 때는 put()을 사용하여 저장할 수 있습니다.
2. get
Key에 해당하는 value값을 얻기 위해서는 아래와 같이 사용해야 합니다.
map.get("people")
을 사용하면 people이라는 key를 사용하면 value의 값을 갖고 올 수 있습니다.
3. containsKey
containsKey 메서드 Map에 해당 Key가 있는지를 조사하여 그 결과값을 리턴한다. map.containsKey("people"); people이라는 키가 map에 존재한다면 true를 반환 받습니다.
4. remove
remove 메소드는 Map의 항목을 삭제하는 메서드로 key에 해당하는 아이템을 삭제할 후 그 value를 리턴합니다.
map.remove("people")
를 사용하면 people에 해당하는 key를 찾고 value를 삭제한 후 사람을 반환하게 될 것입니다.
5. size
map.size() Map의 갯수를 리턴합니다. List의 size 배열의 length와 같은 역할을 수행합니다.
'(신) Java' 카테고리의 다른 글
5. 입출력 (0) 2021.07.27 4. 객체지향 프로그래밍 (0) 2021.07.27 3. 제어문 (0) 2021.07.27 1. Java 시작 (0) 2021.07.27 0. Java란? (0) 2021.07.26