곡뢀

1κ°•. Java와 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°

eβ„“lie 2022. 3. 15. 15:44
πŸ’‘
ν•™μŠ΅λͺ©ν‘œ Java의 νŠΉμ§•μ„ λ‚˜μ—΄ν•  수 μžˆλ‹€ λ°”μ΄νŠΈ μ½”λ“œ, Java ν”Œλž«νΌμ— κ΄€ν•΄ μ„€λͺ…ν•  수 μžˆλ‹€ Java ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•œ κ°œλ°œν™˜κ²½μ„ μ€€λΉ„ν•  수 μžˆλ‹€ 객체 / 클래슀λ₯Ό ꡬ뢄할 수 μžˆλ‹€

 

  • Java μ–Έμ–΄μ˜ νŠΉμ§•

C/C++κ³Ό μœ μ‚¬ν•˜λ‚˜ λ‹¨μˆœν•¨

ν”Œλž«νΌμ— 독립적: Java ν”Œλž«νΌλ§Œ μžˆλ‹€λ©΄ μš΄μ˜μ²΄μ œμ™€ λ¬΄κ΄€ν•˜κ²Œ μˆ˜μ •ν•˜μ§€ μ•Šκ³  싀행이 κ°€λŠ₯ν•˜λ‹€λŠ” 의미-μ‹€ν–‰ν™˜κ²½μ„ Java μ–Έμ–΄κ°€ ν¬ν•¨ν•˜κ³  μžˆλ‹€λŠ” λœ»μ΄κΈ°λ„ 함

μ™„μ „ν•œ 객체지ν–₯ μ–Έμ–΄: C++의 경우 ν•˜μ΄λΈŒλ¦¬λ“œ 객체지ν–₯ μ–Έμ–΄λ‘œ 객체지ν–₯ μŠ€νƒ€μΌλ‘œλ„, 절차적 μŠ€νƒ€μΌλ‘œλ„ ν”„λ‘œκ·Έλž˜λ°ν•  수 μžˆλŠ” 반면 Java의 경우 객체지ν–₯ μŠ€νƒ€μΌλ‘œλ§Œ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 있음. 즉 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œμ˜ μ£Όμš” κ°œλ…μ„ μ΄ν•΄ν•˜κ³  μžˆμ–΄μ•Ό 함

β†’ objective programmingμ΄λž€?

μ›Ή/λ„€νŠΈμ›Œν¬ ν”„λ‘œκ·Έλž˜λ°μ΄ 용이: ν΄λΌμ΄μ–ΈνŠΈ μ„œλ²„ ν”„λ‘œκ·Έλž¨ 등을 μž‘μ„±ν•˜κ³ μž ν•  λ•Œ μœ μš©ν•œ ν’λΆ€ν•œ 라이브러리λ₯Ό 제곡

μ—„κ²©ν•œ μžλ£Œν˜• 검사: λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜κ³ μž ν•  λ•Œ μžλ£Œν˜• 뢈일치둜 μΈν•œ 였λ₯˜μ˜ λ°œμƒ μ†Œμ§€λ₯Ό 미연에 차단할 수 μžˆλ‹€λŠ” 이점

μ˜ˆμ™Έμ²˜λ¦¬ κΈ°λŠ₯ 제곡: μ˜ˆμ™Έλž€ 볡ꡬ κ°€λŠ₯ν•œ κ²½λ―Έν•œ μ—λŸ¬λ₯Ό κ°€λ¦¬ν‚€λ―€λ‘œ, μ΄λ•Œ μ˜ˆμ™Έμ²˜λ¦¬ κΈ°λŠ₯μ΄λž€ μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ”λΌλ„ 정상 μƒνƒœλ‘œ 돌렀 λ¬Έμ œμ—†μ΄ μ‹€ν–‰ κ°€λŠ₯ν•œ κΈ°λŠ₯을 가리킴

