- Today
- Total
- λ¬Έλ²
- java
- MST
- 벨λ§ν¬λ
- λ°μ΄ν°λ² μ΄μ€
- 그리λ
- Algorithm
- dp
- spring
- leetcode
- μλ£κ΅¬μ‘°
- pytorch
- CS
- μλ°μμ μ
- λ°±μ€
- μ‘Έμ μν
- tree
- database
- BFS
- Graph
- λ€μ΅μ€νΈλΌ
- μΈν΄
- PS
- OOP
- μμμ λ ¬
- ꡬν
- νλ‘κ·Έλλ¨Έμ€
- μλ°
- λ°±μλ
- array
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
String (Java Platform SE 7 )
Compares two strings lexicographically. The comparison is based on the Unicode value of each character in the strings. The character sequence represented by this String object is compared lexicographically to the character sequence represented by the argum
docs.oracle.com
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/
StringBuffer class in Java - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
www.geeksforgeeks.org
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
Javaμ μ μ - YES24
μ΅κ·Ό 7λ λμ μλ° λΆμΌμ λ² μ€νΈ μ λ¬ 1μλ₯Ό μ§μΌμ¨ `μλ°μ μ μ`μ μ΅μ ν. μ μκ° μΉ΄νμμ 12λ κ° μ§μ λ μλ€μκ² λ΅λ³μ ν΄μ€λ©΄μ μ΄λ³΄μκ° μ΄λ €μνλ λΆλΆμ μ νμ νκ³ μ΄ μ± . λΏλ§ μ
www.yes24.com
'π» 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 |