πŸ““ STUDY/JAVA

λ‹€ν˜•μ„±

JuneBee 2022. 5. 17. 23:22
728x90
λ°˜μ‘ν˜•

Polymorphism

<1> μ •μ˜

λ‹€ν˜•μ„±μ΄λž€ ν•˜λ‚˜μ˜ 객체가 λ§Žμ€ ν˜•(νƒ€μž…)을 κ°€μ§ˆ 수 μžˆλŠ” μ„±μ§ˆμ΄λ‹€. λ‹€ν˜•μ„±μ€, 상속관계에 μžˆμ„ λ•Œ μ‘°μƒν΄λž˜μŠ€μ˜ νƒ€μž…μœΌλ‘œ μžμ‹ 클래슀 객체λ₯Ό 레퍼런슀 ν•  수 μžˆλ‹€.

ex) νŒ₯λΆ•μ–΄λΉ΅ is a λΆ•μ–΄λΉ΅ | μŠˆν¬λ¦ΌλΆ•μ–΄λΉ΅ is a λΆ•μ–΄λΉ΅ | ν”Όμž λΆ•μ–΄λΉ΅ is a λΆ•μ–΄λΉ΅

<2> ν™œμš©

  1. λ‹€ν˜•μ„±μœΌλ‘œ λ‹€λ₯Έ νƒ€μž…μ˜ 데이터λ₯Ό ν•˜λ‚˜μ˜ λ°°μ—΄λ‘œκ΄€λ¦¬ν•  수 μžˆλ‹€
    public ArrayList(int initialCapacity){
    	if(initialCapcity>0){this.elementData = new Object [initialCapacity];}
    	else if (initialCapacity ==0 ){this.elementData = EMPTY_ELEMENTDATA;}
    	else{throw new IllegalArgumentException ("Illegal Capcity: " + initialCapacity);}}
    
  2. λŒ€ν‘œμ μΈ 예둜, 였브젝트 클래슀λ₯Ό λ³Ό 수 μžˆλ‹€. 였브젝트 ν΄λž˜μŠ€λŠ” λͺ¨λ“  클래슀의 쑰상인데, 였브젝트의 배열은 μ–΄λ–€ νƒ€μž…μ˜ 객체라도 λ‹€ μ €μž₯ν•  수 있기 λ•Œλ¬Έμ— μžλ°”μ˜ 자료ꡬ쑰λ₯Ό κ°„λ‹¨ν•˜κ²Œ μ²˜λ¦¬ν•  수 μžˆλ‹€.
  3. λ§€κ°œλ³€μˆ˜μ˜ λ‹€ν˜•μ„±
    public void println (Object x){ //Object λ₯Ό νŒŒμ‹±ν•˜κ³  μžˆμ–΄μ„œ 좜λ ₯이 λ˜κ³ μžˆλ˜κ±°μž„
    	String s = String.valueOf(x);
    	synchronized(this){print(s); newLine();}}
    
  4. λ©”μ„œλ“œκ°€ 호좜되기 μœ„ν•΄μ„œλŠ” λ©”μ„œλ“œ 이름과 νŒŒλΌλ―Έν„°κ°€ λ§žμ•„μ•Ό ν•˜λŠ”λ°, println μ—λŠ” 무엇을 넣어도 좜λ ₯이 λœλ‹€ → μ™œκ·ΈλŸ΄κΉŒ? μ•„λž˜λŠ” println의 μ†ŒμŠ€ μ½”λ“œμ΄λ‹€

λ‹€ν˜•μ„±κ³Ό μ°Έμ‘°ν˜• 객체의 ν˜•λ³€ν™˜

λ©”λͺ¨λ¦¬μ— μžˆλ”λΌλ„ μ°Έμ‘°ν•˜λŠ” λ³€μˆ˜μ˜ νƒ€μž…μ— 따라 μ ‘κ·Όν•  수 μžˆλŠ” λ‚΄μš©μ΄ μ œν•œλœλ‹€

Method Area: 클래슀 λ‘œλ”© μ‹œ 생성 - 클래슀 자체 μ •λ³΄λ§Œ μ˜¬λΌκ°„λ‹€ JVM Stacks : static λ³€μˆ˜/ λ©”μ„œλ“œκ°€ μŒ“μΈλ‹€ Heap : non-static λ³€μˆ˜/ λ©”μ„œλ“œκ°€ μŒ“μΈλ‹€. new keyword κ°€ 쓰인 애듀이 μ—¬κΈ°λ‘œ μ˜¨λ‹€ → 독립적

 

https://junebee.tistory.com/6 μ°Έκ³ 

 

Variables