λ©€ν‹° μŠ€λ ˆλ”© 지원: ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€ λ˜λŠ” ν”„λ‘œκ·Έλž¨ μ•ˆμ— μ‘΄μž¬ν•˜λŠ” 독립적인 μž‘μ—… 흐름을 μŠ€λ ˆλ“œλΌκ³  ν•˜λ©°, μžλ°”μ—μ„œλŠ” μ—¬λŸ¬ 개의 독립적 흐름을 λ™μ‹œμ— μ‹€ν–‰ν•  수 있음

 

  • λ°”μ΄νŠΈ μ½”λ“œ(클래슀 파일, .class)

Java μ†ŒμŠ€λ₯Ό μ»΄νŒŒμΌν•œ κ²°κ³Όλ¬Ό

Java ν”Œλž«νΌμ˜ Java VM(가상머신)μ—μ„œ μ‹€ν–‰ κ°€λŠ₯ν•œ μ½”λ“œμ΄μ§€λ§Œ, μš΄μ˜μ²΄μ œμ—μ„œ μƒμ„±λ˜λŠ” μ½”λ“œλŠ” μ•„λ‹ˆλ―€λ‘œ μ—„κ²©ν•œ μ˜λ―Έμ—μ„œ κΈ°κ³„μ–΄λŠ” μ•„λ‹ˆλ‹€ - write once, run anywhere

클래슀 파일: JavaλŠ” μ™„μ „ν•œ 객체지ν–₯ μ–Έμ–΄μ΄λ―€λ‘œ Java둜 μ½”λ”©ν•œλ‹€λŠ” 것은 κ³§ 클래슀λ₯Ό λ§Œλ“œλŠ” 것

 

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό μ• ν”Œλ¦Ώ

μ• ν”Œλ¦¬μΌ€μ΄μ…˜: Java ν”Œλž«νΌμ—μ„œ μ‹€ν–‰λ˜λŠ” ν”„λ‘œκ·Έλž¨μœΌλ‘œ 싀행을 μœ„ν•΄ main() ν•¨μˆ˜κ°€ ν•„μš”ν•¨

μ• ν”Œλ¦Ώ: THML μ›Ή νŽ˜μ΄μ§€μ— ν¬ν•¨λ˜μ–΄ λΈŒλΌμš°μ €λ₯Ό 톡해 μ‹€ν–‰

<APPLET CODE = "HelloApplet.class" WIDTH = 200 HEIGHT = 100> </APPLET>

λ§Œμ•½ μœ„μ™€ 같은 μ½”λ“œκ°€ ν¬ν•¨λœ html 파일이 μžˆλ‹€λ©΄ μ½”λ“œ 속 .class νŒŒμΌλ„ μ»΄νŒŒμΌν•¨. λ‹€λ§Œ μ• ν”Œλ¦Ώμ€ μ΅œκ·Όμ—λŠ” 잘 쓰이지 μ•ŠλŠ” λ°©μ‹μœΌλ‘œ, μ΅μŠ€ν”Œλ‘œλŸ¬ μ™Έμ˜ λΈŒλΌμš°μ €μ—μ„œλŠ” μ§€μ›ν•˜μ§€ μ•Šκ²Œ λ˜μ—ˆμŒ

 

  • Java ν”Œλž«νΌ

ν”Œλž«νΌμ΄λž€ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜κ³ μž ν•˜λŠ” HW/SW ν™˜κ²½μ΄λ―€λ‘œ Java ν”Œλž«νΌμ€ Java ν”„λ‘œκ·Έλž¨μ„ 개발/μ‹€ν–‰ν•˜κΈ° μœ„ν•œ ν™˜κ²½

μš΄μ˜μ²΄μ œμ— λ§žλŠ” Java platform을 μ„€μΉ˜ν•˜μ—¬μ•Ό 함

ν”Œλž«νΌ ꡬ성은 Java VM + Java API

