복습& 수정
변수와 상수 깃 수정
라벨문
enhanced for 실제값을 변경시킬순없다 ,참조할때만 사용
Java의 메모리 구조 (면접에서 물어보기도 함)
스택영역
지역변수,매개변수,기본형 자료,객체의 주소값 저장
힙영역
1개 클래스(기능집합) -> 메서드 n개
클래스 -> 복제본(객체) : new 클래스 명 new = 객체
string 객체 -> 예외좀 있다.
(상식이니 알아둘것)
실제값이 힙영역에 저장 스택값은 class 영역에 저장
배열, bigdecimal, Scanner -> new
call by value, call by reference (좀더 찾아볼사람은 찾아볼것)
계층 구조
메서드에서 선언된건 클래스에서는 모름
메서드에서 선언된건 다른 메서드에선 모름
객체 같은 경우 에는 string 은 . equal로 비교 해라 (습관들이는게 좋음)
----복습 끝
깃 추가
짝수의 합 계산하기
1~20까지 짝수의 합 출력
int sum = 0;
int [] arr = {2,1,5,6,1,2,5,2,2,6};
for(int a : arr){
if(a % 2 ==0){
sum += a;
라벨문
loop1:
for (int i = 0; i < 5; i++) {
// loop2:
for (int j = 0; j < 5; j++) {
System.out.println("hello world");
if (j == 2) {
break loop1; // 그냥 break; 하는것과 2개 비교 해보기 3번, 15번
}
}
}
// 라벨문 활용 1,
int[][] matrix = {{1, 2, 3, 4}, {5, 6, 7}, {8, 9}, {10, 11, 12, 13, 14}};
int target = 11;
// 1) target이 matrix에 i,j 번째 배열에 있는지 출력
// 2)target을 찾으면 반복문 전체 종료
// 3)순차적으로 조회후에 label써서 첫번째 for문 종료
l1:
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
if (matrix[i][j] == target) {
System.out.println(i + "," + j + "번째에 있습니다.");
break l1;
}
}
}
// 1 ~ 20 숫자가 있을때, 이 중에 약수가 5개 이상인 숫자중에 가장 작은 값을 구하시오.
// 불필요한 추가 반복 -> 라벨문
// 1) 바깥 for 문 : 1 ~ 20 반복
// 2) 안쪽 for 문 : 약수 찾기 for 문
// 3) 약수 개수 세는 count값 필요
// 라벨문 활용2
int answer = 0;
l1:
for (int i = 1; i < 21; i++) {
int count = 0;
for (int j = 1; j <= i; j++) {
if (i % j == 0) {
count++;
}
if (count >= 5) {
answer = i;
break;
}
if (count == 5) {
answer = i;
break l1;
}
}
}
System.out.println(answer);
}
}
참조 자료형
Java에서 기본(원시)자료형을 제외한 자료형은 "참조자료형"이라 함
- 원시 자료형은 JAVA에서 제공하는 기본 데이터 타입
- int, long, double, float, boolean, char
대표적인 참조 자료형은 string , list, set, map, 배열 등
Wrap per class - 참조자료형 (기본자료형을 대체하기 위해 나옴)
원시(primitive)타입과 참조타입의 차이
원시 자료형은 변수에 직접 값을 저장(스택 메모리)
-참조형 변수는 객체의 주소(reference)를 저장. 실체객체는 힙(heap) 메모리에 할당
원시자료형 변수는 new 키워드 없이 리터럴(literal)로만 값을 세팅
-참조형 변수는 new 키워드를 사용하여 값 세팅(ex : Bigdecimal)
-String은 리터럴 표현식을 사용 할 수 있도록 자바에서 특별 대우 해주는 참조자료형
- 그외에도 배열, wrapper 클래스도 리터럴 세팅 가능
원시 자료형의 비교시에는 값 자체를 비교
- 참조형 변수는 객체 주소를 비교함으로서 동일한 객체인지를 비교
== : 원시자료형만 됨
wrapper 클래스
Wrapper 클래스는 기본 자료형(primitive types)의 참조형 변수 즉, 객체
버전을 의미
클래스란 다양한 기능을 내장하고 있는 프로그램 묶음
원시자료형의 Wrapper클래스
클래스에서 정의한 다양한 기능들을 추가적으로 사용하기 위해 원시자료형을 Wrapping한 클래스가 나오게 되었다.
사용예시
interger. toString(), integer.parselnt()등
앞으로 공부할 ArrayList, HashMap, HashSet 등은 데이터 저장시 원시 자료형 대신 그에 대응하는 Wrapper 클래스들을사용
Wrapper 클래스는 원시 자료형 값과 관련된 다양한 유틸리티 메소드를 제공함
원시자료형 | Wrapper클래스 |
int | integer |
long | Long |
double | Double |
float | Float |
boolean | Boolean |
char | character |
박싱, 언박싱
박싱
- 기본자료형을 래퍼 클래스로 변환하는 과정
- int num = 10;
integer WrappedNum = Inter.ValueOf(num);
언박싱
패러클래스를 기본 자료형으로 변환하는 과정
integer wrappedNum = Integer.valueOF(20);
int num = wrappedNum.intValue();
오토박싱/언박싱
자바5부터 자동으로 형변환 지원
int nem= 10;
integer WrappedNum = num; // Auto-Boxing
integer WrappedNum = 20;
int num= WrappedNum; // Auto-Unboxing
자료형 string
문자열 자료형
사용방법
리터럴방식
-string a = " Happy Java".
객체 사용 방식
string a = new String("Happy Java");
객체 사용방식과 리터럴 방식의 메모리저장 차이
객체 사용방식은 힙메모리에 데이터 저장
리터럴 방식의 경우 문자열 상수풀이라는 특별한 공간에 저장
리터럴 방식을 사용하는 최적화에 도움
주요 내장 메서드(기능)
equal
true/false 리턴
==주소를 비교함으로서 동일한 객체인지 까지 판멸하므로 되도록 사용하지 않도록 유의
기본자료형은 == 관계 성립
string 중에서도 리터럴 객체는 ==관계 성립
indexOf
-문자열에서 특정 문자가 시작되는 위치(인덱스)를 리턴
contains
-문자열에서 특정 문자열이 포함되어 있는지의 여부를 리턴
-true/false 리턴
charAt
-문자열에서 특정 위치(index)의 문자(char)를 리턴
문자열 더하기
- += 을 통해 기존의 문자열에 문자열 추가
프로그래머스 - 가운데 글자 가져오기 풀기
substring
문자열 중 특정 부분을 뽑아낼 경우 사용
toupperCase / toLowerCase
대소문자 변환 리턴
trim
왼쪽에 있는 공백, 오른쪽에 있는 공백을 다 제거
문자열을 입력받거나 문자열을 합칠경우 쓸데없는 공백 제거를 위해 사용
아스키코드에서 정의된 공백을 제외한 유니코드의 공백을 인식못함
strip은 같은 기능을 하나, 더 안정성이 높음(java11부터 추가됐음)
replace
문자열중에 특정 문자열을 바꿔 새로운 문자열을 return
replaceAll
replace와 동일한 기능
다만 정규표현식을 활용할수 있음
문제
string a = "hello";
string a1 = a.
string a2 = a.
toUpperCase / toLowerCase
프로그래머스 - 특정 문자 제거하기 풀기
정규표현식
-정규표현식 이란 특정한 문자열의 패턴을 표현하기 위해 쓰이는 형식
-주로 전화번호, 주민등록번호, 이메일등과 같이 정해진 형식을 검증하기 위해 사용
-정규표현식에서 표현하는 기호를 Meta문자라 한다.
대표적인 메타문자
-^와$는 문자열의 시작과 끝을 명시적으로 알림
-^,$를 안쓰면 전체문자에 대한 검사가 아닌 부분이 일치해도 통과
-메타문자가 섞일경우 시작과 끝을 구분짓는 용도
-[xy]는 x,y 문자중 하나, [x-y]는 x~z사이의 문자중 하나
대표적인 정규표현식
-[0~9]는 0~9까지의 숫자를의미
-[a-zA-Z]는 영문자를 의미
-[가-힣]는 한글을 의미
import java.util.regex.Pattern;
문자열 다루기 기본
[0-9]+
프로그래머스 - 문자열 다루기 기본
split
문자열을 특정 구분자로 분리하는 메소드
리턴값은 String 배열
isEmpty()
문자열이 비어있는지 여부
null과는 다름에 유의
join
여러 문자열을 하나로 결합하며, 각 문자열 사이에는 지정한 구분자가 삽입
클래스 메서드이므로 String.join()로 사용해야함에 유의
문법
String.join(지정구분자, 문자배열);