1. μƒμˆ˜ (1) μ •μ˜ μƒμˆ˜λŠ” ν•œλ²ˆ μ €μž₯ν•œ 데이터 값을 λ³€κ²½ν•  수 μ—†λ‹€ format: final datatype VARNAME; public static void main(String[] args){ //λ³€μˆ˜ int age = 30; String name = June; /*age = 20; 둜 μˆ˜μ • κ°€..

junebee.tistory.com

  1. μ°Έμ‘°ν˜• 객체의 ν˜• λ³€ν™˜ 
    1. λ¬΅μ‹œμ  μΊμŠ€νŒ… : child → super
      μžμ† νƒ€μž…μ˜ 객체λ₯Ό 쑰상 νƒ€μž…μœΌλ‘œ μ°Έμ‘°ν•  λ•Œμ—λŠ” ν˜•λ³€ν™˜ μƒλž΅μ΄ κ°€λŠ₯ν•˜λ‹€
      πŸ§Έμ‘°μƒμ˜ λͺ¨λ“  λ‚΄μš©μ΄ μžμ‹μ—κ²Œ 있기 λ•Œλ¬Έμ— κ±±μ •ν•  ν•„μš” μ—†λ‹€
    2. λͺ…μ‹œμ  μΊμŠ€νŒ… : super → child
      쑰상 νƒ€μž…μ„ μžμ†νƒ€μž…μœΌλ‘œ μ°Έμ‘°ν•  λ•Œμ—λŠ” ν˜•λ³€ν™˜ μƒλž΅μ΄ λΆˆκ°€λŠ₯ν•˜λ‹€ 쑰상을 λ¬΄μž‘μ • μžμ†μœΌλ‘œ λ°”κΏ€ 수 μ—†μœΌλ‹ˆ μ£Όμ˜ν•˜μž → instanceof μ—°μ‚°μžλ₯Ό μ΄μš©ν•˜μ—¬ μ‹€μ œ λ©”λͺ¨λ¦¬μ— μžˆλŠ” 객체가 νŠΉμ • 클래슀 νƒ€μž…μΈμ§€ boolean으둜 λ¦¬ν„΄ν•œ ν›„ true μΌλ•Œμ—λ§Œ μΊμŠ€νŒ…ν•  것

      μ•„λž˜μ˜ μ½”λ“œλŠ” super → child 둜의 ν˜•λ³€ν™˜ν•œ μ½”λ“œμ΄λ‹€. λͺ…μ‹œμ  μΊμŠ€νŒ… μ‹œ, instanceof λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‹€μ œλ‘œ μΊμŠ€νŒ…μ΄ κ°€λŠ₯ν•œμ§€ μ•„λ‹Œμ§€ 확인을 ν•˜μ§€ μ•ŠλŠλ‹€λ©΄, μžλ°”λŠ” μ•Œλ €μ£Όμ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ‹ μ€‘ν•˜κ²Œ μ¨μ•Όν•œλ‹€.
Pokemon pikachu = new Pokemon ();
if (pikachu instanceof FairyType) { FairyType ft = (FairyType) pikachu; }
//μœ„μ˜ μ½”λ“œμ²˜λŸΌ instance of λ₯Ό μ“°μ§€ μ•Šμ•˜μ„ κ²½μš°μ—λŠ”,

Pokemon phantom = new Pokemon ();
FairyType ft2 = (FairyType) phantom;
phantom.angelicKiss(); 
//compile error λ°œμƒμ΄ μ•ˆλ¨. μžμΉ«ν•˜λ©΄ 였옷 λ˜λ„€ ν•˜λ‹€κ°€ ν”„λ‘œκ·Έλž¨ λΆ€μ‹€μˆ˜λ„ μžˆλ‹€..

2. μ°Έμ‘° λ³€μˆ˜μ˜ λ ˆλ²¨μ— λ”°λ₯Έ 객체의 맴버 μ—°κ²°

   1. 상속 κ΄€κ³„μ—μ„œ 객체의 맴버 λ³€μˆ˜κ°€ 쀑볡될 λ•Œ, μ°Έμ‘°λ³€μˆ˜μ˜ νƒ€μž…μ— 따라 연결이 달라짐
  (2) μƒμ†κ΄€κ³„μ—μ„œ λ©”μ„œλ“œκ°€ 쀑볡될 λ•Œ (Method Overriding) : 무쑰건 μžμ‹ 클래슀의 λ©”μ„œλ“œκ°€ 호좜되며, μ΅œλŒ€ν•œ λ©”λͺ¨λ¦¬μ— μƒμ„±λœ 싀체 객체에 μ΅œμ ν™” 된 λ©”μ„œλ“œκ°€ λ™μž‘ν•œλ‹€ (즉, overriding 된 λ©”μ„œλ“œκ°€ μžˆλ‹€λ©΄, κ·Έ λ©”μ„œλ“œλ₯Ό 좜λ ₯ν•˜λŠ” 것)

μ•„λž˜μ˜ μ½”λ“œλŠ” λ‘˜λ‹€ 같은 κ²°κ³Όλ₯Ό 좜λ ₯ν•œλ‹€. μ΄λŠ” println 의 toString() override λ•Œλ¬Έμ΄λ‹€

System.out.println(Phantom.toString());
System.out.println(Phantom);

<3> Generics

GenericsλŠ” λ‹€μ–‘ν•œ νƒ€μž…μ˜ 객체λ₯Ό λ‹€λ£¨λŠ” λ©”μ„œλ“œ, μ»¬λ ‰μ…˜ ν΄λž˜μŠ€μ—μ„œ 컴파일 μ‹œμ— νƒ€μž…μ„ μ²΄ν¬ν•œλ‹€ 즉, 미리 ν˜•λ³€ν™˜μ„ ν•˜μ§€ μ•Šμ•„λ„ μ‚¬μš©ν•  수 있게 ν•˜λŠ” 것이닀.

ν‘œν˜„

  1. 클래슀 λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€ μ„ μ–Έ μ‹œ <> 에 νƒ€μž… νŒŒλΌλ―Έν„°λ₯Ό ν‘œμ‹œ
className : Raw Type
className<T> : Generic Type
public class ClassName<T> {}
public interface InterfaceName<T> {}

   2. νƒ€μž… νŒŒλΌλ―Έν„° μž„μ˜μ˜ μ°Έμ‘°ν˜• νƒ€μž…μ„ λœ»ν•¨

 πŸ€¦πŸ»‍♀️ T : reference Type
      E : Element
      K : Key
      V : Value
public class ArrayList<E> extends AbstractList<E> implements List<E>, RnadomAccess, Cloneable {...}
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Serializable{...}

   3. 객체 생성 λ³€μˆ˜μͺ½κ³Ό 생성 μͺ½μ˜ νƒ€μž…μ€ λ°˜λ“œμ‹œ κ°™μ•„μ•Ό ν•œλ‹€

ClassName <String> generic1 = new ClassName<String>();
List<Integer> generic2 = new ArrayList<Integer>();
List<String> generic3 = new ArrayList<Character>(); //ν‹€λ¦Ό

μ˜ˆμ‹œ

public class GenericClass<T> {
private T something;
public T getSomething(){return something;}
public void setSome(T something){this.something = something;}}
public class Test{
private static void genericTest(){
//< > μ•ˆμ— μ›ν•˜λŠ” νƒ€μž…μ„ λ„£κΈ°
GenericClass <String> gStr = new GnericClass<>(); //String 이라고 μ •μ˜ν•˜λ©΄..?
GenericClass <Integer> gInt = new GenericClass<> (); //Integer도 κ°€λŠ₯,,?!
//μ›ν•˜λŠ” νƒ€μž… μ§‘μ–΄ λ„£κΈ°
gStr.setsomething("String something이라고 μ •ν•΄μ Έμ„œ λ‚˜μ™€..!");}
gInt.setsomething("Integer something 이라고 suggest 되!");
//μ›ν•˜λŠ” νƒ€μž… 끄집어 λ‚΄κΈ°
String gStr2 = gStr.getSomething();
System.out.println(gStr2); //였 λΊ„λ•Œλ„ string 만 κ°€λŠ₯ν•΄μ‘Œμ–΄ !
}
} //컴파일 νƒ€μž…μ— νƒ€μž… νŒŒλΌλ―Έν„°λ“€μ΄ λŒ€μž…λœ νƒ€μž…μœΌλ‘œ λŒ€μ²΄λ¨!

