- Today
- Total
- λ€μ΅μ€νΈλΌ
- leetcode
- μλ°μμ μ
- μ‘Έμ μν
- 벨λ§ν¬λ
- pytorch
- MST
- database
- CS
- μμμ λ ¬
- λ°±μ€
- spring
- ꡬν
- 그리λ
- java
- μλ°
- dp
- Graph
- νλ‘κ·Έλλ¨Έμ€
- array
- tree
- μΈν΄
- λ¬Έλ²
- PS
- μλ£κ΅¬μ‘°
- λ°μ΄ν°λ² μ΄μ€
- λ°±μλ
- Algorithm
- OOP
- BFS
Partially Committed
[CH09] java.lang ν¨ν€μ§ λ³Έλ¬Έ
λ³Έ ν¬μ€ν μ μλ°μ μ μ κ΅μ¬λ₯Ό 곡λΆνλ©°, κ°λ¨ν μ 리/κΈ°λ‘ μ©λλ‘ μμ±νμμ΅λλ€. νΉμ¬, μλͺ»λ λ΄μ©μ΄ μλ€λ©΄ μ§μ ν΄μ£Όμλ©΄ κ°μ¬νκ² μ΅λλ€.
1. java.lang package
μλ°μ κΈ°λ³Έμ΄ λλ ν΄λμ€λ₯Ό ν¬ν¨ν ν¨ν€μ§λ‘, java.lang package μ μνλ class λ import λ¬Έ μμ΄ μ¬μ©κ°λ₯νλ€.
1.1 Object ν΄λμ€
1.1.1 public boolean equals(Object obj)
public boolean equals(Object obj) {
return (this==obj);
}
μμ κ°μ΄ ꡬνλ λ©μλλ‘ κ°μ²΄κ° μλ‘ κ°μμ§ μλμ§λ₯Ό νλ¨νλ€.
class source{
public static void main(String[] args) {
Value v1 = new Value(10);
Value v2 = new Value(10);
if(v1.equals(v2))
System.out.println("v1 == v2");
else
System.out.println("v1 != v2");
v2=v1;
if(v1.equals(v2))
System.out.println("v1 == v2");
else
System.out.println("v1 != v2");
}
}
class Value{
int value;
Value(int value){
this.value = value;
}
}
equals λ©μλλ μ£Όμκ°μΌλ‘ κ°μ²΄λ₯Ό λΉκ΅νλ―λ‘ λ©€λ²κ° κ°λλΌλ μ£Όμκ° λ€λ₯΄λ©΄ false λ₯Ό λ°ννλ€. v2 = v1 λ₯Ό μννλ©΄ μ°Έμ‘°λ³μ v2 λ v1 μ΄ μ°Έμ‘°νκ³ μλ μΈμ€ν΄μ€μ μ£Όμκ° μ μ₯λλ κ²μ΄λ―λ‘ v2 κ³Ό v1 μ μ£Όμλ κ°κ² λκ³ μ΄μ λ°λΌ true κ° λ°νλλ κ²μ΄λ€. equals λ©μλλ λ μ°Έμ‘° λ³μκ° κ°μ κ°μ²΄λ₯Ό μ°Έμ‘°νλ μ§ μ¬λΆλ₯Ό νμ νλ κ²μΈλ°, μΈμ€ν΄μ€μ λ©€λ² λ³μκ° κ°μμ§ μλμ§λ₯Ό νλ¨ν μ μλλ‘ μ¬μ©νκΈ° μν΄μλ μ€λ²λΌμ΄λ©μ νμ¬ κ΅¬νν΄μ£Όλ©΄ λλ€.
class Value{
int value;
Value(int value) {
this.value = value;
}
public boolean equals(Object obj){
if(obj instanceof Value)
return value == ((Value)obj).value;
else return false;
}
}
String ν΄λμ€μ equals λ©μλ μμ Object ν΄λμ€μ equals λ©μλλ₯Ό μ€λ²λΌμ΄λ©νμ¬ String μΈμ€ν΄μ€κ° κ°μ§λ λ¬Έμμ΄μ λΉκ΅νλλ‘ κ΅¬νλμλ€.
1.1.2 hashCode()
hash function μ ꡬνν κ²μΌλ‘ μ°Ύκ³ μ νλ κ°μ μ λ ₯νλ©΄ hash code λ₯Ό λ°ννλ€. 32 bit JVM μμλ μλ‘ λ€λ₯Έ κ°μ²΄λ κ°μ hash code λ₯Ό κ°μ§ μ μμμ§λ§, 64 bit JVM μμλ 8 byte μ£Όμκ°μΌλ‘ ν΄μ¬μ½λ (4 byte) λ₯Ό λ§λλ―λ‘ ν΄μ¬ μ½λκ° μ€λ³΅λ μ μλ€. ν΄λμ€μ μΈμ€ν΄μ€ λ³μ κ°μ μ΄μ©ν΄μ κ°μ²΄μ κ°κ³ λ€λ¦μ νλ¨ν λμλ equals λ©μλ μΈμλ hashCode λ©μλλ μ μ νκ² μ€λ²λΌμ΄λ©ν΄μ£Όμ΄μΌ νλ€. κ°μ κ°μ²΄μ΄λ©΄ hashCode λ©μλλ₯Ό νΈμΆνμ λμ hash code λ κ°μμΌ νκΈ° λλ¬Έμ΄λ€.
class source{
public static void main(String[] args) {
String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(str1.equals(str2));
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
System.out.println(System.identityHashCode(str1));
System.out.println(System.identityHashCode(str2));
}
}
String ν΄λμ€μμλ λ¬Έμμ΄μ λ΄μ©μ΄ κ°μΌλ©΄ κ°μ hashCode λ₯Ό λ°ννλλ‘ μ€λ²λΌμ΄λ© λμ΄μλ€. λ°λ©΄ System.identityHashCode(Object x) λ Object ν΄λμ€μμμ κ°μ΄ κ°μ²΄μ μ£Όμκ°μΌλ‘ hash Code λ₯Ό μμ±νλ―λ‘ λͺ¨λ κ°μ²΄μ λν΄ νμ λ€λ₯Έ ν΄μ¬ μ½λλ₯Ό λ°νν¨μ 보μ₯ν μ μλ€.
1.1.3 toString()
μΈμ€ν΄μ€μ λν μ 보λ₯Ό λ¬Έμμ΄λ‘ μ 곡νλ€.
public String toString() {
return getClass().getName()+"@"+Integer.toHexString(hashCode());
}
μμ κ°μ΄ ꡬνλμ΄ μλ€. getClass() μ hashCode() λ Object ν΄λμ€μ μ μλ κ²μΌλ‘ μΈμ€ν΄μ€ μμ± μμ΄ νΈμΆ κ°λ₯νλ€.
class source{
public static void main(String[] args) {
Card c1 = new Card();
Card c2 = new Card();
System.out.println(c1.toString());
System.out.println(c2.toString());
}
}
class Card{
String kind;
int number;
Card(){
this("SPADE", 1);
}
Card(String kind, int number){
this.kind = kind;
this.number = number;
}
}
ν΄λμ€ μ΄λ¦κ³Ό 16μ§μμ ν΄μ¬μ½λκ° μΆλ ₯λ κ²μ νμΈν μ μλ€. μλ‘ λ€λ₯Έ μΈμ€ν΄μ€μ΄λ―λ‘ λ€λ₯Έ ν΄μ¬μ½λλ₯Ό κ°μ§κ³ μμμ μ μ μλ€. Card ν΄λμ€μμ toString() λ©μλλ₯Ό μ€λ²λΌμ΄λ©νμ¬ μ»€μ€ν λ§μ΄μ§ν μ μλ€.
class source{
public static void main(String[] args) {
Card c1 = new Card();
Card c2 = new Card();
System.out.println(c1.toString());
System.out.println(c2.toString());
}
}
class Card{
String kind;
int number;
Card(){
this("SPADE", 1);
}
Card(String kind, int number){
this.kind = kind;
this.number = number;
}
public String toString(){
return "kind : " + kind + ", number : " + number;
}
}
toString μ Object ν΄λμ€μμ public μΌλ‘ λ§λ€μ΄μ‘λλ°, μ΄λ μ‘°μμ μ μλ λ©μλλ₯Ό μμμμ μ€λ²λΌμ΄λ©ν λ μ‘°μμ μ μλ μ κ·Ό λ²μλ³΄λ€ κ°κ±°λ λμ΄μΌ νκΈ° λλ¬Έμ΄λ©°, μ΄μ λ°λΌ Object ν΄λμ€μμ toString() μ΄ public μ΄λ―λ‘ μμ ν΄λμ€μμλ toString() μ public μΌλ‘ ν μ λ°μ μλ κ²μ΄λ€.
1.1.4 clone()
μ΄λ μμ μ 볡μ ν΄μ μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό μ 곡νλ€. μΈμ€ν΄μ€ λ³μμ κ°λ§ 볡μ¬νλ―λ‘ μ°Έμ‘° νμ μ μΈμ€ν΄μ€ λ³μκ° μμΌλ©΄ μμ ν 볡μ¬κ° μ΄λ£¨μ΄μ§μ§ μλλ€. μλ₯Ό λ€μ΄ λ°°μ΄μ κ²½μ° λ³΅μ λ μΈμ€ν΄μ€λ κ°μ λ°°μ΄ μ£Όμλ₯Ό κ°μ§κ² λλ€λ κ²μΈλ°, μ΄λ¬ν κ²½μ°μ λν΄μλ μ€λ²λΌμ΄λ©νμ¬ μλ‘μ΄ λ°°μ΄μ μμ±νκ³ λ΄μ©μ 볡μ¬νλλ‘ κ΅¬νν΄μ£Όλ©΄ ν΄κ²°μ΄ κ°λ₯ν κ²μ΄λ€.
class Point implements Cloneable{
int x, y;
Point(int x, int y){
this.x = x;
this.y = y;
}
public String toString(){
return "x = " + x + " y = " + y;
}
public Object clone(){
Object obj = null;
try{
obj = super.clone();
} catch (CloneNotSupportedException e){
// ...
}
return obj;
}
}
class source{
public static void main(String[] args) {
Point original = new Point(3, 5);
Point copy = (Point)original.clone();
System.out.println(original);
System.out.println(copy);
}
}
clone() μ μ¬μ©νλ €λ©΄ 볡μ ν ν΄λμ€κ° Cloneable μΈν°νμ΄μ€λ₯Ό ꡬνν΄μΌλ§ νλ©°, clone() μ μ€λ²λΌμ΄λ©νλ©΄μ protected μ κ·Ό μ μ΄μλ₯Ό public μΌλ‘ λ°κΎΈμ΄ μ£Όμ΄μΌλ§ μμκ΄κ³κ° μλ λ€λ₯Έ ν΄λμ€μμλ clone() μ νΈμΆν μ μκ² λλ€.
1.1.5 κ³΅λ³ λ°ννμ (covariant return type)
μ΄λ μ€λ²λΌμ΄λ©μ ν λ μ‘°μ λ©μλμ λ°ν νμ μ μμ ν΄λμ€μ νμ μΌλ‘ λ²κ²½νλ κ²μ΄λ€. covariant return type μ μ¬μ©νλ©΄ μ‘°μμ νμ μ΄ μλλΌ μ€μ λ‘ λ°νλλ μμ κ°μ²΄ νμ μΌλ‘ λ°νν μ μκΈ°μ νλ³νμ νμ§ μμλ λμ΄μ νΈλ¦¬νλ€.
Point copy = (Point)original.clone(); μ Point copy = original.clone();
import java.util.Arrays;
class source{
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
int[] arrClone = arr.clone();
arrClone[0] = 6;
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(arrClone));
}
}
μλ clone() μ μ΄μ©νμ¬ λ°°μ΄μ 볡μ¬νλ μμ μΈλ°, Object ν΄λμ€λ protected λ‘ μ μλ clone() μ μ΄λ₯Ό μμλ°λ λ°°μ΄μμλ public μΌλ‘ μ€λ²λΌμ΄λ©νμκΈ° λλ¬Έμ μ§μ νΈμΆμ΄ κ°λ₯ν κ²μ΄κ³ μλ³Έκ³Ό κ°μ νμ μ λ°ννλ―λ‘ νλ³νμ νμ§ μμλ λλ€. μΌλ°μ μΌλ‘λ λ°°μ΄μ 볡μ¬ν λ System.arraycopy() λ₯Ό μ¬μ©ν΄μ λ΄μ©μ 볡μ¬νλλ° μ΄μ κ°μ΄ clone() μΌλ‘ κ°λ¨ν 볡μ¬ν μλ μλ€. λ°°μ΄ μΈμλ java.util package μ Vector, ArrayList, LinkedList, HashSet, TreeSet, HashMap, TreeMap, Calendar, Date μ κ°μ ν΄λμ€λ clone() μΌλ‘ 볡μ κ° κ°λ₯νλ°, clone() μΌλ‘ 볡μ κ° κ°λ₯ν ν΄λμ€μΈμ§ νμΈνκΈ° μν΄μλ JAVA API μμ Cloneable μ ꡬννμλμ§ νμΈνλ©΄ λλ€.
1.1.6 μμ 볡μ¬μ κΉμ 볡μ¬
clone() μΌλ‘ κ°μ²΄λ₯Ό 볡μ¬νλ©΄ λ¨μν κ°μ²΄μ μ μ₯λ κ°μ 볡μ¬νλ κ²μ΄κ³ μ°Έμ‘°νλ κ°μ²΄κΉμ§ 볡μ νμ§ μλλ€. (Shallow copy()) μ΄λ¬ν κ²½μ°μλ μλ³Έμ λ³κ²½ν μ 볡μ¬λ³Έ λν μν₯μ λ°κ² λλ€. λ°λ©΄μ μλ³Έμ΄ μ°Έμ‘°νκ³ μλ κ°μ²΄ μ체λ₯Ό 볡μ¬νλ Deep copy μ κ²½μ°μλ μλ³Έκ³Ό 볡μ¬λ³Έμ΄ μλ‘ λ€λ₯Έ κ°μ²΄λ₯Ό μ°Έμ‘°νλ―λ‘ μλ‘ μν₯μ λ―ΈμΉμ§ μκ² λλ€.
class Circle implements Cloneable{
Point p;
double r;
Circle(Point p, double r){
this.p = p;
this.r = r;
}
public Circle shallowCopy(){
Object obj = null;
try{
obj = super.clone();
} catch(CloneNotSupportedException e){ }
return (Circle)obj;
}
public Circle deepCopy(){
Object obj = null;
try{
obj = super.clone();
} catch (CloneNotSupportedException e){ }
Circle c = (Circle)obj;
c.p = new Point(this.p.x, this.p.y);
return c;
}
public String toString() {
return "[p = " + p + ", r = " + r + "]";
}
}
class Point{
int x,y;
Point(int x, int y){
this.x = x;
this.y = y;
}
public String toString(){
return "(" + x + ", " + y + ")";
}
}
class source{
public static void main(String[] args) {
Circle c1 = new Circle(new Point(1, 1), 2.0);
Circle c2 = c1.shallowCopy();
Circle c3 = c1.deepCopy();
System.out.println("c1 = " + c1);
System.out.println("c2 = " + c2);
System.out.println("c3 = " + c3);
c1.p.x = 9;
c1.p.y = 9;
System.out.println("===============");
System.out.println("c1 = " + c1);
System.out.println("c2 = " + c2);
System.out.println("c3 = " + c3);
}
}
c2 λ c1 μ λνμ¬ shallow copy λ‘ μμ±ν κ°μ²΄μ΄λ―λ‘ c1 μ λ³κ²½μ λν μν₯μ λ°κ³ , c3 λ c1 μ λνμ¬ deep copy λ‘ μμ±ν κ°μ²΄μ΄λ―λ‘ c1 μ λ³κ²½μ λν μν₯μ λ°μ§ μλ λ 립μ μΈ κ°μ²΄μμ μ μ μλ€.
1.1.7 getClass()
μκΈ° μμ μ΄ μν Class κ°μ²΄λ₯Ό λ°ννλ€. Class κ°μ²΄λ μ΄λ¦μ΄ Class μΈ ν΄λμ€μ κ°μ²΄μΌλ‘ μλμ κ°μ΄ μ μλμ΄ μλ€.
public final class Class implements ... { ... }
μ΄ Class κ°μ²΄λ ν΄λμ€μ λͺ¨λ μ 보λ₯Ό λ΄κ³ μμΌλ©° ν΄λμ€ λΉ νλλ§ μ‘΄μ¬νκ³ ClassLoader μ μν΄ λ©λͺ¨λ¦¬μ ν΄λμ€ νμΌμ΄ μ¬λΌκ°κ² λ λ μλμΌλ‘ μμ±λλ€. ClassLoader λ μ€ν μ νμν ν΄λμ€λ₯Ό λ©λͺ¨λ¦¬μ λμ μΌλ‘ μ¬λ¦¬λ μν μ νλ€. μμ±λ ν΄λμ€ κ°μ²΄κ° λ©λͺ¨λ¦¬μ μλμ§ νμΈνκ³ , μμΌλ©΄ κ°μ²΄μ μ°Έμ‘°λ₯Ό λ°ν, μμΌλ©΄ classpath μ λ°λΌμ ν΄λμ€ νμΌμ μμΉνλ€. μ΄λ ν΄λμ€ νμΌμ μ°Ύμ§ λͺ»νλ κ²½μ°μλ ClassNotFoundException μ΄ λ°μνλ€.
1.1.8 Class κ°μ²΄λ₯Ό μ»λ λ°©λ²
ν΄λμ€ μ 보λ₯Ό μ»μΌλ €λ©΄ Class κ°μ²΄μ λν μ°Έμ‘°λ₯Ό λ¨Όμ μ»μ΄μμΌ νλ€.
Class cObj = new Card().getClass();
// μμ±λ κ°μ²΄λ‘ λΆν° μ»λ λ°©λ²
Class cObj = Card.class;
// ν΄λμ€ λ¦¬ν°λ΄(*.class)μΌλ‘ λΆν° μ»λ λ°©λ²
Class cObj = Class.forName("Card");
// ν΄λμ€ μ΄λ¦μΌλ‘λΆν° μ»λ λ°©λ²
forName() μ νΉμ ν΄λμ€ νμΌμ λ©λͺ¨λ¦¬μ μ¬λ¦΄ λ μ£Όλ‘ μ¬μ©νλ€. Class κ°μ²΄λ₯Ό μ΄μ©ν΄μ ν΄λμ€μ λν λͺ¨λ μ 보λ₯Ό μ»μ μ μμΌλ―λ‘ Class κ°μ²΄λ₯Ό ν΅ν΄ κ°μ²΄λ₯Ό μμ±νκ³ λ©μλλ₯Ό νΈμΆνλ λ± λ³΄λ€ λμ μΈ μ½λ μμ±μ΄ κ°λ₯ν΄μ§λ€.
1.2 String Class
μλ°μμλ λ¬Έμμ΄μ String ν΄λμ€λ₯Ό μ΄μ©ν΄μ λ€λ£¬λ€.
1.2.1 λ³κ²½ λΆκ°λ₯ν(immutable) ν΄λμ€
String ν΄λμ€μμλ λ¬Έμμ΄μ μ μ₯νκΈ° μν λ¬Έμν λ°°μ΄ μ°Έμ‘°λ³μ value λ₯Ό μΈμ€ν΄μ€ λ³μλ‘ μ μνμλ€.
public final class String implements java.io.Serializable, Comparable { private char[] value; ... }
μΌλ¨ μμ±λ String μΈμ€ν΄μ€μ value λ read only μ΄λ©° λ³κ²½ν μ μλ€. μλ₯Ό λ€μ΄ String κ°μ²΄ 2κ°λ₯Ό + μ°μ°μλ₯Ό μ΄μ©νμ¬ λ¬Έμμ΄μ κ²°ν©νλ κ²½μ°, μΈμ€ν΄μ€ λ΄μ λ¬Έμμ΄μ΄ λ°λλ κ²μ΄ μλ μλ‘μ΄ λ¬Έμμ΄μ΄ λ΄κΈ΄ String μΈμ€ν΄μ€κ° μμ±λλ μ리μΈλ°, μ΄ λλ¬Έμ μμμΉ λͺ»νκ² λ©λͺ¨λ¦¬ 곡κ°μ μ°¨μ§νκ² λλ―λ‘ κ²°ν©νμλ₯Ό μ΅λν μ€μ΄λ κ²μ΄ ν¨μ¨μ μ΄λ€. λ¬Έμμ΄ κ° κ²°ν©, μΆμΆκ³Ό κ°μ΄ λ¬Έμμ΄μ μμ£Ό λ€λ£¨μ΄μΌ ν κ²½μ°μλ String ν΄λμ€ μΈμ StringBuffer ν΄λμ€λ₯Ό μ¬μ©νλ κ²μ΄ μ’μλ°, StringBuffer ν΄λμ€λ λ¬Έμμ΄ λ³κ²½μ΄ κ°λ₯ν΄μ νλμ μΈμ€ν΄μ€ λ§μΌλ‘λ λ¬Έμμ΄μ μΆ©λΆν λ€λ£° μ μλ€.
1.2.2 λ¬Έμμ΄μ λΉκ΅
λ¬Έμμ΄μ λ§λλ κ²μ λ¬Έμμ΄ λ¦¬ν°λ΄μ μ§μ νλ κ²κ³Ό String ν΄λμ€μ μμ±μλ₯Ό μ΄μ©νλ λ°©λ²μ΄ μλ€.
String str1 = "abc"; // λ¬Έμμ΄ λ¦¬ν°λ΄ "abc" μ μ£Όμκ° str1 μ μ μ₯λ¨.
String str2 = new String("abc"); // μλ‘μ΄ String μΈμ€ν΄μ€λ₯Ό μμ±ν¨.
μμ±μλ₯Ό μ΄μ©νλ κ²½μ° new operator μ μν΄ λ©λͺ¨λ¦¬ ν λΉμ΄ μ΄λ£¨μ΄μ Έμ μλ‘μ΄ String μΈμ€ν΄μ€κ° μμ±λλ κ²μ΄κ³ , λ¬Έμμ΄ λ¦¬ν°λ΄μ μ΄λ―Έ μ‘΄μ¬νλ κ²μ μ¬μ¬μ©νλ κ²μ΄λ€.
class source{
public static void main(String[] args) {
String str1 = "abc";
String str2 = "abc";
System.out.println("String str1 = \"abc\";");
System.out.println("String str2 = \"abc\";");
System.out.println("str1 == str2 ? " + (str1 == str2));
System.out.println("str1.equals(str2) ? " + str1.equals(str2));
String str3 = new String("\"abc\"");
String str4 = new String("\"abc\"");
System.out.println("str3 == str4 ? " + (str3 == str4));
System.out.println("str3.equals(str4) ? " + str3.equals(str4));
}
}
String ν΄λμ€μμ μ€λ²λΌμ΄λ© λ equals λ©μλλ₯Ό μ΄μ©νμ¬ λΉκ΅ν κ²½μ° λ¬Έμμ΄μ μ μ₯λ λ΄μ©μ λΉκ΅νλ―λ‘ λͺ¨λ true λ₯Ό μ»μ μ μμ§λ§, == λ₯Ό μ΄μ©νμ¬ λΉκ΅νμ λμλ String μΈμ€ν΄μ€μ κ²½μ° μ£Όμλ₯Ό λΉκ΅νλ―λ‘ κ²°κ³Όκ° false λ‘ λμ€λ κ²μ΄λ€.
1.2.3 λ¬Έμμ΄ λ¦¬ν°λ΄
μμ€ νμΌ λ΄μ λͺ¨λ λ¬Έμμ΄ λ¦¬ν°λ΄μ μ»΄νμΌ ν λ ν΄λμ€ νμΌμ μ μ₯λλλ°, κ°μ λ΄μ©μ λ¬Έμμ΄μ λ¨ νλ²λ§ μ μ₯λλ€. λ¬Έμμ΄ λ¦¬ν°λ΄λ String μΈμ€ν΄μ€μ΄κ³ μμ±λλ©΄ λ³κ²½ν μ μκΈ° λλ¬Έμ νλμ μΈμ€ν΄μ€λ₯Ό 곡μ νλ©΄ λκΈ° λλ¬Έμ΄λ€. ν΄λμ€ νμΌμλ λͺ¨λ 리ν°λ΄ λͺ©λ‘λ€μ΄ μλλ°, ν΄λμ€ νμΌμ΄ ν΄λμ€ λ‘λμ μν΄ λ©λͺ¨λ¦¬μ μ¬λΌκ°κ² λλ©΄ ν΄λΉ 리ν°λ΄λ€μ΄ JVM λ΄μ Constant pool μ μ μ₯λλ€.
1.2.4 λΉ λ¬Έμμ΄(empty string)
κΈΈμ΄κ° 0 μΈ λ¬Έμμ΄μ λ§νλ©°, C μμλ λ¬Έμμ΄μ λμ null λ¬Έμκ° λΆμ§λ§ μλ°μμλ κ·Έλ μ§ μλλ€. λμ λ¬Έμμ΄μ κΈΈμ΄ μ 보λ₯Ό λ°λ‘ μ μ₯νλ€.
1.2.5 String ν΄λμ€μ μμ±μμ λ©μλ
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html
1.2.6 join() κ³Ό StringJoiner
join() μ μ¬λ¬ λ¬Έμμ΄ μ¬μ΄μ¬μ΄μ ꡬλΆμλ₯Ό λ£μ΄ κ²°ν©νλ split() κ³Ό λ°λμ μμ μ νλ€. java.util.StringJoiner ν΄λμ€λ₯Ό μ΄μ©νλ λ°©λ²λ μλ€.
import java.util.StringJoiner;
class source{
public static void main(String[] args) {
String animals = "dog,cat,bear";
String[] arr = animals.split(",");
System.out.println(String.join("-", arr));
StringJoiner sj = new StringJoiner("/", "[", "]");
for(String s : arr)
sj.add(s);
System.out.println(sj.toString());
}
}
1.2.7 μ λμ½λμ 보좩문μ
String ν΄λμ€μ λ©μλλ₯Ό 보면 맀κ°λ³μ νμ μ΄ int μΈ κ²λ μ‘΄μ¬νλλ°, μ΄λ νμ₯λ μ λμ½λλ₯Ό λ€λ£¨κΈ° μν¨μ΄λ€. μ λμ½λλ 16bit(2byte) λ¬Έμ 체κ³μλλ°, νμ¬ 20bit λ‘ νμ₯λμλ€. κ·Έλ¬λ―λ‘ νλμ λ¬Έμλ₯Ό char μΌλ‘ λ€λ£¨μ§ λͺ»νκ³ int λ‘ λ€λ£¨κ² λ κ²μΈλ°, νμ₯μ μν΄ μλ‘κ² μΆκ°λ λ¬Έμλ€μ supplementary characters λΌκ³ νλ€. String λ©μλμ 맀κ°λ³μκ° int μΈ κ²½μ°μλ λ³΄ν΅ supplementary characters μ μ§μνκ³ , char μΈ κ²½μ°μλ κ·Έλ μ§ μλλ€λ μ λλ§ κΈ°μ΅ν΄λμ.
1.2.8 λ¬Έμ μΈμ½λ© λ³ν
getBytes(String charsetName) μ μ¬μ©νλ©΄ λ¬Έμμ΄μ μΈμ½λ©μ λ³νν μ μλ€. Java μμλ UTF-16 μ μ¬μ©νλλ° λ¬Έμμ΄ λ¦¬ν°λ΄μ ν¬ν¨λλ λ¬Έμλ€μ OS μΈμ½λ©μ μ¬μ©νλ€. νκΈμ κ²½μ° CP949 λ₯Ό μ¬μ©νκ³ UTF-8 λ‘ λ³κ²½νκΈ° μν΄μλ μλμ κ°μ΄ ν΄μ£Όλ©΄ λλ€.
byte[] utf8_str = "κ°".getBytes("UTF-8");
String str = new String(utf8_str, "UTF_8");
μλ‘ λ€λ₯Έ λ¬Έμ μΈμ½λ©μ μ¬μ©νλλ° λ°μ΄ν°λ₯Ό μ£Όκ³ λ°κΈ° μν΄μλ μΈμ½λ©μ μ ν΄μ£Όμ§ μμΌλ©΄, κΈμκ° κΉ¨μ§κ² λλ€.
1.2.9 String.format()
format() μ formating λ λ¬Έμμ΄μ λ§λλ λ©μλλ‘, printf() μ μ¬μ©λ²μ΄ λμΌνλ€.
1.2.10 κΈ°λ³Έν κ°μ String μΌλ‘ λ³ν
κΈ°λ³Ένμ λ¬Έμμ΄λ‘ λ°κΎΈκΈ° μν΄μλ λΉ λ¬Έμμ΄μ λν¨μΌλ‘μ¨ κ°λ¨ν ꡬνν μ μλ€. μ΄λ μ°Έμ‘° λ³μκ° κ°λ¦¬ν€λ μΈμ€ν΄μ€μ toString() μ νΈμΆνκ² νλ©°, μ΄λ‘λΆν° String μΌλ‘ λ³νλμ΄ λ°ννλ κ²μ΄λ€. μ΄ λ°©λ² μΈμ valueOf() λ₯Ό μ¬μ©νλ λ°©λ²λ μλλ°, λΉ λ¬Έμμ΄μ λνλ κ² λ³΄λ€ μ±λ₯μ΄ μ’λ€.
int i = 100;
String str1 = i + "";
String str2 = String.valueOf(i);
1.2.11 String μ κΈ°λ³Έν κ°μΌλ‘ λ³ν
κ·Έλ λ€λ©΄ String μ κΈ°λ³ΈνμΌλ‘ λ³ννκΈ° μν΄μλ μ΄λ»κ² ν κΉ? μ΄λ valueOf() λ₯Ό μ΄μ©νκ±°λ parseInt() λ₯Ό μ¬μ©νλ©΄ λλ€.
int i = Integer.parseInt("100");
int i2 = Integer.valueOf("100");
μ¬μ€ valueOf() μ λ°ν νμ μ int κ° μλ integer μΈλ°, μ΄λ auto-boxing μ μν΄ μλ λ³νλ κ²μ΄λ€. parseInt() λ©μλλ valueOf() μ λ°ν νμ λ§ λ€λ₯΄μ§ κ°λ€.
public static Integer valueOf(String s) throws NumberFormatException{
return Integer.valueOf(parseInt(s, 10));
}
class source{
public static void main(String[] args) {
int iVal = 100;
String strVal = String.valueOf(iVal);
double dVal = 200.0;
String strVal2 = dVal + "";
double sum = Integer.parseInt("+" + strVal) + Double.parseDouble(strVal2);
double sum2 = Integer.valueOf(strVal) + Double.valueOf(strVal2);
System.out.println(String.join("", strVal, "+", strVal2, "=") + sum);
System.out.println(strVal+"+"+strVal2+"="+sum2);
}
}
parseInt() μ parseFloat() κ°μ λ©μλλ λ¬Έμμ΄μ 곡백 νΉμ λ¬Έμκ° μλ κ²½μ°μ NumberFormatException μ λ°μμν€λ―λ‘, μ΅κ΄μ μΌλ‘ trim() μ μ¬μ©νμ¬ μλμ 곡백μ μ κ±°νμ¬ formating νλ κ²μ΄ μ’λ€. μ μν΄μΌ ν κ²μ λΆνΈλ₯Ό μλ―Ένλ '+' λ μμμ μ μλ―Ένλ '.' κ·Έλ¦¬κ³ float ν κ°μ μλ―Ένλ f μ κ°μ μλ£ν μ λ―Έμ¬λ νμ©λλ€.
class source{
public static void main(String[] args) {
String fullName = "Hello.java";
int index = fullName.indexOf('.');
String fileName = fullName.substring(0, index);
// fullName.substring(index+1, fullName.length());
String ext = fullName.substring(index+1);
System.out.println("name : " + fileName);
System.out.println("ext : " + ext);
}
}
1.3 StringBuffer ν΄λμ€μ String Builder ν΄λμ€
StringBuffer λ λ΄λΆμ λ¬Έμμ΄μ νΈμ§ν μ μλ buffer κ° μμ΄μ μμ± μ μ§μ λ λ¬Έμμ΄μ λ³κ²½ν μ μλ€. StringBuffer μ μμ±ν λ, λ²νΌμ κΈΈμ΄λ₯Ό μ§μ ν μ μλλ° λ무 μκ² νλ©΄ λ²νΌμ κΈΈμ΄λ₯Ό λλ €μ£Όλ μμ μ΄ λ μμ£Ό λ°μν μ μμΌλ―λ‘ ν¨μ¨μ±μ΄ λ¨μ΄μ§μ μ μν΄μΌνλ€.
public final class StringBuffer implements java.io.Serializable {
private char[] value;
// ...
}
1.3.1 StringBuffer μ μμ±μ
StringBuffer μ μμ±ν λ, κΈΈμ΄λ₯Ό μ¬μ μκ² μ§μ ν΄μΌ νλ€. λ§μ½ λ³λλ‘ λ²νΌμ ν¬κΈ°λ₯Ό μ§μ ν΄μ£Όμ§ μμΌλ©΄ 16κ°μ λ¬Έμλ₯Ό μ μ₯ν μ μλ ν¬κΈ°μ λ²νΌλ₯Ό μμ±νλ€.
public StringBuffer(int length){
value = new char[length];
shared = false;
}
public StringBuffer() {
this(16);
}
public StringBuffer(String str) {
this(str.length() + 16);
append(str);
}
1.3.2 StringBuffer μ λ³κ²½
StringBuffe λ String κ³Όλ λ¬λ¦¬ λ΄μ©μ λ³κ²½ν μ μλ€. StringBuffer sb = new StringBuffer("abc"); λ‘ StringBuffer μ μμ±νμλ€κ³ κ°μ ν΄λ³΄μ. κ·Έλ¦¬κ³ sb.append("aa"); λ₯Ό μννλ€λ©΄ sb μ λ΄μ© λ€μ "aa" κ° μΆκ°λλλ°, κΈ°μ‘΄μ κ°μ§κ³ μλ μμ μ μ£Όμλ₯Ό λ°ννλ€. κ·Έλμ sb.append("aa").append("cc"); μ κ°μ΄λ ν μ μλ€.
1.3.3 StringBuffer μ λΉκ΅
StringBuffer ν΄λμ€μμλ equals λ©μλλ₯Ό λ³λλ‘ μ€λ²λΌμ΄λ© νμ§ μμμ, String ν΄λμ€μμ == λ±κ° λΉκ΅ μ°μ°μλ₯Ό μ¬μ©ν κ²κ³Ό κ°μ κ²°κ³Όκ° λνλλ€. κ·Έλμ μννκ² λΉκ΅νκΈ° μν΄μλ toString() μ νΈμΆν λ€μμ equals() λ©μλλ₯Ό μ¬μ©νλ κ²μ΄ μ’λ€.
1.3.4 StringBuffer ν΄λμ€μ μμ±μμ λ©μλ
https://www.geeksforgeeks.org/stringbuffer-class-in-java/
1.3.5 StringBuilder λ?
StringBuffer λ λ©ν°μ°λ λμ μμ νλλ‘ λκΈ°νλμ΄μλλ°, μ΄λ StringBuffer μ μ±λ₯μ λ¨μ΄λ¨λ¦¬λ μμΈμ΄ λλ€. λ©ν° μ°λ λ©μ΄ νμμλ νλ‘κ·Έλ¨μ κ²½μ° StringBuffer λ λΆνμν λκΈ°νλ‘ μΈν΄ μ±λ₯μ΄ μ νλλ€. κ·Έλμ μ°λ λλ₯Ό λκΈ°ννλ κΈ°λ₯λ§ μ μΈν StringBuilder κ° μΆκ°λ κ²μΌλ‘, StringBuffer μ μμ ν λμΌνλ€.
1.4 λνΌ(wrapper) ν΄λμ€
OOP μμλ λͺ¨λ κ²μ λ€ Object λ‘ λ€λ£¨μ΄μ ΈμΌ νμ§λ§ μλ°μμλ 8κ°μ κΈ°λ³Ένμ Object λ‘ λ€λ£¨μ§ μλ λμ λμ μ±λ₯μ μ»μλ€. (μμ ν κ°μ²΄μ§ν₯ μΈμ΄κ° μλλΌλ κ²μ΄λ€.) νμ§λ§ κΈ°λ³Έν λ³μ λν κ°μ²΄λ‘ λ€λ£¨μ΄μΌ νλ κ²½μ°κ° λ°μνλ©° μ΄λ μ¬μ©νλ κ²μ΄ wrapper class μ΄λ€.
public final class Integer extends Number implements Comparable {
...
private int value;
...
}
wrapper Class λ λͺ¨λ equals() λ©μλκ° μ€λ²λΌμ΄λ© λμ΄ μμ΄ νΈλ¦¬νλ€. μ€ν λ°μ±μ΄ λλ€κ³ ν μ§λΌλ Integer κ°μ²΄μ λΉκ΅ μ°μ°μλ₯Ό μ¬μ©ν μ μλλ°, μ΄λ¬ν κ²½μ°μλ compareTo() λ₯Ό μ¬μ©νλ©΄ λλ€. λν toString() λ μ€λ²λΌμ΄λ©λμ΄μ κ°μ²΄κ° κ°μ§κ³ μλ κ°μ λ¬Έμμ΄μΌλ‘ λ³ννμ¬ λ°ννλ€.
1.5 μ€ν λ°μ± & μΈλ°μ± (autoboxing & unboxing)
JDK1.5 μ΄μ μμλ κΈ°λ³Ένκ³Ό μ°Έμ‘°νμ μ°μ°μ΄ λΆκ°λ₯νμ¬ wrapper ν΄λμ€λ‘ κΈ°λ³Ένμ κ°μ²΄λ‘ λ§λ λ€μ μ°μ°μ νμ΄μΌλ§ νλ€. νμ§λ§ νμ¬λ κ°λ₯νλ©°, μ»΄νμΌλ¬μ μν΄ κΈ°λ³Έν κ°μ wrapper class μ κ°μ²΄λ‘ μλμΌλ‘ λ³νν΄μ£Όλ κ²μ autoboxing μ΄λΌκ³ νκ³ , λ°λμ μμ μ unboxing μ΄λΌκ³ νλ€.
References
http://www.yes24.com/Product/Goods/24259565
'π» Study ! > JAVA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[CH12] Generics, Enumeration, Annotation (0) | 2022.08.30 |
---|---|
[CH11] Collections framework (2) | 2022.08.27 |
[CH08] μμΈμ²λ¦¬(Exception handling) (0) | 2022.08.02 |
[CH07] κ°μ²΄μ§ν₯νλ‘κ·Έλλ°4 (OOP) (0) | 2022.08.02 |
[CH07] κ°μ²΄μ§ν₯νλ‘κ·Έλλ°3 (OOP) (0) | 2022.08.01 |