관리 메뉴

Tech Log πŸ› οΈ

μΌ„νŠΈλ°± κ΅¬ν˜„ νŒ¨ν„΄ 8μž₯ - λ©”μ†Œλ“œ λ³Έλ¬Έ

μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

μΌ„νŠΈλ°± κ΅¬ν˜„ νŒ¨ν„΄ 8μž₯ - λ©”μ†Œλ“œ

sehaan 2023. 10. 7. 12:09

 

μ‘°ν•© λ©”μ†Œλ“œ 

좔상화 μˆ˜μ€€μ΄ λΉ„μŠ·ν•œ λ©”μ†Œλ“œ 호좜둜 ν•˜λ‚˜μ˜ λ©”μ†Œλ“œλ₯Ό κ΅¬μ„±ν•˜λΌ

 

κ΄€λ ¨λœ μ½”λ“œλ§Œ λͺ¨μ•„놓고 관련성이 λ–¨μ–΄μ§€λŠ” μ½”λ“œλŠ” 뢄리!

 

λ©”μ†Œλ“œλ₯Ό ꡬ성할 λ•ŒλŠ” 좔츑이 μ•„λ‹Œ 사싀에 κ·Όκ±°ν•˜λΌ

-> 일단 λ™μž‘ν•˜λŠ” μ½”λ“œλ₯Ό λ§Œλ“€κ³  ꡬ성 방식 κ²°μ •

 

μ˜λ„ μ œμ‹œν˜• 이름

λ©”μ†Œλ“œμ˜ 이름을 ν†΅ν•΄μ„œ μ˜λ„λ₯Ό μ „λ‹¬ν•˜κ³  κ·Έ μ™Έ μ •λ³΄λŠ” λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ μ „λ‹¬ν•˜λΌ

 

Customer.linearSearch(String id) // x
Customer.find(String id) // o

 

λ©”μ†Œλ“œ κ°€μ‹œμ„±

λ©”μ†Œλ“œλ₯Ό 적게 λ…ΈμΆœμ‹œν‚€λ©΄ μœ μ—°μ„±μ—μ„œ 이득을 얻을 수 있음

κ°€μ‹œμ„±μ„ 선택할 λ•Œ κ³ λ €ν•΄μ•Όν•  사항 두가지

1. 미래의 μœ μ—°μ„±

2. 객체 μ‚¬μš© λΉ„μš©

 

λ¨Όμ € μ œν•œμ μΈ κ°€μ‹œμ„±μ„ μ„ νƒν•˜κ³  ν•„μš”μ— 따라 μ°¨μΈ° ν™•μž₯μ‹œν‚€μž !

 

μ˜€λ²„λ‘œλ“œ

λ©”μ†Œλ“œ μ˜€λ²„λ‘œλ“œλŠ” νŒŒλΌλ―Έν„° νƒ€μž…λ§Œ λ‹€λ₯Ό 뿐, 같은 연산을 μˆ˜ν–‰ν•΄μ•Όν•œλ‹€.

μ˜λ„κ°€ λ‹€λ₯΄λ‹€λ©΄ μƒˆλ‘œμš΄ 이름을 κ°–λŠ” λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μž !!

 

λ©”μ†Œλ“œ λ°˜ν™˜ νƒ€μž…

ꡬ상 ν΄λž˜μŠ€κ°€ 같은 μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ³΅μœ ν•œλ‹€λ©΄ μœ μ‚¬μ κ³Ό 차이점을 λͺ…ν™•ν•˜κ²Œ λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.

 

λ©”μ†Œλ“œ 주석

주석은 정보λ₯Ό μ€‘λ³΅μœΌλ‘œ λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.

λ”°λΌμ„œ μ½”λ“œλ§ŒμœΌλ‘œ λΆ„λͺ…ν•˜μ§€ μ•Šμ€ μ •λ³΄λŠ” 주석을 μ‚¬μš©ν•˜λΌ

 

ν•˜μ§€λ§Œ 주석은 μ½”λ“œμ™€μ˜ 일관성을 μœ μ§€ν•˜κΈ° μœ„ν•΄ λ…Έλ ₯이 λ“ λ‹€. 

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 이런 λ…Έλ ₯을 κ°μ•ˆν•  만큼 κ°€μΉ˜κ°€ μžˆμ–΄μ•Όν•œλ‹€.

 