μ‚¬μš©

  1. Type Parameter 의 μ œν•œ ν•„μš”μ— 따라 ꡬ체적인 νƒ€μž… μ œν•œμ΄ ν•„μš”ν•˜λ‹€.
    ex: 계산기 ν”„λ‘œκ·Έλž¨ κ΅¬ν˜„ μ‹œ Number μ΄ν•˜μ˜ νƒ€μž… (byte, short, interger..) 둜만 μ œν•œν•΄μ•Ό ν•œλ‹€
    type parameter μ„ μ–Έ λ’€ extends 와 ν•¨κ»˜ μƒμœ„ νƒ€μž…μ„ λͺ…μ‹œν•˜μ—¬ μ œν•œν•œλ‹€.
class Number< T extends Number>{} //TλŠ” Number λ₯Ό 상속 λ°›μ•„μ•Ό ν•œλ‹€

   2. μΈν„°νŽ˜μ΄μŠ€λ‘œ μ œν•œν•  κ²½μš°λ„ extends μ‚¬μš©

   3. ν΄λž˜μŠ€μ™€ ν•¨κ»˜ μΈν„°νŽ˜μ΄μŠ€ μ œμ•½ 쑰건을 μ΄μš©ν•  경우 & 둜 μ—°κ²°

class TypeRestrcit1 <T extends Cloneable> ();
class TypeRestrict2 <T extends Number & Cloneable & Comparable<String>>{}
728x90
λ°˜μ‘ν˜•