πŸ“š TIL 7일차

temprmnΒ·2023λ…„ 5μ›” 23일
0
post-thumbnail

였늘 μ£Όμš” 사항 (5/23, ν™”μš”μΌ)

  1. μΌκ°„νšŒκ³ (TIL)
  2. Java 문법 ν•™μŠ΅

미리보기λ₯Ό λΉ„μ›Œλ‘κΈ°μ—” μ’€ κ·Έλž˜μ„œ TIL/WILμ—λŠ” λ‚΄κ°€ 직접 찍고 λ³΄μ •ν•œ 사진을 μ“°κ³  μžˆλŠ”λ°, λ‹€λ₯Έ μ‚¬λžŒλ“€μ€ μ‹¬ν”Œν•œ 미리보기 이미지λ₯Ό 직접 λ§Œλ“œλŠ” 것 κ°™λ‹€!

λ‚΄κ°€ λ„ˆλ¬΄ 감성 λΈ”λ‘œκ±°κ°€ λ˜μ–΄κ°€λŠ” 건 μ•„λ‹Œμ§€...

μΌκ°„νšŒκ³ (TIL)에 λŒ€ν•œ κ³ λ―Ό

아침에 νŠΉκ°•μ„ λ“€μœΌλ©΄μ„œ λ‚΄κ°€ μΌκ°„νšŒκ³ (TIL)λ₯Ό μž‘μ„±ν•˜λŠ” 방식에 λŒ€ν•΄ λ˜λŒμ•„λ³΄λŠ” μ‹œκ°„μ„ 잠깐 κ°€μ‘Œλ‹€. μžμŠ΅μ„ ν•  λ•ŒλŠ” κ³΅λΆ€ν•œ λ‚΄μš©μ„ μš”μ•½-μ •λ¦¬λ§Œ ν•˜λŠ”κ²Œ ν˜„μž¬μ˜ κ°€μž₯ 큰 문제인 것 κ°™λ‹€. 회고라기 λ³΄λ‹€λŠ” κ°•μ˜λ…ΈνŠΈλ₯Ό μ“°λŠ” λŠλ‚Œ.

곡뢀λ₯Ό ν•˜λ©΄μ„œ μ •λ¦¬ν•˜λ‹€ 보면 ν”Όκ³€ν•΄μ Έμ„œ... ν•˜λ£¨μ˜ 끝으둜 갈 수둝 힘이 λΉ μ§€λŠ” κ²½ν–₯이 μžˆλŠ”λ°, λ‚΄ 주관을 λ‹΄μ•„μ„œ μ½”λ“œλ₯Ό 직접 μž‘μ„±ν•΄λ³΄κ±°λ‚˜, 이해가 μ•ˆλ˜λŠ” 뢀뢄을 더 파고 λ“€μ–΄λ³΄λŠ” 것도 방법이 될 수 μžˆμ„ 것 κ°™λ‹€.

그리고 회고λ₯Ό μ“°λŠ” 것에 μ§‘μ€‘ν•΄μ„œ 여기에 λ„ˆλ¬΄ νž˜μ„ λΉΌλŠ” 건 μ•„λ‹Œμ§€μ— λŒ€ν•œ 고민도 빼놓을 수 μ—†λ‹€. κ°„κ²°ν•˜κ²Œ μ μ—ˆλ˜ μ‹œμ ˆλ„ μžˆμ—ˆμ§€λ§Œ, λ‚΄κ°€ μ μ—ˆλ˜ μΌμ§€λ‚˜ 회고λ₯Ό λ‹€μ‹œ λŒμ•„λ³Ό λ•Œ 기얡이 잘 λ‚˜μ§€ μ•Šμ•˜κ³ , λ‹€λ₯Έ μž‘μ—…μ„ ν•  λ•Œλ„ 큰 도움이 λ˜μ§€ μ•Šμ•˜λ˜ 적이 λ§Žμ•˜λ‹€. 이λ₯Ό λ³΄μ™„ν•˜κΈ° μœ„ν•΄ 기얡이 κ°•ν•˜κ²Œ λ‚¨μ•„μžˆμ„ λ•Œ μ΅œλŒ€ν•œ μƒμ„Έν•˜κ²Œ 적도둝 ν•˜κ³  μžˆλ‹€. 그런데 μƒμ„Έν•˜κ²Œ μ λ‹€λ³΄λ‹ˆ 남듀보닀 μ‹œκ°„μ΄ 많이 κ±Έλ¦°λ‹€λŠ” λ¬Έμ œκ°€ 생겨버린 것이닀... μƒμ„Έν•˜κ²Œ μ λŠ” 건 ν¬κΈ°ν•˜κ³  싢지 μ•Šμ•„μ„œ, 맀일 λ‹€μ–‘ν•œ λ°©μ•ˆμ— λŒ€ν•΄ κ³ λ―Όν•΄λ³΄λ©΄μ„œ 쒋은 ν•©μ˜μ μ„ 찾을 수 μžˆμ—ˆμœΌλ©΄ μ’‹κ² λ‹€.