λ„μš°λ―Έ λ©”μ†Œλ“œ

λ‹Ήμž₯ 관련도가 λ–¨μ–΄μ§€λŠ” μ„ΈλΆ€ κ΅¬ν˜„μ„ 숨기고 λ©”μ†Œλ“œ 이름을 톡해 ν”„λ‘œκ·Έλž˜λ¨Έμ˜ μ˜λ„λ₯Ό λ‚˜νƒ€λƒ„μœΌλ‘œμ¨,

λ³΅μž‘ν•˜κ³  κ±°λŒ€ν•œ μ—°μ‚° μ½”λ“œλ₯Ό 읽기 μ’‹κ²Œ λ§Œλ“€ 수 μžˆλ‹€.

 

디버그 좜λ ₯ λ©”μ†Œλ“œ

toString() λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ 객체λ₯Ό λ¬Έμžμ—΄λ‘œ λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.

ν”„λ‘œκ·Έλž˜λ¨Έμ—κ²Œ μœ μš©ν•œ 객체의 정보λ₯Ό μ•Œλ €μ£ΌκΈ° μœ„ν•΄ μ‚¬μš©ν•˜μž !

 

λ³€ν™˜

λ³€ν™˜ λ©”μ†Œλ“œ

μœ μ‚¬ν•œ νƒ€μž…μ˜ 객체 κ°„ λ³€ν™˜μ„ ν‘œνš¬ν•˜κΈ° μœ„ν•΄, κΈ°μ‘΄ 객체에 λ©”μ†Œλ“œλ₯Ό μΆ”κ°€ν•΄μ„œ λ³€ν™˜μ„ λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.

 

class Polar {
	Cartesian asCartesian() {
    	...
    }
}

 

λ³€ν™˜ μƒμ„±μž

원본 객체λ₯Ό νŒŒλΌλ―Έν„°λ‘œ μ·¨ν•΄μ„œ λŒ€μƒ 객체λ₯Ό λ°˜ν™˜ν•œλ‹€.

ꡬ상 ν΄λž˜μŠ€κ°€ μ•„λ‹Œ 클래슀λ₯Ό λ°˜ν™˜ν•΄μ„œ λ³€ν™˜μ„ κ΅¬ν˜„ν•˜κ³  μ‹Άλ‹€λ©΄ , λ³€ν™˜ μƒμ„±μžλ₯Ό 쒀더 일반적인 νƒ€μž…μ„ λ°˜ν™˜ν•˜λŠ” 곡μž₯ λ©”μ†Œλ“œλ‘œ ν‘œν˜„ν•  수 μžˆλ‹€.

생성

μ˜λ―ΈμžˆλŠ” 객체 생성을 μœ„ν•΄μ„œλŠ” λͺ…ν™•ν•˜κ³  직접적인 ν‘œν˜„κ³Ό μœ μ—°μ„± μ‚¬μ΄μ—μ„œ κ· ν˜•μ„ μž‘μ•„μ•Όν•œλ‹€.

 

μ™„κ²° μƒμ„±μž

객체λ₯Ό μƒμ„±ν•˜λŠ” 방법이 μ—¬λŸ¬κ°€μ§€λΌλ©΄ , 각 κ²½μš°λ§ˆλ‹€ μ œλŒ€λ‘œ 된 객체λ₯Ό λ°˜ν™˜ν•˜λŠ” μƒμ„±μžλ₯Ό μ œκ³΅ν•˜λΌ

 

niew Rectangle(0,0,50,200)

 

이와같이 4개의 인자λ₯Ό μ·¨ν•˜λŠ” μƒμ„±μžκ°€ μžˆλ‹€λ©΄, 4개의 μΈμžκ°€ ν•„μš”ν•œ κ²ƒμ΄λΌλŠ” 사싀을 λ°”λ‘œ μ•Œ 수 μžˆλ‹€.

 

곡μž₯ λ©”μ†Œλ“œ

곡μž₯λ©”μ†Œλ“œλŠ” 좔상 νƒ€μž…μ„ λ°˜ν™˜ν•  수 있고 λ©”μ„œλ“œ 넀이밍을 톡해 μ˜λ„λ₯Ό λͺ…ν™•ν•˜κ²Œ ν•  수 μžˆλ‹€.

