반응형
📌 1. 자바 메모리 구조 이해
메모리 | 영역설명 |
Code | 상수, 메서드 등 프로그램 코드 저장 |
Stack | 지역변수 저장 (메서드 내 변수) |
Heap | new로 생성된 객체 저장 |
Data | 외부 라이브러리 (ex: C/C++) |
📌 2. Object 클래스 – hashCode() / toString()
✅ hashCode()
- 객체의 고유 식별 번호(정수값) 생성
- 객체마다 다르며, 자바 내부적으로 주소 기반 해싱
- 사용 목적:
- 컬렉션 비교
- 블록체인/암호화 원리와 유사
- 정보 추적 및 동등성 판단
System.out.println(obj1.hashCode());
✅ toString()
- 객체 출력 시 자동 호출되는 메서드
- 기본값은 클래스명@해시코드
- 원하는 정보 출력 시 오버라이딩 필수
System.out.println(obj1); // 자동으로 obj1.toString() 호출
📌 3. 문자열 비교 실습 예시
System.out.println(s1 == s3); // false, 다른 객체
System.out.println(s2.equals(s4)); // true, 값이 같음
System.out.println(s2.hashCode()); // 같은 문자열이면 같은 해시코드
비교 | 방법의미 |
== | 같은 객체인지 (주소값 비교) |
.equals() | 같은 값을 갖는지 (내용 비교) |
.hashCode() | 같은 값이면 같은 해시코드 가능 |
🧠 기억할 포인트
- == vs equals() vs hashCode() 구분
- 기본 클래스의 API(method)를 직접 써보는 경험 중요
- new로 만든 객체는 heap, 지역변수는 stack
- 수식 해석은 항상 우선순위 (연산자 순서) 고려
✅ 자바 9장 실습 정리 (Math 클래스 & Wrapper 클래스 활용)
📌 1. Math 클래스 활용 – 수학적 계산
학습파일: chap9_3.java
핵심 내용:
- 두 점 사이 거리 계산:
Math.sqrt(), Math.pow() 사용
Math.sqrt(s * (s - ab) * (s - bc) * (s - ca)); // 헤론의 공식
Math.pow(x2 - x1, 2); // 제곱
학습 포인트:
목적 | 사용메서드 |
제곱 | Math.pow() |
제곱근 | Math.sqrt() |
원 둘레 | 2 * Math.PI * r |
원 면적 | Math.PI * r * r |
✔️ 삼각형 면적도 Math.sqrt()로 계산 (헤론 공식 활용)
📌 2. Wrapper 클래스 활용 – 문자열 숫자 변환 & 자동 박싱/언박싱
학습파일: chap9_4.java
핵심 내용:
- String → int: Integer.parseInt("문자열")
- int → Integer: 오토박싱
- Integer → int: 언박싱
int n1 = 10;
Integer obj1 = n1; // 자동 박싱
int n2 = obj1; // 자동 언박싱
Integer obj2 = Integer.parseInt("20");
배열 정렬 시 발생하는 문제
- String[] 배열을 Arrays.sort() 하면 사전순 정렬
- → "12", "9" → "12", "9" (문자 기준 정렬)
- → 정렬 전 int[]로 형변환 후 정렬 필요
String[] arr = {"12", "9", "222"};
int[] arrInt = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
arrInt[i] = Integer.parseInt(arr[i]);
}
Arrays.sort(arrInt);
🧠 기억할 포인트
개념 | 설명 |
Math | 복잡한 수학 계산을 위한 내장 메서드 집합 |
Wrapper 클래스 | 기본형을 객체처럼 사용 가능 (int → Integer) |
박싱 | 기본형 → 객체 (int → Integer) |
언박싱 | 객체 → 기본형 (Integer → int) |
Integer.parseInt() | 문자열을 숫자로 변환 |
String 정렬 한계 | 사전순 → 숫자형 정렬 시 변환 필요 |
✅ 자바 9장 실습 정리 (심화 API 사용)
📌 1. StringTokenizer 클래스 – 문자열 분리
💡 핵심 기능:
- 문자열을 구분자(delimiter) 기준으로 잘라서 토큰 단위로 다루는 클래스
StringTokenizer st = new StringTokenizer(msg);
while (st.hasMoreTokens()) {
System.out.print(st.nextToken() + " + ");
}
✨ 실습 포인트
- countTokens(): 남은 토큰 개수
- hasMoreTokens(): 다음 토큰 있는지 확인
- nextToken(): 다음 토큰 반환
- 구분자 여러 개 지정 가능: new StringTokenizer(s, "=&")
🔎 사용 사례
- URL 파라미터 파싱: "id=guest&name=Amy&pwd=1004"
- 구두점 제거: "홍, 길동. 철수" → 단어만 분리
📌 2. Arrays 클래스 – 배열 도우미 유틸리티
💡 핵심 기능:
- 배열 정렬, 복사, 검색, 출력 등 자주 쓰는 기능 제공
Arrays.sort(arr); // 정렬
Arrays.copyOf(arr, arr.length); // 복사
Arrays.toString(arr); // 문자열 변환
Arrays.binarySearch(arr, key); // 이진 탐색
Arrays.equals(arr1, arr2); // 두 배열 비교
✨ 실습 포인트
- 정렬 전후 비교 → equals() 사용
- 주의: binarySearch()는 반드시 정렬된 배열에서만 사용 가능!
📌 3. Pattern 클래스 – 정규 표현식 검증
💡 핵심 기능:
- 문자열이 **특정 규칙(패턴)**을 따르는지 검사
- 로그인, 회원가입, 전화번호, 이메일, 비밀번호 유효성 검사에 필수
boolean result = Pattern.matches("정규식", 대상문자열);
✨ 실습 포인트
검사 항목 | 정규식 예시 |
이름 (첫 대문자) | [A-Z][a-zA-Z]* |
전화번호 | 01[0-9]-\\d{3,4}-\\d{4} |
이메일 | \\w+@\\w+\\.\\w+(\\.\\w+)? |
비밀번호 | (?=.*[A-Z])(?=.*[!@#$%^&*()])(?=.*[0-9])(?=.*[a-zA-Z]).{8,} |
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(password);
m.matches(); // true or false
🧠 핵심 요약 비교
클래스기능주요 메서드
클래스 | 기능 | 주요 메서드 |
StringTokenizer | 문자열 분리 | countTokens(), nextToken() |
Arrays | 배열 유틸리티 | sort(), copyOf(), binarySearch() |
Pattern | 정규식 검증 | matches(), compile(), matcher() |
반응형
'자바프로그래밍' 카테고리의 다른 글
Comparator 람다식 sid 기준 정렬 설명 (0) | 2025.06.03 |
---|---|
ArrayList 확장 for문 인덱스 for문 예외처리 Exception Handling Throwable NullPointerException 사용자 정의 예외 자바프로그래밍 (0) | 2025.05.29 |
자바프로그래밍 다형성 toString 인터페이스 내부클래스 자바 ObjectClass equalsMethod (0) | 2025.05.25 |
상속과 인터페이스 자바프로그래밍 클래스 생성자 setter 상속 toString 오버라이드 super() @override (0) | 2025.05.24 |
제네릭 클래스 메서드 자바프로그래밍 (1) | 2025.05.24 |