(ν•œ 쀄 μš”μ•½: ν•œλ™μ•ˆ TIL둜 μ‹€ν—˜ν•˜κ²Œ 될 것 κ°™λ‹€)

μƒμˆ˜ (final)

일반적으둜 μƒμˆ˜λ₯Ό μ •μ˜ν•  λ•Œ μ‚¬μš©ν•˜λŠ” ν‚€μ›Œλ“œμΈ final에 λŒ€ν•œ 정리λ₯Ό ν•΄λ³΄μ•˜λ‹€.

μ›λž˜λŠ” ν‚€μ›Œλ“œλ§Œ λ©”λͺ¨ν•΄λ‘λ €κ³  ν–ˆλŠ”λ°... 인터넷에 λŒμ•„λ‹€λ‹ˆλŠ” μ˜ˆμ œμ—μ„œ μœ„ν™”κ°μ΄ λŠκ»΄μ Έμ„œ(?) static final이 μ™œ κ΄€λ‘€κ°€ λ˜μ—ˆλŠ”μ§€μ— λŒ€ν•œ ν•™μŠ΅λ„ μΆ”κ°€μ μœΌλ‘œ ν•΄λ³΄μ•˜λ‹€.

[Java] final: μ™œ static final이라고 μ¨μš”?

κ·Έμ € final ν‚€μ›Œλ“œλ₯Ό μžŠμ§€ 말자! λŠ” μ˜λ„λ‘œ μ‹œμž‘ν–ˆμ§€λ§Œ μ™Έμš°λŠ” κ±Έ λ„˜μ–΄μ„œμ„œ μš©λ„κΉŒμ§€ μΆ”κ°€λ‘œ ν•™μŠ΅ν•  수 μžˆμ—ˆλ˜... μœ μ΅ν•œ μ‹œκ°„ πŸ‘€...

클래슀

μΈμŠ€ν„΄μŠ€ 멀버 & 클래슀 멀버

이런 κ²ƒκΉŒμ§€ μ‹ κ²½μ“°λ©΄μ„œ μ½”λ“œλ₯Ό μž‘μ„±ν•œ 적은 μ—†μ–΄μ„œ 도움이 많이 λ˜μ—ˆλ‹€. μ˜ˆμ‹œλ„ 직접 μž‘μ„±ν•΄λ³΄λ©΄μ„œ μ—΄μ‹¬νžˆ μ •λ¦¬ν–ˆκΈ° λ•Œλ¬Έμ— νŽ˜μ΄μ§€λ₯Ό λ”°λ‘œ λΆ„λ¦¬ν–ˆλ‹€ (γ…Žγ…Ž)

[Java] μΈμŠ€ν„΄μŠ€ 멀버 & 클래슀 멀버

this와 this()

πŸ“Œ this = 객체(μΈμŠ€ν„΄μŠ€) μžμ‹ 

int value;

public Example(int value) {
	
    this.value = value;
}