ν•˜μ§€λ§Œ λ³΅μž‘μ„±μ΄ μ¦κ°€ν•˜λ―€λ‘œ 이득이 μžˆμ„ κ²½μš°μ—λ§Œ μ‚¬μš©ν•΄μ•Όν•œλ‹€ !

Rectangle.create(0,0,50,200);

 

λ‚΄λΆ€ 곡μž₯

getX() {
	if (x== null){
    	x = computeX();
    return x;
    }
}

 

μ»¬λ ‰μ…˜ μ ‘κ·Όμž λ©”μ†Œλ“œ

 

μ‚¬μš©μžκ°€ μ»¬λ ‰μ…˜μ„ 직접 μ‘°μž‘ν•˜κ²Œ 되면 μœ„ν—˜ν•˜λ‹€ !

μˆ˜μ •ν•  수 μ—†λŠ” μ»¬λ ‰μ…˜ ν˜•νƒœλ‘œ λ°”κΏ”μ„œ λ°˜ν™˜ν•˜μž !

 

Iterator getBooks() {
	return books.iterator();
}

 

뢈린 μ„€μ • λ©”μ†Œλ“œ

뢈린 μƒνƒœλ₯Ό μ„€μ •ν•˜λŠ” κ°€μž₯ 쒋은 방법은 λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 것이닀.

void setValid(boolean newState) {
	...
}

 

질의 λ©”μ†Œλ“œ

객체가 λ‹€λ₯Έ 객체의 결정을 도와야 ν•  κ²½μš°μ—λŠ” beλ™μ‚¬λ‚˜ have동사λ₯Ό μ΄μš©ν•œ 질의 λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜λΌ

 

동등성 λ©”μ†Œλ“œ

객체의 동일성이 μ•„λ‹Œ 동등성을 비ꡐ해야 ν•˜λŠ” 경우 equals와 hashcodeλ₯Ό κ΅¬ν˜„ν•˜λΌ

https://cb036133.tistory.com/127

 

equals & hash code 와 이λ₯Ό 같이 μž¬μ •μ˜ ν•˜λŠ” 이유

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ λ°±μ—”λ“œ λ°λΈŒμ½”μŠ€μ—μ„œ μ§„ν–‰ν•œ Tech Log ν™œλ™ λͺ©μ μœΌλ‘œ μ œμž‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 1. String 클래슀의 equals & hashcode μ†Œν”„νŠΈμ›¨μ–΄ μ„Έκ³„μ—μ„œλŠ” λ¬Έμžμ—΄λ„ μ΄μƒν•œ λ°©μ‹μœΌλ‘œ κ΄€λ¦¬ν•œλ‹€. λ°”λ‘œ 동등성을 보

cb036133.tistory.com

μ—¬κΈ° μ•„μ£Ό 정리가 잘 λΌμžˆλ‹€ !

 

취득 λ©”μ†Œλ“œ

객체 μƒνƒœμ— λŒ€ν•œ 접근을 ν—ˆμš©ν•˜κΈ° μœ„ν•œ ν•œ 가지 방법은 μƒνƒœλ₯Ό λ°˜ν™˜ν•˜λŠ” λ©”μ†Œλ“œλ₯Ό λ°˜ν™˜ν•˜λŠ” 것이닀.

 

int getX() {
	return x;
}

 

μ„€μ • λ©”μ†Œλ“œ

ν•„λ“œ 값을 μ„€μ •ν•˜λŠ” λ©”μ†Œλ“œκ°€ ν•„μš”ν•˜λ‹€λ©΄, λ‹€μŒκ³Ό 같이 set 접두어λ₯Ό 뢙인 λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.

 

int setX(int newX) {
	x = newX;
}

 

μ•ˆμ „ν•œ 볡사

객체λ₯Ό λ°˜ν™˜ν•˜κ±°λ‚˜ μ €μž₯ν•˜κΈ° 전에 볡사본을 λ§Œλ“œλŠ” λ°©μ‹μœΌλ‘œ 이런 문제λ₯Ό ν”Όν•  수 μžˆλ‹€.

 

List<Books> getBooks() {
	List<Books> results =.new ArrayList<Book>();
    result.addAll(books);
    return result;
}
List<Books> setBooks(List<Book> newBooks) {
	books = new ArrayList<Books>();
    books.addAll(newBooks);
}