본문 바로가기
자바프로그래밍

자바프로그래밍 MathClass WrapperClass StringTokenizer ArraysClass PatternClass binarySearch parseInt split equals 기본API활용

by aiyoon 2025. 5. 29.
반응형

📌 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() 같은 값이면 같은 해시코드 가능

🧠 기억할 포인트

  1. == vs equals() vs hashCode() 구분
  2. 기본 클래스의 API(method)를 직접 써보는 경험 중요
  3. new로 만든 객체는 heap, 지역변수는 stack
  4. 수식 해석은 항상 우선순위 (연산자 순서) 고려

✅ 자바 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()

반응형