λ°˜ν™˜ νƒ€μž…μ΄ 객체(μΈμŠ€ν„΄μŠ€) μžμ‹ μ˜ 클래슀 νƒ€μž…μ΄λΌλ©΄, thisλ₯Ό μ‚¬μš©ν•΄ μΈμŠ€ν„΄μŠ€ 슀슀둜의 μ£Όμ†Œλ₯Ό λ°˜ν™˜ν•  수 μžˆλ‹€.

public Example returnInstance() {

	return this;
}

πŸ“Œ this() = 객체(μΈμŠ€ν„΄μŠ€) μžμ‹ μ˜ μƒμ„±μžλ₯Ό 호좜

⚠️ this() ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄μ„œ λ‹€λ₯Έ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•  λ•ŒλŠ” λ°˜λ“œμ‹œ ν•΄λ‹Ή μƒμ„±μžμ˜ 첫 쀄에 μž‘μ„±λ˜μ–΄μ•Όν•œλ‹€. 그렇지 μ•ŠμœΌλ©΄ 컴파일 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

String tag;	// μƒν’ˆλͺ…
int cost;	// 가격
int count;	// 개수

public Mart(String tag) {

	/* 
    * μ•„λž˜μ²˜λŸΌ ν•œ μ€„λ‘œ ν•΄κ²°ν•  수 μžˆλ‹€.
	this.tag = tag;
    this.cost = 10000;
    this.count = 1;
    */
    
    // μƒμ„±μžλ₯Ό 호좜
    this(tag, 10000, 1);
}

public Mart(String tag, int cost, int count) {

	this.tag = tag;
    this.cost = cost;
    this.count = count;
}

super와 super()

πŸ“Œ super = λΆ€λͺ¨ 클래슀의 멀버λ₯Ό μ°Έμ‘°

/* λΆ€λͺ¨ 클래슀 */

String tag;	// μƒν’ˆλͺ…
int cost;	// 가격
int count; 	// 개수


/* μžμ‹ 클래슀 */

String tag = "Melon";	// μƒν’ˆλͺ…
int cost = 10000;		// 가격
int count = 1;		 	// 개수

public void buyProduct(String tag, int cost, int count) {
	
	super.tag = tag;		// tagλŠ” λΆ€λͺ¨ ν•„λ“œμ— set
    super.cost = cost;		// cost도 λΆ€λͺ¨ ν•„λ“œμ— set
    this.count = count;		// countλŠ” μžμ‹ ν•„λ“œμ— set

}

πŸ“Œ super() = λΆ€λͺ¨ 클래슀의 μƒμ„±μžλ₯Ό 호좜

⚠️ this() ν‚€μ›Œλ“œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ, super() ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄μ„œ λ‹€λ₯Έ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•  λ•ŒλŠ” λ°˜λ“œμ‹œ ν•΄λ‹Ή μƒμ„±μžμ˜ 첫 쀄에 μž‘μ„±λ˜μ–΄μ•Όν•œλ‹€. 그렇지 μ•ŠμœΌλ©΄ 컴파일 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

/* λΆ€λͺ¨ 클래슀 μƒμ„±μž */

public Warehouse(String tag, int cost, int count) {

	this.tag = tag;
    this.cost = cost;
    this.count = count;

}


/* μžμ‹ 클래슀 μƒμ„±μž */
public Mart(String tag, int cost, int count) {

	super(tag, cost, count);
    
}

λ‹€ν˜•μ„±: instance of

instance ofλŠ” 객체 νƒ€μž…μ„ ν™•μΈν•˜λŠ” μ—°μ‚°μžλ‘œ, ν˜•λ³€ν™˜ κ°€λŠ₯ μ—¬λΆ€λ₯Ό 확인해 μ°Έ(True) ν˜Ήμ€ 거짓(False)λ₯Ό λ°˜ν™˜ν•œλ‹€. 주둜 상속 관계(λ‹€ν˜•μ„±)μ—μ„œ λΆ€λͺ¨ 객체인지, μžμ‹ 객체인지 ν™•μΈν•˜λŠ”λ° μ‚¬μš©λœλ‹€.

