πJava
πλ³μ
λ³μλ “λ©λͺ¨λ¦¬ 곡κ°(κ·Έλ¦)”μΌλ‘, λ©λͺ¨λ¦¬ 곡κ°μ κ°(value)μ ν λΉ(assign)ν ν μ¬μ©νλ€.
βοΈTypeμ΄λ?
κΈ°λ³Έν(Primitive Type): κ° μ μ₯
미리 μ ν΄μ§ ν¬κΈ°μ λ°μ΄ν° ννμΌλ‘ λ³μ μ체μ κ°μ μ μ₯νλ€.
μ°Έμ‘°ν(Reference Type): μ£Όμ μ μ₯
ν¬κΈ°κ° 미리 μ ν΄μ§ μ μλ λ°μ΄ν°μ ννμΌλ‘, λ³μμλ μ€μ κ°μ μ°Έμ‘°ν μ μλ μ£Όμλ§ μ μ₯νλ€.
μλ°λ λ³μμ λμ , 리ν΄, ν¨μ μΈμ κ°μ μ λ¬νλ Pass By Valueλ₯Ό μ¬μ©νλ€.
*Pass By Value: λμ , 리ν΄, ν¨μ μΈμ κ°μ μ λ¬ν λ λ©λͺ¨λ¦¬μ κ°μ μ λ¬νλ κ²
- κΈ°λ³Έν(Primitive Type): λ©λͺ¨λ¦¬μ μ§μ λ μ€μ κ°μ΄ μ λ¬λλ€. ⇒ Pass By Value
- μ°Έμ‘°ν(Reference Type): λ©λͺ¨λ¦¬μ μ μ₯λ μ°Έμ‘° κ°(hash code)κ° μ λ¬λλ€. ⇒ Pass By Reference
βοΈκΈ°λ³Ένμ ν¬κΈ°
8κ°μ Type
λ Όλ¦¬ν: boolean
μ μν: byte, short, int, long
μ€μν: float, double
λ¬Έμν: char
⇒intκ° μ μμ default, doubleμ΄ μ€μμ default
⇒byteλ 8bitμΈλ° 2^7κΉμ§λ§ μ²λ¦¬νλ μ΄μ : λΆνΈ λλ¬Έ
πν λ³ν(Type Casting)
λ³μμ νμ λ€λ₯Έ νμΌλ‘ λ³ννλ κ²
char ↔ int
κΈ°λ³Ένμ κΈ°λ³ΈνλΌλ¦¬, μ°Έμ‘°νμ μ°Έμ‘°νλΌλ¦¬ ν λ³νμ΄ κ°λ₯νλ€.
- booleanμ λ€λ₯Έ κΈ°λ³Ένκ³Ό νΈνλμ§ μμ
- κΈ°λ³Ένκ³Ό μ°Έμ‘°νμ ν λ³νμ μν΄μ Wrapper ν΄λμ€λ₯Ό μ¬μ©νλ€.
βοΈλͺ μμ νλ³νκ³Ό 묡μμ νλ³ν
- λͺ μμ
int i = 300; byte b = (byte)i;
- 묡μμ
byte b = 10; int i = (int)b; int i2 = b;
κ°μ ν¬κΈ°, νμ μ ν¬κΈ°κ° μλ νμ μ νν λ²μκ° μ»€μ§λ λ°©ν₯μΌλ‘ ν λΉν κ²½μ°λ 묡μμ νλ³ν λ°μ
byte(8) → short / char(16) → int(32) → long(64) → float(32) → double(64)
char: 2Byteμ μ μ(16bit)
- λͺ μμ νλ³νμ κ° μμ€μ΄ λ°μν μ μμΌλ―λ‘ νλ‘κ·Έλλ¨Έ μ± μνμ νλ³νμ μ§ννλ€.
- 묡μμ νλ³νμ μλ£μ μμ€ κ±±μ μ΄ μμΌλ―λ‘ νλ³ν μ°μ° μλ΅νλ€.
πμ°μ°μμ νλ³ν
1.νΌμ°μ°μμ ν¬κΈ°κ° 4B μ΄νλΌλ©΄ intνμΌλ‘ νλ³ν ν μ°μ°μ΄ μ§νλλ€.
μ¦, byte, short, char νμ μ κ²½μ° intνμΌλ‘ ν λ³ν ν μ°μ°μ΄ μ§νλλ€. μ¦, μλμ κ°μ μμμμ λͺ μμ μΈ νλ³νμ νμλ‘ νλ€.
byte b1 = 10;
byte b2 = 20;
//byte b3 = b1 + b2;
byte b3 = (byte)(b1+b2);
2. μ°μ μ΄ν μ°μ°μλ μ°μ° μ μ νΌμ°μ°μμ νμ μ μΌμΉμν€λ©°, νΌμ°μ°μ μ€ ν° νμ μΌλ‘ νλ³ν ν μ°μ°μ΄ μ§νλλ€.
int i1 = 10;
long l1 = 20;
//int i2 = i1 + l1;
int i2 = (int)(i1+l1);
βοΈ&,&& κ·Έλ¦¬κ³ |,||
&μ |μ λΉνΈμ°μ°μ, &&μ ||μ λ Όλ¦¬μ°μ°μμ΄λ€. κ°κ°μ μ°¨μ΄μ μ λΉνΈ μ°μ°μλ λͺ¨λ νΌμ°μ°μμ λν μ°μ°μ μννκ³ , λ Όλ¦¬μ°μ°μλ μμ μ°μ°μΌλ‘ κ·Έ κ²°κ³Όκ° λͺ ννλ©΄ μ΄νμ νΌμ°μ°μμ λν μ°μ°μ΄ μ΄λ£¨μ΄μ§μ§ μλλ€.
//(1)
int a = 10;
int b = 20;
System.out.println((a += 10) > 15 | (b -= 10) > 15);
System.out.println("a = " + a + ", b = " + b); //a=20, b=10
//(2)
a = 10;
b = 20;
System.out.println((a += 10) > 15 || (b -= 10) > 15);
System.out.println("a = " + a + ", b = " + b); //a=20, b=20
λ°λΌμ μμ μμ μμ (1)λ² κ²½μ°μ (2)λ² κ²½μ°μμ μ°μ°μν ν aμ bκ°μ μ°¨μ΄κ° λ°μνλ€. ||μ κ²½μ° λ Όλ¦¬μ°μ°μμ΄κΈ° λλ¬Έμ (a+=10)>15μ μ°μ°μμ μ°μ° κ²°κ³Όκ° μ ν΄μ§κ³ λ°λΌμ (b-=10)>15μ μ°μ°μ΄ μνλμ§ μλλ€.
πκ°μ²΄μ§ν₯ νλ‘κ·Έλλ°
μ₯μ
- λΈλ‘ ννμ λͺ¨λνλ νλ‘κ·Έλλ°
- μ λ’°μ± λμ νλ‘κ·Έλλ°
- μΆκ°/μμ /μμ μ©μ΄
- μ¬μ¬μ©μ±
κ°μ²΄μ§ν₯ μΈμ΄μ νΉμ§
μΆμν, λ€νμ±, μμ, λ°μ΄ν° μλκ³Ό 보νΈ
πμΆμν
νμ€μ κ°μ²΄κ° κ°λ μμ±κ³Ό κΈ°λ₯μ μΆμνλμ΄ ν΄λμ€μ μ μλλ©°, ν΄λμ€λ ꡬ체νλμ΄ νλ‘κ·Έλ¨μ κ°μ²΄κ° λλ€.
public class MovieTest{
public static void main(String[] args){
Movie movie;
movie = new Movie();
movie.movieId = 1;
movie.title = "μνμ λͺ©";
movie.director = "μνκ°λ
";
}
}
stacks
- λ©μλλ€μ μ€ν곡κ°μΌλ‘, thread λΉ νλμ stackμ΄ μμ±λλ€.
heap
- κ°μ²΄λ₯Ό μ μ₯νκΈ° μν μμμΌλ‘, threadμ μν΄ κ³΅μ λλ€.
meta-space
- ν΄λμ€ μ 보 μ²λ¦¬
πμμ
μμμ κΈ°μ‘΄(μμ)ν΄λμ€μ μμ°μ μμ ν΄λμ€μμ μ¬μ¬μ©νκΈ° μν κ²
- extends ν€μλ μ¬μ©νλ€.
- λͺ¨λ ν΄λμ€λ Object ν΄λμ€λ₯Ό μμλ°λλ€.
- μμ±μλ μμμ΄ λΆκ°λ₯νλ€.
- λ¨, μμ ν΄λμ€μ μ κ·Όμ§μ μκ° μμ ν΄λμ€μ μ κ·Ό μ§μ μλ³΄λ€ ν¬κ±°λ κ°μμΌνλ€. μλ₯Ό λ€μ΄, λΆλͺ¨μ μ κ·Όμ§μ μκ° defaultμ΄κ³ μμμ΄ λ€λ₯Έ packageμ μλ€λ©΄ μ κ·Όν μ μμΌλ―λ‘ overrideλ λ©μλκ° νΈμΆλμ§ μλλ€.
- this()λ super()λ μμ ν΄λμ€ μμ±μμ 맨 첫 μ€μμλ§ νΈμΆν μ μλ€. ⇒ this()μ super()λ₯Ό κ°μ΄ μ¬μ©ν μ μλ λ°©λ²μ μλ€.
- μλ°λ κ°μ²΄λ₯Ό μμ±νλ κ·Έ μμ μ μμμ΄ μ΄λ£¨μ΄μ§λ€.
public class Person{
String name;
int age;
void sleep(){...}
void eat(){...}
}
public class Student extends Person{
String school;
void study(){...}
}
βJava: λ¨μΌ μμ
Javaλ λ¨μΌ μμλ§ μ§μνλ€. λμ interfaceμ ν¬ν¨ κ΄κ³(has a)λ‘ λ¨μ μ 극볡κ°λ₯νλ€.
- λ€μ€ μμμ κ²½μ° μ¬λ¬ ν΄λμ€μ κΈ°λ₯μ λ¬Όλ €λ°μ μ μλ€λ μ₯μ μ΄ μμΌλ κ΄κ³κ° λ§€μ° λ³΅μ‘ν΄μ§λ λ¨μ μ΄ μλ€. μλ₯Ό λ€μ΄, λμΌν μ΄λ¦μ λ©μλκ° λ μμ ν΄λμ€μκ² λͺ¨λ μλ€λ©΄ νμ ν΄λμ€λ μ΄λ€ λ©μλλ₯Ό μΈ κ²μΈκ°?
μμ: ꡬνμμκ³Ό νμ μμ
ꡬνμμ: implements ν€μλλ₯Ό ν΅ν΄ μΈν°νμ΄μ€λ₯Ό μμλ°μ ꡬν
νμ μμ: extends ν€μλλ₯Ό ν΅ν΄ ν΄λμ€κ° λ€λ₯Έ ν΄λμ€λ₯Ό νμ₯νλ κ²
πλ€νμ±(Polymorphism)
λ°μ΄ν°μ λ€νμ±(=νλ³ν)
λ°μ΄ν°μ λ€νμ±μ λ©μλμ μ€λ²λ‘λ©μ μ€μΌ μ μλ€.
Primitive
byte⇒short/char⇒int⇒long⇒float⇒double
Reference
λͺ¨λ sub κ°μ²΄λ super typeμΌλ‘ μλ νλ³ν λ¨
λ©μλμ λ€νμ±
- νΈμΆμ λν νΈλ¦¬μ± μ 곡
μ€λ²λ‘λ©κ³Ό μ€λ²λΌμ΄λ© ⇒ “λ©μλ νΈμΆμ λν νΈλ¦¬μ±”
- λμΌν κΈ°λ₯μ λν΄ μ¬λ¬ ννμ ν¨μλ₯Ό μ 곡νλ€.
- λμΌν κΈ°λ₯μΌ λ κ°μ μ΄λ¦μΌλ‘ νΈμΆνλ―λ‘ νΈμΆμ λν νΈλ¦¬μ± μ 곡
method Overloading : μΈμμ λ°λΌ μ¬λ¬ κ°μ ν¨μλ₯Ό μ 곡, μΈμλ‘ κ΅¬λ³
method Overriding : λΆλͺ¨ or μμμΌλ‘ ꡬλ³
μμμ λͺ©μ μ “μμ ”μ΄ μ μ νλ€. μ¬μ¬μ©μ΄ λͺ©μ μ΄λΌλ©΄ μμμ΄ μλλΌ, μμ±μΌλ‘ λ£μ΄λκ³ μ¬μ©νλ κ²μ΄ λ ν¨κ³Όμ μΌ μ μλ€. μ΄λ Javaλ λμ λ°μΈλ©μ ν΅ν΄ λ°νμμ λ©μλ νΈμΆμ λμ μΌλ‘ κ²°μ νλ κ²κ³Ό κ΄λ ¨μ΄ μλ€.
C++μ linkingμ΄ compile timeμ μ΄λ£¨μ΄μ§κ³ , virtualμ΄λΌλ ν€μλ μ¬μ© μμλ§ νμν methodμ κ°μ²΄λ₯Ό νΈμΆνλ€. λ°λ©΄, Javaλ 미리 linkingμ΄ μ΄λ£¨μ΄μ§ μ μλ€.(compile νμμ linkingμ΄ μ΄λ£¨μ΄μ§ μ μλ€.) ν΄λμ€ load μμ static ν λ©μλκ° μλ€λ©΄ linkingμ΄ μ΄λ£¨μ΄μ§λ©°, κ·Έ μΈμλ λ©μλ νΈμΆ μμ linkingμ΄ μ΄λ£¨μ΄μ§λ€. μ¦, JAVAλ κ°μ²΄ μ§ν₯μΌλ‘ μν΄ λμ λ°μΈλ©μ μ ννκΈ° λλ¬Έμ μλμ μΌλ‘ λ리λ€.
βοΈλ€νμ±μ νμ©
λ€νμ± νμ© μ1-λ€λ₯Έ νμ μ κ°μ²΄λ₯Ό λ€λ£¨λ λ°°μ΄
- Objectλ λͺ¨λ ν΄λμ€μ μ‘°μμ΄λ€.
Object λ°°μ΄μ μ΄λ€ νμ μ κ°μ²΄λΌλ λ€ μ μ₯ν μ μμ
- μλ°μ μλ£ κ΅¬μ‘°λ₯Ό κ°λ¨νκ² μ²λ¦¬ν μ μλ€.
μ΄μ κ°μ νΉμ±μ μ΄μ©νμ¬ Collection APIκ° λ±μ₯νκ² λ¨
μλ₯Όλ€μ΄, λ€μκ³Ό κ°μ Object λ°°μ΄μ μ΄λ ν νμ μ μλ£λ μ μ₯ν μ μλ€. νμ§λ§ μμ νμ μΌλ‘ μ¬λΌκ°μλ‘ νμ©λλ λμμ§μ§λ§ μ½λμ 볡μ‘μ±μ΄ λμμ§λ€.(μΈμ λ μΊμ€ν μ νκ³ λ€μ΄κ°μΌ νλ λ¬Έμ μ μ΄ μλ€.) λ°λΌμ Java APIμ²λΌ κ³΅ν΅ κΈ°λ₯μΈ κ²½μ° Objectλ₯Ό νλΌλ―Έν°λ‘ μ¬μ©νκ² μ§λ§ λ§μ κ²½μ° λΉμ¦λμ€ λ‘μ§μ μ΅μμ κ°μ²΄λ₯Ό μ¬μ©νλ κ²μ΄ μ’λ€.
Object[] objs = new Object[4];
objs[0]="Hello";
objs[1]=objs;
objs[2]=new SpiderMan();
objs[3]=3; //auto boxing;
objs[3]=Integer.valueOf(3); //μ ννλ Wrapper ν΄λμ€μ ννλ‘ μ μ₯λλ€.
λ€νμ±μ νμ© μ2 - 맀κ°λ³μμ λ€νμ±
ex) System.out.println(Object x){}
βοΈλ€νμ±κ³Ό μ°Έμ‘°ν κ°μ²΄μ ν λ³ν
λ©λͺ¨λ¦¬μ μλλΌλ μ°Έμ‘°νλ λ³μμ νμ μ λ°λΌ μ κ·Όν μ μλ λ΄μ©μ΄ μ νλλ€. λ©λͺ¨λ¦¬μ μ¬λΌκ° μλ κ²κ³Ό μ¬μ©ν μ μλ κ²μ λ€λ₯΄λ€.
public class Person{
String name;
int age;
void sleep(){...}
void eat(){...}
}
public class Student extends Person{
String school;
void study(){...}
}
public class StudentTest(){
public static void main(String[] args){
Person person = new Person();
Student student = new Student();
person = student;
person.study(); //μ»΄νμΌ μλ¬ λ°μ
}
}
λ³Έ μν©μ “shadow impact”λΌκ³ νλ€. λ€νμ±μ ν΅ν΄ λΆλͺ¨ ν΄λμ€ νμ μ μ°Έμ‘° λ³μλ‘ μμ ν΄λμ€μ κ°μ²΄λ₯Ό λ€λ£° λ, μ€μ κ°μ²΄μ νμ μ λ°λΌ λμ μΌλ‘ λ©μλ νΈμΆμ΄ κ²°μ λλ€. μ¦, μ€μ λ©λͺ¨λ¦¬μ μμ§λ§ κ°λ €μ Έ μλ μνμ΄λ€.
βοΈReference νλ³ν
Up casting(μλ νλ³ν)
sub νμ μμ super νμ μΌλ‘ νλ³ν ⇒ λͺ¨λ sub νμ μ κ°μ²΄λ super νμ μΌλ‘ μλ νλ³ν λλ€.
Down casting(λͺ μμ νλ³ν)
super νμ μμ sub νμ μΌλ‘ νλ³ν ⇒ super νμ μ΄ μ°Έμ‘° νκ³ μλ κ°μ²΄μ νμ μΌλ‘λ§ νλ³ν λλ€.
*μ°Έμ‘°νκ³ μλ κ°μ²΄μ νμ μ΄ μλ λ€λ₯Έ νμ μΌλ‘ νλ³ννλ©΄ ClassCaseExceptionμ΄ λ°μνλ€.
*λΆλͺ¨λ μμμ νμ μ μμ§λ§, μμμ λΆλͺ¨λ₯Ό νμ μ μλ€.
βοΈinstanceof
Reference νμ μ λν νκ²μ¬λ₯Ό μννλ€.
- νμ] κ°μ²΄ instanceof Type
- κ°μ²΄κ° ν΄λΉ νμ μ΄λ©΄ true, ν΄λΉ νμ μ΄ μλλ©΄ false
- μ£Όμ μ¬ν : νκ²μ¬ν λμλ sub νμ λΆν° κ²μ¬ν΄μΌ νλ€.
πμΆμ ν΄λμ€(abstract class)μ μΈν°νμ΄μ€(interface)
πμΆμ ν΄λμ€
μμ ν΄λμ€μμ λ°λμ μ¬μ μν΄μ μ¬μ©λκΈ° λλ¬Έμ μ‘°μμ ꡬνμ΄ λ¬΄μλ―Έν λ©μλλ‘, ꡬνλΆκ° μλ€λ μλ―Έλ‘ abstract ν€μλλ₯Ό λ©μλ μ μΈλΆμ μΆκ°νλ€.
⇒abstract method design pattern
μΆμ(abstract)ν΄λμ€λ μμ μ μ©μ ν΄λμ€λ‘, μμ ν΄λμ€λ abstract methodλ₯Ό λ°λμ μ¬μ μν μ± μμ κ°μ§λ€. ν΄λμ€μ ꡬνλΆκ° μλ λ©μλκ° μμΌλ―λ‘ κ°μ²΄λ₯Ό μμ±ν μ μλ€.
μ¦, abstract ν΄λμ€λ ꡬνμ κ°μ λ₯Ό ν΅ν΄ νλ‘κ·Έλ¨μ μμ μ±μ ν₯μμν€λ μν μ νλ€.
μ¬μ©λͺ©μ
- λ€νμ±μ μν΄μ κ°λ³κ² μμν΄μ μ¬μ©νκ³ μΆμ λ μ¬μ©νλ€.
- μ±λ₯μ νλ₯Ό μ€μΌ μ μλ€.
- μ€κ³μ 무쑰건 overrideν΄μΌνλ€λ©΄ μ μ΄ν λͺ©μ μΌλ‘ μ¬μ©ν μ μλ€.
πInterface
μΈν°νμ΄μ€λ μ΅κ³ μμ€μ μΆμν λ¨κ³λ‘, μΌλ° λ©μλλ λͺ¨λ abstract ννμ΄λ€.
- JDK 8μμ default methodμ static method μΆκ°λμλ€.
νν: ν΄λμ€μ μ μ¬νκ² interface ν€μλλ‘ μ μΈνλ€.
λ©€λ² κ΅¬μ±
- λͺ¨λ λ©€λ²λ³μλ public static finalμ΄λ©° μλ΅κ°λ₯νλ€.
- λͺ¨λ λ©μλλ public abstractμ΄λ©° μλ΅κ°λ₯νλ€.
μΈν°νμ΄μ€ μμ
- ν΄λμ€μ λ§μ°¬κ°μ§λ‘ μΈν°νμ΄μ€λ extendsλ₯Ό μ΄μ©ν΄ μμμ΄ κ°λ₯νλ€.
- ν΄λμ€μ λ€λ₯Έ μ μ μΈν°νμ΄μ€λ λ€μ€ μμμ΄ κ°λ₯νλ€λ μ μ΄λ€.
public interface Heroable extends Fightable, Transformable{}
- ν΄λμ€λ ν·κ°λ¦΄ λ©μλ ꡬνμ΄ μμμ§λ§, μΈν°νμ΄μ€λ λ©μλ ꡬν μμ²΄κ° μκΈ° λλ¬Έμ ν·κ°λ¦΄ μΌμ΄ μλ€.
- implementsν ν΄λμ€λ λͺ¨λ abstract λ©μλλ₯Ό overrideν΄μ ꡬννκ±°λ ꡬννμ§ μμ κ²½μ° abstract ν΄λμ€λ₯Ό νμν΄μΌ νλ€.
μΈν°νμ΄μ€μ νμμ±
- ꡬνμ κ°μ λ‘ νμ€ν μ²λ¦¬ → μμ¬μ΄ λͺ¨λ κ΅μ²΄ μ§μ
default method
μΈν°νμ΄μ€μ μ μΈλ ꡬνλΆκ° μλ μΌλ° λ©μλ
→default λ©μλλ abstractκ° μλκΈ° λλ¬Έμ λ°λμ ꡬνν΄μΌν νμμ±μ΄ μμ΄μ§λ€.
- default methodμ μΆ©λ
- JDK 1.7κΉμ§λ ꡬνλΆκ° μμμΌλ―λ‘ μΆ©λμ΄ μμμΌλ, JDK 1.8λΆν°λ default methodλ 무μλλ€.
πSingleton ν¨ν΄
ν΄λΉ ν΄λμ€λ‘λΆν° λ¨ νλμ κ°μ²΄λ₯Ό μμ±ν κ²μ 보μ₯νλ ν¨ν΄
κ·μΉ
- μμ±μμ access modifierλ privateμΌλ‘ μ μΈν΄μΌ νλ€.
- λ΄λΆμμ μμ±ν΄μ κ°μ²΄λ₯Ό μ λ¬ν static λ©μλ μ 곡ν΄μΌ νλ€.
- λ΄λΆμμ μμ±λ κ°μ²΄λ staticμΌλ‘ μ μΈνλ€.
class MySingleton{
private static MySingleton instance = new MySingleton();
private MySingleton() {}
public static MySingleton getInstance() {
// synchronized (MySingleton.class) {
// if(instance == null) {
// instance = new MySingleton();
// }
// }
return instance;
}
}
public class SingletonTest {
public static void main(String[] args) {
MySingleton instance1 = MySingleton.getInstance();
MySingleton instance2 = MySingleton.getInstance();
System.out.println(instance1==instance2); //true
}
}
'κΈ°ν > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
JVM (0) | 2024.10.30 |
---|---|
JAVA(2) (0) | 2024.01.28 |
[λμμΈν¨ν΄]Iterator Pattern (0) | 2021.12.02 |
[Design Pattern]Adapter Pattern (0) | 2021.11.16 |
[Design Pattern]Command Pattern (0) | 2021.11.16 |