Java VM: Java ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ν™˜κ²½μ„ μ œκ³΅ν•˜λŠ” κ°€μƒλ¨Έμ‹ μœΌλ‘œ, ν”„λ‘œκ·Έλž¨μ„ κ΅¬λ™ν•˜κΈ° μœ„ν•œ 엔진이라고 λ³Ό 수 있음. 싀행에 ν•„μš”ν•œ λͺ¨λ“  사항을 관리 및 μ§€μ›ν•˜κ³ , GC(garbage collection)λ₯Ό μžλ™μœΌλ‘œ μˆ˜ν–‰ν•¨(Cμ—μ„œμ˜ mallocκ³Ό 같은 κΈ°λŠ₯을 VM이 ν•΄ μ£Όκ³  μžˆμœΌλ―€λ‘œ 개발 μ‹œμ μ— 크게 μ‹ κ²½μ“°μ§€ μ•Šμ•„λ„ λ˜λŠ” 것이 μž₯점)

Java API: ν”„λ‘œκ·Έλž¨ κ°œλ°œμ— ν•„μš”ν•œ 클래슀 라이브러리둜, 클래슀의 묢음(νŒ¨ν‚€μ§€)이 계측 ꡬ쑰둜 λΆ„λ₯˜λ˜μ–΄ 있음

β†’ λ‚˜ 아직도 API의 κ°œλ…μ„ μ •ν™•ν•˜κ²Œ λͺ¨λ₯΄κ² μŒ

 

 

  • JDK와 eclipse

Java ν™ˆνŽ˜μ΄μ§€μ—μ„œ λ‹€μš΄λ‘œλ“œλ°›μ•„ μ„€μΉ˜ β†’ ν™˜κ²½λ³€μˆ˜ 경둜 μˆ˜μ • β†’ ν™˜κ²½λ³€μˆ˜ JAVA_HOME 생성

#path μˆ˜μ •  c:/Program Files/Java/jdk-ver./bin μΆ”κ°€   #java_home 생성 c:/Program Files/Java/jdk-ver. λŒ€μž…

eclipse: κ°€μž₯ 일반적인 Java 개발 툴

 

  • main()의 ν˜•μ‹