{λŒ€μƒ 객체 λͺ…} instanceof {클래슀 λͺ…}의 ν˜•νƒœλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.

class Parent {}
class Child extends Parent {}

public class Main {

	public static void main(String[] args) {

		Parent p = new Parent();
        Child c = new Child();
        
        system.out.println(p instanceof Parent);	// κ²°κ³Ό: true, λΆ€λͺ¨ 본인
        system.out.println(c instanceof Parent);	// κ²°κ³Ό: true, μžμ‹ is-a λΆ€λͺ¨ O
        system.out.println(p instanceof Child);		// κ²°κ³Ό: false, μžμ‹ is-a λΆ€λͺ¨ X
        system.out.println(c instanceof Child);		// κ²°κ³Ό: true, μžμ‹ 본인
        
	}
}

이해가 νž˜λ“€λ‹€λ©΄ "instancofλŠ” ν•΄λ‹Ή ν΄λž˜μŠ€κ°€ μžκΈ°μ§‘μ΄ λ§žλŠ”μ§€ 확인해 μ€€λ‹€"κ³  μƒκ°ν•˜λ©΄ 이해가 쉽닀.

package와 import

πŸ“Œ package = 클래슀의 μΌλΆ€λΆ„μ΄λ©΄μ„œ 클래슀λ₯Ό 식별해 μ£ΌλŠ” μš©λ„

C++, C#의 namecase와도 μœ μ‚¬ν•œ κ°œλ…μ΄λΌκ³  ν•œλ‹€. νŒ¨ν‚€μ§€λ₯Ό μ„ μ–Έν•  λ•ŒλŠ” μ•„λž˜μ™€ 같은 ν˜•νƒœλ‘œ μ‚¬μš©ν•œλ‹€.

package {μƒμœ„νŒ¨ν‚€μ§€}.{ν•˜μœ„νŒ¨ν‚€μ§€};
pacakge week2.day7;

public class Camp {
	public void running() {
    	System.out.println("Help!");
    }
}

μ„ μ–Έν•œ package에 μž‘μ„±λœ 클래슀λ₯Ό ν•΄λ‹Ή package λ°”κΉ₯μ—μ„œ μ‚¬μš©ν•˜λ €λ©΄, importκ°€ ν•„μš”ν•˜λ‹€.

πŸ“Œ import = λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— μžˆλŠ” 클래슀λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ μ‚¬μš©

C++, C#의 using과도 μœ μ‚¬ν•œ κ°œλ…μ΄λΌκ³  ν•œλ‹€. νŒ¨ν‚€μ§€λ₯Ό μž„ν¬νŠΈ ν•  λ•ŒλŠ” μ•„λž˜μ™€ 같은 ν˜•νƒœλ‘œ μ‚¬μš©ν•œλ‹€.

import {μƒμœ„νŒ¨ν‚€μ§€}.{ν•˜μœ„νŒ¨ν‚€μ§€}.{클래슀λͺ…};
import {μƒμœ„νŒ¨ν‚€μ§€}.{ν•˜μœ„νŒ¨ν‚€μ§€}.*;
package week2.main;

import week2.day7.Camp;

public class Main {
	public static void main(String[] args) {
        Camp camp = new Camp();
        camp.running(); // "Help!" 좜λ ₯
        
	}
}

import ν•  λ•Œ, 클래슀λͺ…은 μƒλž΅ν•˜κ³  *λ₯Ό μ‚¬μš©ν•˜μ—¬ ν‘œν˜„ν•˜λ©΄, νŒ¨ν‚€μ§€μ— ν¬ν•¨λœ λͺ¨λ“  클래슀λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

μΈν„°νŽ˜μ΄μŠ€

λ¨Όμ € (1) μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ„±ν•˜κ³  β†’ κ·Έ (2) μΈν„°νŽ˜μ΄μŠ€λ₯Ό implements ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄ κ΅¬ν˜„ν•œλ‹€.

