Vibe.ai
article thumbnail
λ°˜μ‘ν˜•

 

πŸ‘€Today...


μš°μ„  무엇이 되고자 ν•˜λŠ”κ°€λ₯Ό μžμ‹ μ—κ²Œ λ§ν•˜λΌ 그리고 ν•΄μ•Ό 할일을 ν•˜λΌ - Epictetus

 

 

β˜•μ˜€λŠ˜μ˜ TIL(Today I Learn)


객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°

객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP; Object Oriented Programming) μ€ 일련의 λͺ…령어듀을 λ‚˜μ—΄ν•˜μ—¬ 말을 κ±΄λ‚΄λŠ” 절차적인 ν”„λ‘œκ·Έλž˜λ° λ°©μ‹κ³ΌλŠ” λ‹€λ₯΄κ²Œ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ ν•„μš”ν•œ 데이터λ₯Ό ν•œκ³³μ— λͺ¨μ•„ μΆ”μƒν™”μ‹œμΌœ μƒνƒœμ™€ ν–‰μœ„λ₯Ό κ°€μ§„ 객체λ₯Ό λ§Œλ“€κ³  κ·Έ κ°μ²΄λ“€κ°„μ˜ ν˜‘λ ₯κ³Ό 유기적인 μƒν˜Έμž‘μš©μ„ 톡해 νŠΉμ • κΈ°λŠ₯을 ꡬ성 ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° 방법둠이닀.

http://wiki.hash.kr/index.php/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5

 

  • 클래슀(Class) : 객체λ₯Ό μ •μ˜ν•œ ν‹€, 객체λ₯Ό μƒμ„±ν•˜λŠ”λ° μ‚¬μš©λœλ‹€. 
  • 객체(Object) : μ‹€μž¬ν•˜λŠ” λͺ¨λ“ κ²ƒ, μ‚¬μš© ν•  수 μžˆλŠ” 싀체
  • μΈμŠ€ν„΄μŠ€(Instance) : 클래슀λ₯Ό 톡해 μƒμ„±λœ 객체, 객체λ₯Ό λ§Œλ“œλŠ” 과정을 μΈμŠ€ν„΄μŠ€ν™” λΌκ³ ν•œλ‹€.

μΈμŠ€ν„΄μŠ€ ⊂ 객체

 

 

ν΄λž˜μŠ€μ™€ 객체

# Class

ν΄λž˜μŠ€λŠ” 기본적으둜 λŒ€λ¬Έμžλ‘œ μ‹œμž‘ν•œλ‹€.

  • ν•„λ“œ(field) - 클래슀의 속성을 λ‚˜νƒ€λ‚΄λŠ” λ³€μˆ˜
  • λ©”μ„œλ“œ(method) : 클래슀의 κΈ°λŠ₯을 λ‚˜νƒ€λ‚΄λŠ” ν•¨μˆ˜
  • μƒμ„±μž(constructor) : 클래슀의 객체λ₯Ό μƒμ„±ν•˜λŠ” μ—­ν• 
  • μ΄λ„ˆ 클래슀(inner class) : 클래슀 λ‚΄λΆ€μ˜ 클래슀

μœ„μ˜ κ΅¬μ„±μš”μ†Œλ“€μ€‘ μƒμ„±μžλ₯Ό μ œμ™Έν•œ μš”μ†Œλ₯Ό Class의 member라고 ν•œλ‹€. 이쀑 ν•„λ“œμ™€ λ©”μ„œλ“œλŠ” 각각 속성, κΈ°λŠ₯을 λŒ€ν‘œν•œλ‹€.

 

# 객체(Object)

κ°μ²΄λŠ” 속성과 κΈ°λŠ₯μ΄λΌλŠ” κ΅¬μ„±μš”μ†Œλ‘œ 이루어진닀.

속성 - ν•„λ“œ

κΈ°λŠ₯ - λ©”μ„œλ“œ

μœ„μ˜ κ΅¬μ„±μš”μ†Œλ“€κ³Ό μ΄λ„ˆν΄λž˜μŠ€λ₯Ό 객체의 member라고 λΆ€λ₯Έλ‹€.

 

객체의 생성방법은 newν‚€μ›Œλ“œλ₯Ό 톡해 μ‹€μ œκ°μ²΄λ₯Ό 생성할 수 μžˆλ‹€. 그리고 pointμ—°μ‚°μž( . )을 톡해 ν•΄λ‹Ή 객체의 멀버에 접근이 κ°€λŠ₯ν•˜λ‹€.

<클래슀λͺ…> <μ°Έμ‘°λ³€μˆ˜λͺ…> = new <μƒμ„±μž>();

Person ps = new Person();

좜처 : μ½”λ“œμŠ€ν…Œμ΄μΈ 

참고자료

http://wiki.hash.kr/index.php/%ED%81%B4%EB%9E%98%EC%8A%A4

http://wiki.hash.kr/index.php/%EA%B0%9D%EC%B2%B4