public class Hello { //public classλŠ” νŒŒμΌμ— μ΅œλŒ€ 1κ°œκΉŒμ§€ 쑴재 	public static void main(String[] args) { //main method의 ν˜•μ‹ 	/* μ—¬λŸ¬ μ€„λ‘œ 주석 처리λ₯Ό ν•  수 있음 */ 	System.out.printIn("Hello, World!"); 	} }
/** 이 μ•ˆμ— λ‚΄μš©μ„ μž‘μ„±ν•΄μ„œ javadoc을 μ΄μš©ν•œ API λ¬Έμ„œλ₯Ό λ§Œλ“€ 수 있음*/
  • 클래슀: 퍼블릭 클래슀/퍼블릭이 μ•„λ‹Œ 클래슀public classλŠ” νŒŒμΌμ— μ΅œλŒ€ 1개둜, 퍼블릭 ν΄λž˜μŠ€κ°€ μ‘΄μž¬ν•œλ‹€λ©΄ ν•΄λ‹Ή νŒŒμΌμ€ λ‹€λ₯Έ μ΄λ¦„μœΌλ‘œλŠ” μ €μž₯ν•  수 μ—†κ³  λ°˜λ“œμ‹œ β€˜PublicClassName.java’ 파일λͺ…μœΌλ‘œλ§Œ μ €μž₯ν•  수 있음
  •  
  • 좜λ ₯κ³Ό μ‹€ν–‰ν‘œμ€€μΆœλ ₯ System.out ν‘œμ€€μΆœλ ₯을 λ‹΄λ‹Ήν•˜λŠ” 객체둜, print() λ˜λŠ” printIn()을 μˆ˜ν–‰ν•¨. λ°˜λ“œμ‹œ System.out.print(”strings”); ν˜•νƒœλ‘œ μ“°μ—¬μ•Ό ν•¨μ»΄νŒŒμΌ λͺ…λ Ήμ–΄
  • μ–΄λ– ν•œ 객체λ₯Ό 톡해 ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜λŠ”μ§€λ₯Ό λ°ν˜€ μ£Όμ–΄μ•Ό ν•˜κΈ° λ•Œλ¬Έ
//Hello.java둜 μ €μž₯ javac Hello.java β€˜ClassName.java’가 λ§Œλ“€μ–΄μ§.  java Hello // Hello classμ—μ„œ main() λ©”μ†Œλ“œκ°€ 싀행됨 
  • ν΄λž˜μŠ€μ™€ 객체

좔상화 μ „ν˜•μ μ΄κ³  ν•„μš”ν•œ μΌλΆ€λ§Œμ„ λ°œμ·Œν•˜μ—¬ 사물을 이해, ν‘œν˜„ν•˜λŠ” 것

클래슀 객체λ₯Ό λ§Œλ“€κΈ° μœ„ν•œ λͺ¨ν˜•μ΄λ‚˜ ν‹€. 문제 μ˜μ—­ μ•ˆμ— μ‘΄μž¬ν•˜λŠ” μ—¬λŸ¬ 객체λ₯Ό κ³΅ν†΅μ˜ νŠΉμ§•μ„ κ°€μ§€λŠ” μ’…λ₯˜λ³„λ‘œ λΆ„λ₯˜ν•œ λ‹€μŒ μΆ”μƒν™”ν•˜κ³ μž ν•˜λŠ” μˆ˜λ‹¨μ„ 클래슀라고 함

객체의 μƒνƒœλŠ” ν•„λ“œ(데이터)둜, ν–‰μœ„λŠ” λ©”μ†Œλ“œλ‘œ κ΅¬ν˜„(ν΄λž˜μŠ€μ— μΊ‘μŠν™”)됨. 즉 μƒνƒœ:ν–‰μœ„ = ν•„λ“œ(데이터):λ©”μ†Œλ“œ - β€˜μ΄ λ°μ΄ν„°λŠ” μ–΄λ–€ λ™μž‘μ„ ν•  수 μžˆλŠ”κ°€?’

κ°μ²΄λŠ” νŠΉμ • 클래슀의 μΈμŠ€ν„΄μŠ€(ν΄λž˜μŠ€κ°€ μ‹€μ²΄ν™”ν•œ 것을 μΈμŠ€ν„΄μŠ€λΌ 함)

객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” 클래슀 μ •μ˜λ‘œλΆ€ν„° 객체듀이 λ§Œλ“€μ–΄μ§€κ³ , ν”„λ‘œκ·Έλž¨μ€ 이 객체듀 κ°„μ˜ μƒν˜Έμž‘μš©μœΌλ‘œ λ™μž‘

 

//CλŠ” 절차적 ν”„λ‘œκ·Έλ° μ–Έμ–΄ //ν”„λ‘œκ·Έλž¨μ˜ κΈ°λ³Έ ꡬ성 λ‹¨μœ„λŠ” ν•¨μˆ˜  //μ „μ—­λ³€μˆ˜ μ„ μ–Έ int e[2]; //english int m[2]; //mathmatics  //main function: 두 ν•™μƒμ˜ μ˜μ–΄, μˆ˜ν•™ 성적을 μž…λ ₯λ°›μŒ void input_grade(){ 	e[0] = 90; 	e[1] = 80; 	e[0] = 85; 	m[1] = 80; }  void output_grade(){ 	printf("%d, %d", e[0] + m[0], e[1]+m[1]); }  void main(void){ 	input_grade(); 	output_grade(); 	}

 

//JavaλŠ” 객체지ν–₯ μ–Έμ–΄  //λ”°λΌμ„œ λ¨Όμ € classλ₯Ό μ„ μ–Έ  class Grade { 	int e;  	int m;  	void output_grade() { 		System.out.printIn(e+m); 	} }  public class GradeOutput{ 	public static void main(String args[]){ 		Grade g1, g2; 		g1 = new Grade(); // 객체 생성 		g2 = new Grade(); 		g1.e = 90; g1.m = 85; // 각 객체에 점수λ₯Ό λŒ€μž…  		g2.e = 90; g2.m = 80;  		g1.output_grade(); 		g2.output_grade(); 	} }