:복습
<JAVA Program 문법>
- 기본 프로그램 문법
- 자료구조
- 자료형
- 기본자료형 배열
- 변수 / 상수
- 연산자
- 형변환
- 자료형
- 흐름제어
- 조건에 의한 분기
- 조건에 의한 반복
- 기타 제어
- 자료구조
- 객체 문법 : 한 개의 클래스
- 패키지
- package
- import
- 패키지 컴파일
- 클래스
- interface
- implement / extends
- 상수
- 추상메서드
- default / static / private 메서드
- 일반클래스 / 추상클래스
- 멤버 필드
- 인스턴스 / 클래스(static)
- 메서드
- 인스턴스 / 클래스(static)
- 추상메서드
- 오버로딩
- 가변인자
- 메인메서드
- constructor
- 멤버 필드
- interface
- 패키지
- 객체지향 프로그램 문법 :상속,은닉,추상,다형
- 은닉
- 접근지정자
- setter / getter
- this / this()
- 상속
- extends / implements
- overriding
- super / super()
- final
- 다형
- 참조 자료형 형변환
- instanceof
- 추상
- 추상클래스
- 인터페이스
- 은닉
- 객체 모델링(diagram)
- UML
- Class Diagram : 클래스 간의 관계
- Sequence Diagram : 메서드 간의 흐름
- Use Case Diagram : 동작의 흐름
- UML
- 라이브러리(목적을 위해서 제공되는 클래스) : API -> jar(Java Archiver)
- jar
- pacakge
- class
- pacakge
- 내장 라이브러리
- Oracle
- 외부 라이브러리(Third Party)
- 각 벤더
- jar
API(Application Programming Interface)
java.lang 패키지 ( import 없음)
Object : 모든 클래스의 상위 클래스
- 모든 클래스는 Object 클래스에서 상속받음.
- 모든 클래스는 Object 클래스의 메서드 사용 가능
- 모든 클래스는 Object 클래스의 메서드 중 일부는 재정의 할 수 있음
- 단, final로 선언된 메서드는 재정의 할 수 없다!!
- 컴파일러가 extends Object를 추가
public static void main(String[] args) {
String string = new String("Hello");
System.out.println(string.toString());
//Object - toString : 참조값
// => 오버라이딩(재정의)
//String - toString : 내용값
Person person = new Person();
//person = person.toString() 똑같다.
System.out.println(person.toString());
System.out.println(person);
}
//묵시적 Object 상속
public class Person {
//extends Object가 생략되어 있음. ->컴파일러가 추가시킴
@Override
public String toString() {
return "Hello World";
}
}
- toString 메서드
- 객체를 문자열로 표현하는 메서드
public class Person {
private int id;
private String name;
private int age;
public Person(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" + "id = "+id + ", name= " + name + ", age= " +age + "}";
}
public static void main(String[] args) {
String string = new String("Hello");
System.out.println(string.toString()); //결과값 Hello
Person person = new Person(111,"홍길동", 30);
//person = person.toString() 똑같다.
System.out.println(person.toString());//결과값 : Person{id = 111, name= 홍길동, age=30}
System.out.println(person);//결과값 : Person{id = 111, name= 홍길동, age=30}
}
}
-
- toString()의 주요 사용 사례
- 디버깅과 로깅
- toString() 메서드는 주로 디버깅과 로그 기록에서 유용하게 사용됩니다. 객체의 상태를 쉽게 확인하고, 코드의 흐름을 파악하는 데 도움을 줍니다.
- 객체의 직관적 표현
- 사용자 정의 클래스에서 toString()을 오버라이딩하면, 객체를 보다 직관적으로 표현할 수 있습니다. 예를 들어, 데이터베이스 레코드나 사용자 정보 등을 출력할 때 객체의 속성을 문자열로 변환하여 더 쉽게 읽을 수 있습니다.
- 컬렉션 출력
- 자바의 컬렉션 클래스(ArrayList, HashMap 등)는 내부에 저장된 객체들의 toString() 메서드를 호출하여 출력합니다. 객체의 toString() 메서드를 오버라이딩하면, 컬렉션에 포함된 객체들도 가독성 있게 출력됩니다.
- 디버깅과 로깅
- equals() 메서드
//기본 equals()구현
public boolean equals(Object obj) {
return (this == obj);
}
오버라이딩 : 객체의 논리적 동등성을 비교할 때는 equals() 메서드를 오버라이딩하여 객체의 속성 값을 비교
public class ObjectEx03 {
public static void main(String[] args) {
//동등비교
int a = 10;
int b = 20;
//내용값 비교
System.out.println(a==b);//false
//내용값 - 참조값 비교
Object o1 = new Object();
Object o2 = new Object();
System.out.println(o1 == o2);//false
//내용값 - 데이터
System.out.println(o1.equals(o2));//false
String s1 = new String("Hello");
String s2 = new String("Hello");
//참조값
System.out.println(s1 == s2);//false
//내용값 - 오버라이딩
System.out.println(s1.equals(s2));//true
}
}
- hashCode() 메서드
- 객체를 고유하게 식별할 수 있는 정수 값으로, 같은 객체는 동일한 해시코드를 가져야 함.
@Override
public int hashCode(){
return Objects.hash(name,age); //속성값을 기반으로 해시코드 생성
}
equals()와 hashCode()의 관계
equlas()를 오버라이딩하면 반드시 hashCode()도 오버라이딩해야 함. 같은 객체라면 같은 해시코드를 반환해야 하기 때문.
[String 클래스와 메서드]
String 클래스는 Java에서 문자열을 처리하기 위한 클래스이다.
문자열은 객체로 관리되며, 자바에서 가장 많이 사용되는 클래스 중 하나
- length() :문자열 길이 반환
- charAt(int index) : 특정 인덱스의 문자 반환
- substring(int beginIndex, int endIndex) : 문자열의 일부를 잘라서 반환
- indexOf(String str) : 특정 문자열이 처음 나타는 인덱스를 반환. (문자열이 없으면 -1 반환)
- lastIndexOf(String str) : 특정 문자열이 마지막으로 나타나는 위치의 인덱스를 반환(문자열이 없으면 -1 반환)
- contains(CharSequence s) :특정 문자열 유무확인
- startsWith(String prefix) : 특정 접두사로 시작하는지 확인
- endsWith(String suffix) : 특정 접미사로 끝나는지 확인
- 문자열 변환
- toLowerCase() : 소문자 변환
- toUpperCase() : 대문자 변환
- trim() : 양쪽 공백 제거
- valueOf(primitive data type) : 문자열로 반환
- 문자열 조작
- concat(String str) : 문자열 연결
- replace(char oldChar, char newChar) :특정 문자를 다른 문자로 대체
- replaceAll(String regex, String replacement) : 정규표현식에 맞는 문자열을 찾아 대체
- substring(int begin) :해당 인덱스부터 끝까지의 문자열을 반환
- substring(int beginIndex, int endIndex) : 시작 인덱스부터 끝 인덱스 전까지의 부분 문자열 반환
- 형식화된 출력
- format(String format, Object... args) : 형식화된 문자열을 생성할 수 있음
- % s :문자열
- % d :정수
- % f :실수
- format(String format, Object... args) : 형식화된 문자열을 생성할 수 있음
[String/StringBuffer/StringBuilder]
- String
- 문자열이 자주 변경되지 않는 경우나 리터럴 문자열을 재사용해야 할 때 적절, 문자열을 자주 수정하지 않을 때 적합
- StringBuffer
- 멀티스레드 환경에서 문자열을 빈번하게 수정해야 할 때, 문자열 수정 시 동기화가 필요할 때
- StringBuilder
- 단일 스레드 환경에서 문자열을 자주 수정해야 할 경우, 동기화가 필요 없는 상황에서 StringBuffer보다 빠름.
| 특징 | String | StringBuffer | StringBuilder |
| 선언방식 | String str ="Hello'; | StringBuffer sb = new StringBuffer("Hello"); | StringBuilder sb = new StringBuilder("Hello"); |
| 문자열 변경 방법 | 불변 | 가변 | 가변 |
| 동기화 | ❌ | ⭕️ | ❌ |
| 성능 | 상대적으로 느림 | 상대적 느림 | 성능 빠름 |
| 사용 목적 | 문자열이 자주 변경되지 않을 때 적합 | 멀티스레드 환경에서 문자열이 자주 변경될 때 적합 | 단일 스레드 환경에서 문자열이 자주 변경될 때 적합 |
| 불변성 여부 | 불변 객체 | 가변 객체 | 가변 객체 |
| 멀티스레드 지원 | ❌ | ⭕️ | ❌ |
| 메모리 사용 | 변경 시마다 새로운 객체가 생성되므로 비효율적 | 메모리 효율적 사용 | 메모리 효율적 사용 |
| 주요 메서드 | concat(), substring(), charAt() |
append(), insert(), delete(),reverse() |
append(), insert(), delete(),reverse() |
-StringBuilder
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/StringBuilder.html
StringBuilder (Java SE 17 & JDK 17)
All Implemented Interfaces: Serializable, Appendable, CharSequence, Comparable A mutable sequence of characters. This class provides an API compatible with StringBuffer, but with no guarantee of synchronization. This class is designed for use as a drop-in
docs.oracle.com
-StringBuffer
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/StringBuffer.html
StringBuffer (Java SE 17 & JDK 17)
All Implemented Interfaces: Serializable, Appendable, CharSequence, Comparable A thread-safe, mutable sequence of characters. A string buffer is like a String, but can be modified. At any point in time it contains some particular sequence of characters, bu
docs.oracle.com
- Math 라이브러리
- abs(x) : 절댓값 반환
- min(a, b) : 두 값 중 작은 값 반환
- max(a, b) : 두 값 중 큰 값 반환
- pow(a, b) :a의 b제곱
- sqrt(a) :제곱근 반환
- round(a) : 반올림
- ceil(a) :올림
- floor(a) :내림
- log(a) :자연로그
- log10(a) :밑이 10인 로그 반환
- sin(a) :사인 값 반환
- cos(a) :코사인 값 반환
- tan(a) :탄젠트 값 반환
- Math.random() :double탑인 난수 반환
- 반환되는 값 : 0.0 <= X <1.0 범위에 속하는 소수
- 범위 조정
- 0부터 10까지 난수
int randomValue = (int) (Math.random() * 10); // 0 <= 값 < 10 (정수형 난수)
System.out.println(randomValue);
-
- 1부터 45까지 난수
int randomValue = (int) (Math.random() * 45) + 1; // 1 <= 값 <=45
System.out.println(randomValue);
[Wrapper 클래스]
| 기본 자료형 | Wrapper 클래스 |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
| boolean | Boolean |
- 필요성
- 객체로 다루기: 기본 자료형은 객체가 아니기 때문에, 컬렉션 클래스(ArrayList, HashMap 등) 같은 곳에서는 사용할 수 없습니다. Wrapper 클래스를 통해 기본 자료형을 객체로 변환하면 객체로 다룰 수 있는 기능을 제공할 수 있습니다.
- 유틸리티 메서드 제공: 각 Wrapper 클래스는 기본 자료형에 없는 유용한 메서드들을 제공합니다. 예를 들어, Integer 클래스는 문자열을 정수로 변환하는 parseInt() 메서드를 제공합니다.
- 형 변환 지원: Wrapper 클래스는 기본 자료형 간의 형 변환이나 타입 변환을 더 쉽게 수행할 수 있는 기능도 제공합니다.
- 오토박싱(Auto-Boxing)과 오토언박싱(Auto-Unboxing)
- 자바 컴파일러가 자동으로 박싱과 언박싱 처리 ➡️ 오토박싱과 오토언박싱
- 즉, 개발자가 명시적으로 변환하지 않아도, 기본 자료형과 Wrapper 클래스 간의 변환이 자동으로 이루어 짐.
int a = 10;
// 오토박싱: 기본 자료형 int를 Integer 객체로 자동 변환
Integer wrappedA = a;
// 오토언박싱: Integer 객체를 int 값으로 자동 변환
int b = wrappedA;'Backend > Java' 카테고리의 다른 글
| [Java] Collection (2) | 2024.10.23 |
|---|---|
| [java] System/Data/Calendar/Random/Array 클래스 (0) | 2024.10.22 |
| [java]상속/은닉/다형성/추상클래스/interface (1) | 2024.10.18 |
| [java]객체 문법, 기본 자료형, 상속성, 은닉성 (1) | 2024.10.17 |
| 김영한 실전 자바 기본편 - 2.기본형과 참조형 (0) | 2024.05.13 |