https://www.youtube.com/watch?v=Mm06BuD3PlY 

 

 

ν•„λ“œμ™€ λ©”μ„œλ“œ

# ν•„λ“œ

ν•„λ“œλŠ” ν΄λž˜μŠ€μ— ν¬ν•¨λœ λ³€μˆ˜λ₯Ό 의미 , 객체의 속성을 μ •μ˜ν• λ•Œ μ‚¬μš©

class Example { // => 클래슀 μ˜μ—­
	int instanceVariable; // μΈμŠ€ν„΄μŠ€ λ³€μˆ˜
	static int classVariable; // 클래슀 λ³€μˆ˜(static λ³€μˆ˜, κ³΅μœ λ³€μˆ˜)

	void method() { // => λ©”μ„œλ“œ μ˜μ—­
		int localVariable = 0; // μ§€μ—­ λ³€μˆ˜. {}블둝 μ•ˆμ—μ„œλ§Œ 유효
	}
}

μ—¬κΈ°μ„œ μΈμŠ€ν„΄μŠ€λ³€μˆ˜, ν΄λž˜μŠ€λ³€μˆ˜λŠ” 클래슀 μ˜μ—­μ— μ„ μ–Έλ˜μ—ˆκΈ° λ•Œλ¬Έμ— λ©€λ²„λ³€μˆ˜(ν•„λ“œ) 이닀.

그리고 λ©€λ²„λ³€μˆ˜μ™€ λ‹€λ₯΄κ²Œ μ§€μ—­λ³€μˆ˜λŠ” λ©”μ„œλ“œ λ‚΄λΆ€μ˜ λΈ”λ‘μ—μ„œλ§Œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€. μ§€μ—­λ³€μˆ˜λŠ” μŠ€νƒλ©”λͺ¨λ¦¬μ— μ €μž₯이 λ˜μ—ˆλ‹€κ°€ λ©”μ„œλ“œκ°€ μ’…λ£Œλ¨κ³Ό ν•¨κ»˜ μ†Œλ©Έν•œλ‹€.

그리고 ν•„λ“œλ³€μˆ˜μ™€ μ§€μ—­λ³€μˆ˜μ˜ μ°¨μ΄λŠ” μ΄ˆκΈ°κ°’μ— μžˆλŠ”λ° ν•„λ“œλ³€μˆ˜λŠ” κ°•μ œλ‘œ μ΄ˆκΈ°ν™”κ°€ 이루어진닀. 즉, μ§€μ—­λ³€μˆ˜λŠ” μ„ μ–Έμ‹œμ— λ°˜λ“œμ‹œ μ΄ˆκΈ°ν™”κ°€ ν•„μš”ν•˜λ‹€.

http://wiki.hash.kr/index.php/%ED%95%84%EB%93%9C_(%EC%9E%90%EB%B0%94) 

 

# Static

static ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œ λ³€μˆ˜λ₯Ό 'static member' 라고 λΆ€λ₯΄κ³  μΈμŠ€ν„΄μŠ€ 멀버와 κ΅¬λΆ„λœλ‹€.

static ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œ λ³€μˆ˜/λ©”μ†Œλ“œλŠ” μΈμŠ€ν„΄μŠ€μ˜ 생성 없이 호좜이 κ°€λŠ₯ν•˜λ‹€. 

정적 ν•„λ“œλŠ” κ°μ²΄κ°„μ˜ 곡유 λ³€μˆ˜μ˜ μ„±μ§ˆμ΄λ‹€. (λ©”μ„œλ“œλ„ λ™μΌν•˜κ²Œ 적용)

정적 λ©”μ„œλ“œμ˜ 경우 μΈμŠ€ν„΄μŠ€λ³€μˆ˜ λ˜λŠ” μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν• μˆ˜κ°€ μ—†λ‹€.

클래슀 λ³€μˆ˜(Static λ©€λ²„)
- 클래슀 내에 Static ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜
- 처음 JVM이 μ‹€ν–‰λ˜μ–΄ ν΄λž˜μŠ€κ°€ λ©”λͺ¨λ¦¬μ— 올라갈 λ•Œ ~ ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ  λ•ŒκΉŒμ§€ μœ μ§€
- ν΄λž˜μŠ€κ°€ μ—¬λŸ¬ 번 μƒμ„±λ˜μ–΄λ„ Static λ³€μˆ˜λŠ” 처음 λ”± ν•œ 번만 생성됨
- λ™μΌν•œ 클래슀의 λͺ¨λ“  객체듀에 μ˜ν•΄μ„œ 곡유됨

μΈμŠ€ν„΄μŠ€ λ³€μˆ˜(Non-static λ©€λ²„)
- 클래슀 내에 μ„ μ–Έλœ λ³€μˆ˜
- 객체 생성 μ‹œλ§ˆλ‹€ 맀번 μƒˆλ‘œμš΄ λ³€μˆ˜κ°€ 생성됨
- 클래슀 λ³€μˆ˜μ™€ 달리 κ³΅μœ λ˜μ§€ μ•ŠμŒ

 

