01. 자바란 무엇인가?
01-1 자바란?
- 객체 지향 프로그래밍 언어
- 웹과 모바일 앱 개발에서 가장 많이 사용하는 언어
01-2 자바로 무엇을 할 수 있을까?
- 웹 프로그래밍
- 안드로이드 애플리케이션 개발
- 게임 개발
- 데이터베이스 처리
- 빅 데이터 및 분산 처리
※ 실행 속도가 다소 느리므로 고성능이 중요한 분야에서는 불리
02. 자바 시작하기
02-1 자바 코드의 구조 살펴보기
- 클래스 블록 안에 여러개의 메서드 블록 존재
- 메서드 블록 안에 컴퓨터에 일을 시키는 명령문 존재
※ 클래스명과 소스파일의 이름이 똑같아야함
02-2 변수와 자료형
- 자료형을 변수명 앞에 표시
- class를 통해 자료형을 직접 만드는 것도 가능
02-3 이름 짓는 규칙
- 클래스명은 대문자로 시작
- 메서드명은 소문자로 시작
- 변수명은 의미를 알 수 있도록 짓는 것이 좋음
02-4 주석
1. 블록 주석 (/* */)
/*
여러줄 주석
*/
2. 라인 주석 (//)
//한줄 주석
03. 자바의 기초 - 자료형
- 자료형 : 데이터의 종류와 크기를 결정하는 기본 구성 요소
03-1 숫자
1. 정수
자료형 | 표현범위 |
byte (1바이트) | -128 ~ 127 |
short (2바이트) | -32768 ~ 32767 |
int (4바이트) | -2147483648 ~ 2147483647 |
long (8바이트) | -9223372036854775808 ~ 9223372036854775807 |
※ byte와 short는 표현범위가 너무 좁아 잘 사용하지 않음
- 만약 long자료형 변수에 값을 대입할때 int 자료형의 최댓값인 2147483647보다 크다면 끝에 L자를 붙여주어야 함
int age = 23;
long countOfStar = 8764827384923849L;
2. 실수
자료형 | 표현범위 |
float (4바이트) | -3.4 * 10**38 ~ 3.4 * 10**38 |
double (8바이트) | −1.7 ∗ 10**308 ~ 1.7 ∗ 10**308 |
- 실수형의 기본값은 double --> float변수에 값을 대입할 때에는 끝에 F자를 붙여주어야 함 (소문자도 가능)
float pi = 3.14F; // F 누락 시 컴파일 오류 발생
double morePi = 3.141592;
- e2는 10의 제곱을 의미
double d1 = 1.234e2; //123.4
3. 8진수와 16진수
- 8진수와 16진수는 int 자료형 사용
- 8진수 : 숫자 0으로 시작
int octal = 023; // 십진수: 19
- 16진수 : 알파벳 x로 시작
int hex = 0xC3; // 십진수: 195
4. 숫자 연산 & 증감 연산
- 숫자 연산 : 사칙연산을 수행하는 연산
- 증감 연산자 : 값을 증가 또는 감소시키는 연산자
※ 이 책의 3장에서는 두가지 연산자가 나오지만 자바 연산자의 종류가 많으므로 아래 티스토리를 통해 연산자를 확인!!
03-2 불(boolean)
- 불(boolean) 자료형 : 참 또는 거짓의 값을 갖는 자료형
boolean isTrue = true;
boolean isFalse = false;
03-3 문자
- 문자 자료형은 char를 이용
- 문자보다 문자열을 작성하는 경우가 많으므로 활용성이 적음
- 문잣값 앞뒤를 큰따옴표(" ")가 아닌 작은따옴표(' ')로 감싸주어야 함
char a1 = 'a';
char a1 = 'a'; // 문자로 표현
char a2 = 97; // 아스키코드로 표현
char a3 = '\u0061'; // 유니코드로 표현
※ 다음과 같이 문잣값을 표현하는 방식이 다양하므로 사용할 때 주의 필요 (세가지 모두 'a'라는 문자를 표현)
03-4 문자열
- 문자열을 나타내는 자료형은 String
- 파이썬과는 다르게 큰따옴표로만 감싸주어야 함 (큰따옴표, 작은따옴표 구분됨)
- 문자열을 아래와 같이 new 키워드를 사용하여 표현하는 것도 가능
String a = "Happy Java";
String b = "a";
String c = "123";
String a = new String("Happy Java");
String b = new String("a");
String c = new String("123");
※ 두 표현 방식의 차이점은 아래 티스토리를 통해 확인!! (https://taei1.tistory.com/33)
1. 문자열 내장 메서드
문자열 내장 메서드 | 설명 | 예제 코드 | 출력코드 |
equals | 문자열 2개가 같은지를 비교하여 결괏값 리턴 | String a = "hello"; String b = "java"; String c = "hello"; a.equals(b); a.equals(c); |
false true |
indexOf | 특정 문자여링 시작되는 위치 리턴 | String a = "My name is WINK"; a.indexOf("is"); |
8 // is가 8번째 인덱스에 위치하기 때문 |
contains | 문자열에서 특정 문자열이 포함되어 있는지 여부 리턴 | String a = "Hello Java"; a.contains("Java"); |
true // 문자열안에 Java 포함되어 있다면 true 리턴 |
charAt | 특정 위치의 문자를 리턴 | String a = "Spanish"; a.charAt(6); |
h // 6번째 인덱스인 h 반환 |
replaceAll | 특정 문자열을 다른 문자열로 바꿀 때 사용 | String a = "My name is Tim"; a.replaceAll("Tim", "Mickey"); |
"My name is Mickey" // Tim이 Mickey로 변환 |
substring | 문자열에서 특정 문자열을 뽑아낼 때 사용 | String a = "Hello Mickey"; a.substring(0, 4); |
Hell // 0~3번째 문자열 출력, 인덱스 4의 문자는 포함하지 않음 |
toUpperCase | 문자열을 모두 대문자로 변경할 때 사용 | String a = "Hello Mickey"; a.toUpperCase(); |
// HELLO MICKEY |
split | 문자열을 특정한 구분자로 나누어 문자열 배열로 리턴 | String a = "a:b:c:d"; String[] result = a.split(":"); |
{"a", "b", "c", "d"} |
2. 문자열 포매팅
- 문자열 안에 특정한 값을 바꾸도록 해주는 기법
- String.format 메서드 사용
String.format("I eat %d apples.", 3); // "I eat 3 apples." %d를 이용해 숫자 대입
String.format("I eat %s apples.", "five"); // "I eat five apples." %s를 이용해 문자열 대입
코드 | 설명 |
%s | 문자열 (String) |
%c | 문자 1개 (Character) |
%d | 정수 (Integer) |
%f | 부동소수 (Floating-point) |
%o | 8진수 |
%x | 16진수 |
%% | 문자 % 자체 |
※ %s 는 자동으로 전달되는 파라미터 값을 문자열로 바꾸어 사용 --> 어떤 값이 와도 상관 X
03-5 StringBuffer
- 문자열을 추가하거나 변경할 때 사용하는 자료형
- 문자열을 추가하거나 변경하는 작업이 많으면 StringBuffer 를 사용하는 것을 추천!
메서드 | 설명 | 예제 코드 | 결과 코드 |
append | 문자열을 추가하는 메서드 | StringBuffer sb = new StringBuffer(); sb.append("Hi "); sb.append("Mickey"); String result = sb.toString(); |
//StringBuffer 객체 생성 // "Hi " 추가 // "Mickey" 추가 // result = "Hi Mickey" |
insert | 특정 위치에 원하는 문자열을 삽입 | StringBuffer sb = new StringBuffer(); sb.append("Mickey"); sb.insert(0, "Hi"); String result = sb.toString(); |
//StringBuffer 객체 생성 // "Mickey" 추가 // 0번째 위치에 "Hi" 삽입 // result = "Hi Mickey" |
substring | 원하는 위치의 문자를 뽑아낼때 사용 | StringBuffer sb = new StringBuffer(); sb.append("Mickey"); sb.insert(0, "Hi"); sb.substring(0,4); |
//StringBuffer 객체 생성 // "Mickey" 추가 // 0번째 위치에 "Hi" 삽입 // 0~3번째 문자 반환 "Hi M" |
※ 빈 문자열에 append 를 사용하는 대신 += 을 사용해 추가를 한다면 4개의 객체를 만들어야 함 --> 비효율적임
03-6 배열 (array)
- 자료형 바로 옆에 [] 기호를 붙여 표현
- 자료형의 집합 (자료형의 종류가 X)
int[] odds = {1, 3, 5, 7, 9};
String[] weeks = {"월", "화", "수", "목", "금", "토", "일"};
1. 배열의 길이 설정하기
- new String [] 를 통해 길이 설정
String[] winks = new String[7]; // 배열의 길이를 7로 설정
String[] connect = new String[]; // 숫자를 넣어주지 않으면 컴파일오류 발생
2. 배열값에 접근하기
- []를 통해 배열값에 접근
String[] weeks = {"월", "화", "수", "목", "금", "토", "일"};
weeks[3]; //3번째 인덱스인 "목"에 접근
3. 배열의 길이 구하기
- length를 사용하여 길이 확인
String[] weeks = {"월", "화", "수", "목", "금", "토", "일"};
for (int i = 0; i < weeks.length; i++) { //weeks.length = 7
System.out.println(weeks[i]);
}
03-7 리스트
- 리스트는 배열과 달리 크기가 정해져 있지 않음
- 리스트 자료형로는 ArrayList를 일반적으로 사용
1. 메서드
메서드 | 설명 | 예제 코드 | 츨력 코드 |
add | 요솟값을 추가하는 메서드 | ArrayList pitches = new ArrayList(); pitches.add("138"); pitches.add("129"); pitches.add("142"); |
{"138", "129", "142"} |
get | 특정 인덱스 값을 추출 | ArrayList pitches = new ArrayList(); pitches.add("138"); pitches.add("129"); pitches.add("142"); System.out.println(pitches.get(1)); |
129 |
size | 요소의 개수를 리턴 | ArrayList pitches = new ArrayList(); pitches.add("138"); pitches.add("129"); pitches.add("142"); System.out.println(pitches.size()); |
3 |
contains | 리스트 안에 해당 항목이 있는지 판별해 그 결과를 boolean으로 리턴 | ArrayList pitches = new ArrayList(); pitches.add("138"); pitches.add("129"); pitches.add("142"); System.out.println(pitches.contains("142")); |
true |
remove(객체) | 리스트에서 객체에 해당하는 항목을 삭제한 뒤, 그 결과로 true 또는 false를 리턴 | ArrayList pitches = new ArrayList(); pitches.add("138"); pitches.add("129"); pitches.add("142"); System.out.println(pitches.remove("129")); |
true |
revmove(인데스) | 인덱스에 해당하는 항목을 삭제한 뒤, 그 항목을 리턴 | ArrayList pitches = new ArrayList(); pitches.add("138"); pitches.add("129"); pitches.add("142"); System.out.println(pitches.remove(0)); |
138 |
2. 제네릭스
- 리스트를 만들때 자료형을 선언함 --> 형 변환하는 과정 생략 가능
ArrayList<String> pitches = new ArrayList<>(); //제네릭스 선언법
3. 다양한 방법으로 ArrayList 만들기
- java.util.Arrays 클래스의 asList 메서드를 사용
String[] data = {"138", "129", "142"}; // 이미 투구수 데이터 배열이 있다.
ArrayList<String> pitches = new ArrayList<>(Arrays.asList(data));
System.out.println(pitches); // [138, 129, 142] 출력
4. String.join
- 각 요소에 구분자를 넣어주어야 하는 경우 사용
ArrayList<String> pitches = new ArrayList<>(Arrays.asList("138", "129", "142"));
String result = String.join(",", pitches);
System.out.println(result); // 138,129,142 출력
}
}
5. 리스트 정렬하기
- java.util.Comparator 클래스의 sort 메서드를 사용하여 순서대로 정렬
rrayList<String> pitches = new ArrayList<>(Arrays.asList("138", "129", "142"));
pitches.sort(Comparator.naturalOrder()); // 오름차순으로 정렬
System.out.println(pitches); // [129, 138, 142] 출력
}
}
- 오름차순(순방향) 정렬 - Comparator.naturalOrder()
- 내림차순(역방향) 정렬 - Comparator.reverseOrder()
Quiz
1. 다음 중 int 자료형의 크기는?
답 : c) 32비트
2. Java에서 소수점이 있는 실수형 데이터를 저장하기 위해 사용하는 자료형은?
답 : c) float
3. double 자료형과 float 자료형의 차이점은 무엇인가?
답 : b) double은 64비트, float은 32비트이다.
4. 다음 중 boolean 자료형이 가질 수 있는 값은?
답 : a) true와 false
5. 다음 중 boolean 값을 반환하는 메서드는?
답 : a) isEmpty()
6. 다음 중 boolean 표현식을 적절히 사용하는 경우는?
답 : b) boolean y = true;
7. 다음 중 문자열을 상수 풀(String Pool)에 저장하는 방법은?
답 : b) "example"
8. 다음 중 문자열 길이를 반환하는 메서드는?
답 : a) length()
9. 다음 코드의 출력 결과는 무엇인가?
String s1 = "Java";
String s2 = new String("Java");
System.out.println(s1 == s2);
답 : b) false
10. Java에서 배열의 길이를 얻기 위해 사용하는 속성은?
답 : c) length
11. 다음 중 Java에서 다차원 배열을 선언하는 올바른 문법은?
답 : b) int[][] arr = new int[2][2];
12. 배열에 초기값 없이 선언된 int 배열의 기본값은?
답 : a) 0 (int의 디폴트 값은 0이므로)
13. 배열의 인덱스는 몇부터 시작하는가?
답 : a) 0
14. 다음 코드의 출력 결과는?
int[] arr = {1, 2, 3, 4};
System.out.println(arr[2]);
답 : c) 3
15. Java에서 List 인터페이스를 구현한 클래스가 아닌 것은?
답 : c) HashSet
16. 다음 중 ArrayList의 기본적인 특징은 무엇인가?
답 : c) 임의 접근이 가능하다.
17. List에서 요소를 추가할 때 사용하는 메서드는?
답 : c) add()
18. 다음 코드의 출력 결과는 무엇인가?
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
System.out.println(list.get(1));
답 : b) Python
19. List의 요소를 반복하기 위해 사용할 수 있는 방법인 것은?
답 : d) 모두 맞음
서술형 문제
1. Java에서 기본 자료형(primitive types)과 참조 자료형(reference types)의 차이점에 대해 설명하시오.
답 : 기본자료형은 실제 값을 변수에 저장하고, 참조자료형은 데이터가 저장된 위치가 저장된다.
(String의 경우 리터럴 방식으로 저장할 경우 값 자체를 저장하는 것처럼 보이지만 실제로는 상수 풀에 저장하고 그 주소가 저장되어 참조자료형으로 구분됨)
2. 숫자형 자료형 간의 형 변환(예: int에서 double로 변환)이 발생할 때의 주의사항을 설명하시오.
답 : 형 변환이 자동으로 이루어지므로 소수점 이하 부분이 0으로 채워진다. 산술 연산 시 정수연산을 하고 double에 저장을 하게 될 경우 연산값은 정수연산을 한 값이 나온 후 형 변환이 되므로 이 점을 유의하여야 한다.
반대(double에서 int로 변환)의 경우 소수점 이하가 잘려 값이 변경되므로 주의하여야 한다.
3. Java에서 String 객체를 생성하는 두 가지 방법(리터럴 방식과 new 키워드 사용)의 차이점을 설명하시오.
답 : 리터럴 방식으로 저장할 경우 String Pool에 저장이 되지만 new키워드를 사용하면 새로운 객체를 생성하게 된다.
4. Java에서 문자열을 연결하는 방법 (String & StringBuilder)을 설명하고 어떤 방법이 성능 면에서 더 유리한 지 서술하시오.
답 : String은 += 을 통해 문자열을 연결하고, StringBuilder는 append메서드를 통해 연결한다.
첫번째 방법("+=")은 문자열을 추가 할 때마다 객체를 만드므로 성능면에서 비효율적이다.
5. Java에서 문자열 비교 시 == 연산자와 equals() 메서드의 차이점을 설명하시오.
답 : == 연산자는 객체의 주소값을 비교하고, equals() 메서드는 문자열의 실제 값을 비교한다. 쉽게 말해 ==연산자는 위에서 계속 말했듯이 문자열 상수 풀에서 같은 리터럴을 사용하였는지를 따지는 것이고, equals()메서드는 문자열의 생긴 모양이 같은지를 따지는 것이다.
6. 배열 선언 방법 2가지를 작성하시오.
답 : int[] numbers; --> int 타입의 배열 선언
int[] numbers = new int[3] --> 배열 선언 후 크기 지정
7. 배열의 크기를 변경할 수 없다는 특성을 설명하고, 이 문제를 해결하기 위해 사용할 수 있는 대안에 대해 설명하시오.
답 : 배열의 크기는 고정되어 있으므로 변경이 불가능하다. 동적배열인 ArrayList활용하면 add 메서드를 통해 추가, remove메서드를 통해 삭제가 가능하다.
코딩테스트 문제
숫자 비교하기 (난이도: 하)
https://school.programmers.co.kr/learn/courses/30/lessons/120807
문자열 내 p와 y의 개수 (난이도: 중하)
https://school.programmers.co.kr/learn/courses/30/lessons/12916
꿀팁
배열 정렬 방법
- Array 타입
int[] arr = {4,2,5,1,3}
Arrays.sort(arr);
- List container 타입
import java.util.*;
ArrayList<Integer> arr = new ArrayList<>();
arr.add(3);
arr.add(5);
arr.add(1);
Collections.sort(arr);
'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주차 (5) | 2024.10.09 |
[2024-2 Java 스터디] 김지수 #1주차 (1) | 2024.10.08 |
[2024-2 Java 스터디] 이가인 #1주차 (4) | 2024.10.08 |