- 자바란
- 자바 코드의 구조
- 변수
- 자료형
- 배열
- 리스트
- 메서드 정리
자바
- 객체 지향 언어
- 웹, 모바일 앱 개발에서 가장 많이 사용됨
- 우리나라 기업에서 많이 사용되어 자바를 기반으로 한 수많은 라이브러리들이 존재 --> 자바 강력 추천
자바 코드의 구조
public class Sample { // 클래스명 Sample
public static void main(String[] args) { /* static이 붙으면 클래스 메서드가 되어
객체를 만들지 않아도 'Sample.main'으로 호출가능*/
// 메서드명 main
System.out.println("Hello java");
// 메서드 안에는 명령문이 있으며 명령문은 반드시 세미콜론을 붙여 문장이 끝났다는걸 표시해야함
}
}
- 클래스명 : Sample (클래스명은 명사이며 대문자로 시작한다 -> 파스칼 케이스)
- 메서드명 : main (동사로 하며 소문자로 시작한다 -> 카멜케이스)
변수
- 빈상자와 같음 (나중에 넣거나 뺄수도 있음)
- 변수의 3가지 규칙
1. 변수명은 숫자로 시작할 수 없다.
2. _와 $ 이외의 특수 문자는 사용할 수 없다.
3. int, class, return 등 자바의 키워드는 변수명으로 사용할 수 없다.
자료형
- 자바의 기초가 되고 중요함
- 변수의 자료형(type) 에 맞게 변수를 할당해야함
- 자주 쓰이는 자료형
정수 ( int, long )
int age = 10;
long countOfStar = 8764827384923849L;
// long 자료형 변수에 값을 대입할 때 int 자료형의 최댓값인 2147483647보다 크면
// 끝에 접미사로 L 자를 붙여 주어야 한다
// L을 누락하면 컴파일 오류 발생!!
- 증감 연산 ( ++, -- )
int i = 0;
System.out.println(i++); // 0 출력 후 ++가 실행됨
System.out.println(i); // 1 출력
int i = 0;
System.out.println(++i); // 1 출력 (++이 먼저 된 거임!)
System.out.println(i); // 1 출력
i++처럼 ++ 연산자가 변수명 뒤에 붙으면 해당 코드가 실행되는 순간에는 i값이 변경되지 않는다. 다만 i++ 문장이 실행된 이후에 i값이 증가한다. 이와 반대로 i++ 대신 ++i를 사용하면 i값이 먼저 증가된 후에 해당 코드가 실행된다.
실수 ( float, double )
float pi = 3.14F; //마찬가지로 f,F 안붙이면 컴파일 오류 발생!!
double morePi = 3.14159265358979323846;
불 ( boolean )
- 참(true) 또는 거짓(false)의 값을 갖는 자료형
// 불 연산 사용 예1
boolean a = true;
boolean b = false;
// 불 연산 사용2 ( 조건문 )
int base = 180;
int height = 185;
boolean isTall = height > base;
if (isTall) {
System.out.println("키가 큽니다."); // 출력 : 키가 큽니다
}
// 불 연산 사용3 ( 조건문 )
int i = 3;
boolean isOdd = i % 2 == 1;
System.out.println(isOdd); // true 출력
문자 ( char )
char a1 = 'a'; // 문자로 표현
char a2 = 97; // 아스키코드로 표현
char a3 = '\u0061'; // 유니코드로 표현
System.out.println(a1); // a 출력
System.out.println(a2); // a 출력
System.out.println(a3); // a 출력
char은 많이 사용하는 편이 아니지만 위와 같이 문잣값을 표현하는 방식이 다양하다는 걸 유념하자.
문자열 ( String )
- 리터럴 표기 방식
- 가급적이면 이걸 사용하는게 좋다.
- 가독성이 좋고 컴파일에 최적화
- new 키워드 사용 표기 방식 ➡️ 객체 만들 때 사용
// 리터럴 표기
String a = "LG TWINS";
// new 객체
String a = new String("LG TWINS");
- 문자열 내장 메서드 ( a. [메서드](b) )
String a = "Hello Java";
String b = new String("Hello Java");
// 1. eqauls ( 문자열 2개 비교 )
System.out.println(a.equals(b)); // true
System.out.println(a == b); // false
// 2. indexOf ( 시작 위치 리턴 )
System.out.println(a.indexOf("Java")); // 6 출력
// 3. charAt ( 특정 위치 문자 리턴 )
System.out.println(a.charAt(6)); // J 출력
// 4. contains ( 특정 문자열 포함 여부 리턴 )
System.out.println(a.contains("Java")); // true 출력
// 5. replaceAll ( 특정 문자열 바꿀 때 )
System.out.println(a.replaceAll("Java", "World")); // Hello World 출력
// 6. substring ( 특정 문자열 뽑아낼 때 )
System.out.println(a.substring(0, 4)); // Hell 출력
// 7. toUpperCase ( 모두 대문자로 변경 )
System.out.println(a.toUpperCase()); // HELLO JAVA 출력
// 8.split ( 문자열 배열로 리턴)
String a = "a:b:c:d";
String[] result = a.split(":"); // result는 {"a", "b", "c", "d"}
== 연산자는 2개의 자료형의 같은 객체인지를 판별할 때 사용
문자열 포매팅
String. format 메서드 사용
System.out.println(String.format("I eat %d apples.", 3)); // "I eat 3 apples." 출력
System.out.println(String.format("I eat %s apples.", "five")); // "I eat five apples." 출력
int a = 4;
String b = "LG";
System.out.println(String.format("%S twins ready for V%d", b, a)); //"LG twins ready for V4"출력
( %s 포맷 코드는 어떤 형태의 값이든 변환해서 넣을 수 있다)
String.format과 printf 의 차이
- String.format(): 포맷된 문자열을 반환하고, 이를 다른 변수에 저장하거나 후속 작업에 사용할 수 있음음
- System.out.printf(): 포맷된 문자열을 바로 콘솔에 출력 -> 단순히 콘솔에 출력한다면 이거
StringBuffer (문자열 추가, 변경 시 주로 사용)
- String과 차이점
- String은 값을 변경할 수 없다 (immutable) toUpperCase의 메서드를 쓸 수는 있지만 또 다른 객체를 생성하여 리턴하는 것 뿐이다.
- StringBuffer()로 객체를 생성하면 String을 사용할 때보다 메모리 사용량도 많고 속도도 느리다
- => 문자열을 추가하거나 변경하는 작업이 많으면 StringBuffer를, 적으면 String을 사용하는 것이 유리
- 메서드
- append ( 추가 )
- toString ( StringBuffer를 String 자료형으로 변경 )
- insert ( 특정 문자열 삽입)
- substring ( 뽑아냄 )
StringBuffer a = new StringBuffer(); // StringBuffer 객체 a 생성
a.append("hello");
a.append(" ");
a.append("java");
String b = a.toString();
System.out.println(b); // "hello java" 출력
a.insert(0, "happy ");
System.out.println(a); // "happy hello java" 출력
System.out.println(a.substring(0, 4)); // "happ" 출력
배열
- 자료형의 종류 X , 자료형의 집합 O
- immutable
//배열 만들기
int[] x = {1,3,5,7,9};
String[] a = {"무", "적", "엘", "지"}
// 길이 설정
String[] weeks = new String[7];
weeks[0] = "월";
weeks[1] = "화";
weeks[2] = "수";
weeks[3] = "목";
weeks[4] = "금";
weeks[5] = "토";
weeks[6] = "일";
초깃값 없이 배열 변수를 만들 때는 7과 같은 숫잣값을 넣어 길이 정해 줘야함
- 그렇지 않으면 오류 발생!!
// 배열에 접근
String[] weeks = {"월", "화", "수", "목", "금", "토", "일"};
System.out.println(weeks[3]); // 목
for (int i = 0; i < weeks.length; i++) { // weeks.lenth는 7이다
System.out.print(weeks[i]);
} // 월화수목금토일
length : 길이 구하는 메서드
System.out.println(weeks[7]);
// 여덟 번째 배열값이 없으므로 ArrayIndexOutOfBoundsException 오류 발생
리스트
- 리스트는 크기가 정해져있지않아(mutable) 배열과 다르게 원하는 만큼 담을 수 있음
- 마찬가지로 자료형의 종류가 아닌 자료형의 집합임
- ArrayList, Vector, LinkedList
ArrayList
헷갈리지 말 것.
- 인덱스는 [0], [2] 와 같이 몇번째인지 나타내는것
- 객체(값, 요소)와 인덱스는 다름
- add (요소 추가)
- get ( 특정 인덱스 값 추출 )
- size (요소의 개수 리턴 )
- contains ( 해당 값 여부 판별, boolean으로 리턴)
- remove (객체) -> 객체에 해당하는 항목을 삭제한 뒤, 그 결과로 true 또는 false를 리턴
- remove (인덱스) -> 해당 값을 삭제한 뒤, 그 항목을 리턴
import java.util.ArrayList;
public class Sample {
public static void main(String[] args) {
ArrayList a = new ArrayList();
a.add("138");
a.add("129");
a.add("142");
System.out.println(a.get(1)); // 129 출력
System.out.println(a.size()); // 3 출력
System.out.println(a.contains("142")); // true 출력
System.out.println(a.remove("129")); // 129를 리스트에서 삭제하고, true를 리턴한다.
System.out.println(a.remove(0)); // 첫 번째 항목 138을 삭제한 뒤, 138을 리턴한다.
}
}
ArrayList<String> [변수] = new ArrayList<>();
제네릭스 도입 전후의 차이는 ArrayList 자료형 다음에 <String>이 있는가에 있다.
제네릭스를 표현한 <String> 은 ‘ArrayList에 담을 수 있는 자료형은 String뿐이다’라는 뜻이다.
즉, 제네릭스를 이용하면 자료형을 좀 더 명확하게 체크할 수 있다는 장점이 있다.!
제네릭스를 사용하지 않으면 ArrayList에 추가하는 객체는 Object 자료형( = 모든 객체가 상속하고 있는 가장 기본적인 자료형) 으로 인식된다.
따라서 ArrayList 객체인 [변수]에 값을 넣을 때는 문제가 없지만 값을 가져올 때는 매번 Object 자료형에서 String 자료형으로 형 변환(casting) 을 해야 한다. 이처럼 제네릭스를 이용하면 형 변환과 관련된 불필요한 코딩을 줄일 수 있고, 잘못된 형 변환 때문에 발생하는 런타임 오류를 방지할 수 있다
asList 와 add의 차이점
- asList()는 고정된 크기의 리스트를 반환하며, 구조를 변경할 수 없음
- add()는 가변 리스트에 요소를 추가할 수 있으며, 크기를 동적으로 조절할 수 있음
- asList는 나중에 더 자세하게 배우며 지금으로서는 add를 쓰도록 하자!
리스트 1개의 문자열로 만들기와 정렬하기
- String.join (1개의 문자열로 만들기)
- Comparator.naturalOrder(), Comparator.reverseOrder() ( 오름차순, 내림차순 정렬 sort메서드)
// String.join("구분자", 리스트 객체);
// 리스트 객체.sort(Comparator.naturalOrder());
import java.util.ArrayList;
import java.util.Arrays;
public class Sample {
public static void main(String[] args) {
ArrayList<String> pitches = new ArrayList<>(Arrays.asList("138", "129", "142"));
String result = String.join(",", pitches);
System.out.println(result); // 138,129,142 출력
pitches.sort(Comparator.naturalOrder()); // 오름차순으로 정렬
System.out.println(pitches); // [129, 138, 142] 출력
}
}
메서드 정리
String | length | contains | equals | substring | charAt | replaceAll | indexOf | split |
StringBuffer | insert | toString | append | substring | ||||
배열 | length | |||||||
리스트 | size | contains | add | get | remove |
- add() vs set()
- add() : 리스트에 새로운 요소 추가
- set() : 리스트에 기존 요소 수정
- get() vs put()
- get() : Map에서 키에 해당하는 가져올 때
- put() : Map에서 키와 값을 추가하거나 수정할 때
List<String> list = new ArrayList<>();
list.add("apple"); // 맨 끝에 추가
list.add(0, "banana"); // 첫 번째 위치에 삽입
list.set(1, "cherry"); // 두 번째 요소를 "cherry"로 변경
list.set(1, "cherry"); // 두 번째 요소를 "cherry"로 변경
Map<String, String> map = new HashMap<>();
map.put("name", "John"); // 새로운 키 - 값 추가
System.out.println(map.get("name")); // "John"
Quiz
문제 | 답 | |
1 | 다음 중 int 자료형의 크기는? | c) 32비트(4바이트) |
2 | Java에서 소수점이 있는 실수형 데이터를 저장하기 위해 사용하는 자료형은? | c) float |
3 | double 자료형과 float 자료형의 차이점은 무엇인가? | b) double은 64비트, float은 32비트이다. |
4 | 다음 중 boolean 자료형이 가질 수 있는 값은? | a) true와 false |
5 | 다음 중 boolean 값을 반환하는 메서드는? a) isEmpty() b) size() c) toString() d) charAt() |
a) isEmpty() -> string이나 list에서 쓰임 size는 list에서 요소 개수 리턴 toString은 StringBuffer에서 객체로 반환하는 메서드 charAt는 String에서 특정 위치 문자 리턴 |
6 | 다음 중 boolean 표현식을 적절히 사용하는 경우는? a) boolean x = 10; b) boolean y = true; c) boolean z = "true"; d) boolean w = 0; |
b) boolean y = true; |
7 | 다음 중 문자열을 상수 풀(String Pool)에 저장하는 방법은? | b) "example" |
8 | 다음 중 문자열 길이를 반환하는 메서드는? a) length() b) size() c) getLength() d) count() |
a) length() 배열, 문자열이 length고 리스트는 size c)는 자바에서 없는 단어 |
9 | 다음 코드의 출력 결과는 무엇인가? String s1 = "Java"; String s2 = new String("Java"); System.out.println(s1 == s2); |
c) 컴파일오류 s1.equals(s2)하면 true라고 나옴(객체의 내용비교) ==은 객체가 같은 메모리 위기를 가르키는지 확인하기때문에 오류 |
10 | Java에서 배열의 길이를 얻기 위해 사용하는 속성은? | b) length() |
11 | 다음 중 Java에서 다차원 배열을 선언하는 올바른 문법은? | b) int[][] arr = new int[2][2]; |
12 | 배열에 초기값 없이 선언된 int 배열의 기본값은? | d) 컴파일 오류 배열은 꼭 길이의 초기값을 설정해주어야한다. |
13 | 배열의 인덱스는 몇부터 시작하는가? | a) 0 |
14 | 다음 코드의 출력 결과는? int[] arr = {1, 2, 3, 4}; System.out.println(arr[2]); |
a) 1 |
15 | Java에서 List 인터페이스를 구현한 클래스가 아닌 것은? | c) HashSet |
16 | 다음 중 ArrayList의 기본적인 특징은 무엇인가? | c) 임의 접근이 가능하다. |
17 | List에서 요소를 추가할 때 사용하는 메서드는? | c) add() |
18 | 다음 코드의 출력 결과는 무엇인가? | b) Python |
19 | List의 요소를 반복하기 위해 사용할 수 있는 방법인 것은? | d) 모두 맞음 |
20 | Java에서 기본 자료형(primitive types)과 참조 자료형(reference types)의 차이점에 대해 설명하시오. | 기본 자료형은 int, float, boolean과 같은 기본 연산을 하고 직접 저장하는 자료형이고 참조 자료형은 String, Array등 객체를 참조하며 메모리를 저장한다. |
21 | 숫자형 자료형 간의 형 변환(예: int에서 double로 변환)이 발생할 때의 주의사항을 설명하시오. | int는 정수지만 double은 부동소수점 숫자이므로 정밀도손실과 자료 범위 초과에 유의하여야 한다. |
22 | Java에서 String 객체를 생성하는 두 가지 방법(리터럴 방식과 new 키워드 사용)의 차이점을 설명하시오. | 리터럴 방식은 상수 풀에 저장되고 new 키워드를 사용하면 새로운 객체를 생성한다. |
23 | Java에서 문자열을 연결하는 방법 (String & StringBuilder)을 설명하고 어떤 방법이 성능 면에서 더 유리한 지 서술하시오. | String은 문자열을 연결할 때 마다 새로운 객체를 생성하고 StringBuilder은 문자열을 가변적인 객체로 다루며 새로운 객체를 생성하지 않는다. 성능 면에서는 StringBuilder이 더 유리하다 |
24 | Java에서 문자열 비교 시 == 연산자와 equals() 메서드의 차이점을 설명하시오. | ==연산자는 우선 같은 객체인지 비교하고 equals메서드는 객체비교를 하지않고 문자열 자체가 같은지 비교한다. |
25 | 배열 선언 방법 2가지를 작성하시오. | String[] a = {"무", "적", "엘", "지"} String[] weeks = new String[7]; |
26 | 배열의 크기를 변경할 수 없다는 특성을 설명하고, 이 문제를 해결하기 위해 사용할 수 있는 대안에 대해 설명하시오. | 배열을 생성할 때부터 크기를 지정하기때문에 고정된 크기가 있어 변경되지 않는다. 따라서 ArrayList를 사용하면된다. |
코테
끗..
'WINK-(Web & App) > JAVA 스터디' 카테고리의 다른 글
[2024-2 Java 스터디] #1주차 이서영 (0) | 2024.10.09 |
---|---|
[2024-2 Java 스터디] 김지나 #1주차 "~List" (2) | 2024.10.09 |
[2024-2 Java 스터디] #1주차 김태일 "나야.. 자바.." (13) | 2024.10.09 |
[2024-2 Java 스터디] 김민서 #1주차 (5) | 2024.10.09 |
[2024-2 Java 스터디] 김지수 #1주차 (1) | 2024.10.08 |