# λ©”μ„œλ“œ(method)

λ©”μ„œλ“œλŠ” "νŠΉμ •ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 일련의 λͺ…λ Ήλ¬Έλ“€μ˜ μ§‘ν•©" 이닀. ν΄λž˜μŠ€μ—μ„œ κΈ°λŠ₯에 ν•΄λ‹Ήν•˜λŠ” λ‚΄μš©μ„ λ‹΄λ‹Ήν•œλ‹€.

λ©”μ„œλ“œλŠ” λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜(method signature), λ©”μ„œλ“œ λ°”λ””(method body)둜 κ΅¬λΆ„λœλ‹€.

public static int add(int x, int y) { // λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜
	int result = x + y; // λ©”μ„œλ“œ λ°”λ””
	return result;
}

method의 λ°˜ν™˜νƒ€μž…μ΄ voidκ°€ μ•„λ‹Œκ²½μš°μ—λŠ” λ©”μ„œλ“œ 바디에 λ°˜λ“œμ‹œ return문이 μ‘΄μž¬ν•΄μ•Όν•˜κ³ , 결과값은 λ°˜ν™˜νƒ€μž…κ³Ό μΌμΉ˜ν•˜κ±°λ‚˜ μžλ™ν˜•λ³€ν™˜μ„ ν†΅ν•΄μ„œλΌλ„ μΌμΉ˜ν•΄μ•Όν•œλ‹€.

http://wiki.hash.kr/index.php/%EB%A9%94%EC%86%8C%EB%93%9C

 

# λ©”μ„œλ“œ μ˜€λ²„λ‘œλ”©(Overloading)

λ©”μ„œλ“œ μ˜€λ²„λ‘œλ”©μ€ ν•˜λ‚˜μ˜ 클래슀 μ•ˆμ— 같은 μ΄λ¦„μ˜ λ©”μ„œλ“œλ₯Ό μ—¬λŸ¬κ°œ μ •μ˜ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

public class Overloading {
    public static void main(String[] args) {
        Shape s = new Shape(); // 객체 생성
 
        s.area(); // λ©”μ„œλ“œ 호좜
        s.area(1);
        s.area(1,1);
        s.area(1.1, 1.1);
    }
}

class Shape {
    public void area() { // λ©”μ„œλ“œ μ˜€λ²„λ‘œλ”©. 같은 μ΄λ¦„μ˜ λ©”μ„œλ“œ 4개.
        System.out.println("인자 μ—†μŒ");
    }
    public void area(int r) {
        System.out.println("int 인자 ν•˜λ‚˜");
    }

    public void area(int w, int l) {
        System.out.println("int ν˜• 인자 λ‘˜");
    }

    public void area(double b, double h) {
        System.out.println("double ν˜• 인자 λ‘˜");
    }
}

//κ²°κ³Ό
//인자 μ—†μŒ
//int 인자 ν•˜λ‚˜
//int ν˜• 인자 λ‘˜
//double ν˜• 인자 λ‘˜

쑰건

- λ©”μ„œλ“œμ˜ 이름이 κ°™μ•„μ•Όν•œλ‹€.

- λ©”κ°œλ³€μˆ˜μ˜ 개수 λ˜λŠ” νƒ€μž…μ΄ 달라야 ν•œλ‹€.

- λ°˜ν™˜νƒ€μž…μ€ μ˜€λ²„λ‘œλ”©μ΄ 성립에 영ν–₯을 μ£Όμ§€ λͺ»ν•œλ‹€.

 


πŸ‘Šν˜Όμžμ„œ ν•΄κ²°ν•˜κΈ°


1. Parameter vs Argument

parameterλŠ” ν•¨μˆ˜ ν˜Ήμ€ λ©”μ†Œλ“œ μ •μ˜μ—μ„œ λ‚˜μ—΄λ˜λŠ” λ³€μˆ˜ λͺ… (λ§€κ°œλ³€μˆ˜), λ©”μ†Œλ“œμ— μž…λ ₯λ˜λŠ” λ³€μˆ˜λͺ…

argumentλŠ” ν•¨μˆ˜ ν˜Ήμ€ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ 전달 ν˜Ήμ€ μž…λ ₯λ˜λŠ” μ‹€μ œ 값이닀.(μ „λ‹¬μΈμž) ν•¨μˆ˜μ™€ λ©”μ†Œλ“œμ˜ μž…λ ₯κ°’

 

 

 

λ°˜μ‘ν˜•
profile

Vibe.ai

@hai02y

ν¬μŠ€νŒ…μ΄ μ’‹μ•˜λ‹€λ©΄ "μ’‹μ•„μš”β€οΈ" λ˜λŠ” "κ΅¬λ…πŸ‘πŸ»" ν•΄μ£Όμ„Έμš”!