(1) μΈν„°νŽ˜μ΄μŠ€ 생성

  • λͺ¨λ“  λ©€λ²„λ³€μˆ˜λŠ” public static final μ΄μ–΄μ•Όν•œλ‹€. (μƒλž΅ κ°€λŠ₯)
  • λͺ¨λ“  λ©”μ„œλ“œλŠ” public abstract μ΄μ–΄μ•Όν•œλ‹€. (μƒλž΅ κ°€λŠ₯, static λ©”μ„œλ“œμ™€ default λ©”μ„œλ“œλŠ” μ˜ˆμ™Έ)
public interface MarketInterface {

	public static final String tag = "MELON";
	public int value = 10000;
    int count = 10;
    
    public abstract void sell() {}
    void buy() {}
}

(2) μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„

  • μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•  λ•ŒλŠ” implements ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.
public class Mart implements MarketInterface { 
	
    // 좔상 λ©”μ„œλ“œ μ˜€λ²„λΌμ΄λ”©
	@Override
	public void sell() {
		// sell something...
	}
    
    @Override
    public void buy() {
    	// buy something...        
    }
}

μΈν„°νŽ˜μ΄μŠ€ : 상속

μΈν„°νŽ˜μ΄μŠ€ κ°„μ˜ 상속이 κ°€λŠ₯ν•˜λ‹€. 이 λ•ŒλŠ” 클래슀 상속과 λ™μΌν•˜κ²Œ extends ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜κ³ , 닀쀑 상속이 κ°€λŠ₯ν•˜λ‹€.

μΈν„°νŽ˜μ΄μŠ€ Cμ—λŠ” 아무것도 μ„ μ–Έ λ˜μ–΄μžˆμ§€ μ•Šμ§€λ§Œ, μΈν„°νŽ˜μ΄μŠ€ A와 Bλ₯Ό μƒμ†λ°›μ•˜κΈ° λ•Œλ¬Έμ—, 결과적으둜 C만 μƒμ†λ°›μœΌλ©΄ A와 Bμ—μ„œ μ„ μ–Έλœ 좔상 λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•  수 μžˆλ‹€.

interface A {
    void a();
}
interface B {
    void b();
}

// μΈν„°νŽ˜μ΄μŠ€ A와 Bλ₯Ό 닀쀑 상속 받은 μΈν„°νŽ˜μ΄μŠ€ C
interface C extends A, B { }
public class Example implements C {

	// μΈν„°νŽ˜μ΄μŠ€ A의 좔상 λ©”μ„œλ“œ a()
    @Override
    public void a() {
        System.out.println("Test : A");
    }

	// μΈν„°νŽ˜μ΄μŠ€ B의 좔상 λ©”μ„œλ“œ b()
    @Override
    public void b() {
		System.out.println("Test : B");
    }
}

μΈν„°νŽ˜μ΄μŠ€μ˜ κ΅¬ν˜„κ³Ό 상속은 일반 클래슀 상속과도 ν•¨κ»˜ μ‚¬μš©λ  수 μžˆλ‹€!

public class Child extends Parents implements ExInterface { }

상속과 좔상을 λͺ¨λ‘ μ μš©ν•˜λ©΄ 클래슀의 머리 뢀뢄은 μœ„μ™€ 같은 ν˜•νƒœκ°€ λœλ‹€



β˜•οΈ μ˜€λŠ˜λ„ 1일 1컀피 μ™„λ£Œ!

κ³΅λΆ€ν•œ λ‚΄μš©λ“€μ€ λ”°λ‘œ κΈ€ νŒŒμ„œ 적어두고, μ—¬κΈ°μ—λŠ” 링크만 κ±Έμ–΄λ‘˜κΉŒ? λΌλŠ” 고민을 맀일 ν•˜κ³  μžˆλ‹€. (μ•„λ¬΄λž˜λ„ 가독성이 λ³„λ‘œμΈ 것 κ°™μ•„μ„œ)

profile
`ISFJ` T 49% F 51% /

0개의 λŒ“κΈ€