JavaStudy

TIL JAVA #1

린예쑰 2023. 10. 17. 02:00

1. Java κΈ°λ³Έ 지식, ν”„λ‘œμ νŠΈ 생성해보기(IntelliJ μ‚¬μš©)

2. λ³€μˆ˜λž€?

3. μž…μΆœλ ₯

4. ν˜•λ³€ν™˜(Casting)


1-1. μžλ°” μ–Έμ–΄μ˜ νŠΉμ§•

-  μ–΄λ–€ μš΄μ˜μ²΄μ œμ—μ„œλ“  λ™μž‘μ΄ κ°€λŠ₯ν•˜λ‹€.

- κ°€μž₯ μ€‘μš”ν•œ 것은 객체 지ν–₯ μ–Έμ–΄λΌλŠ” 것이닀.

- μ‹€μƒν™œμ—μ„œ μ‘΄μž¬ν•˜λŠ” 것을 μ»΄ν“¨ν„°μ—μ„œ ν‘œν˜„ν•  수 μžˆλ„λ‘ λ§Œλ“€μ–΄μ§„ 언어이닀. λ•Œλ¬Έμ— μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κΈ° 비ꡐ적 쉽닀.

- λ‹€μ–‘ν•œ 개발 도ꡬ와 λΌμ΄λΈŒλŸ¬λ¦¬λ“€μ΄ μ‘΄μž¬ν•˜κΈ°μ— 이것을 μ‚¬μš©ν•΄ μ›ν•˜λŠ” μž‘μ—…μ„ 보닀 효율적으둜 ν•  수 μžˆλ‹€.

 

1-2. JVMκ³Ό JDK?

JVM(JavaVirtualMachine)은 "μžλ°” 가상 λ¨Έμ‹ "μ΄λΌλŠ” λœ»μ„ κ°–κ³  μžˆλ‹€. 이것은 κ°€μƒμ˜ κΈ°κΈ°λ₯Ό λ§Œλ“€μ–΄μ£Όλ©° 이λ₯Ό 톡해 λ‹€μ–‘ν•œ μž₯λΉ„(PC, λͺ¨λ°”일, μ„œλ²„)에 Java ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰μ‹œν‚¬ 수 μžˆλ‹€!

 

JDK(JavaDevelopeKit)λŠ” "μžλ°” 개발 ν‚€νŠΈ" λΌλŠ” λœ»μ΄λ‹€. μ‹€μ œλ‘œ μžλ°” ν”„λ‘œκ·Έλž¨μ„ κ°œλ°œν•  수 μžˆλŠ” 도ꡬ이며 .java -> .class 파일둜 λ³€ν™˜ν•΄μ£ΌλŠ” 컴파일러의 κΈ°λŠ₯이 μžˆλ‹€. 

 

*java μ–Έμ–΄λ‘œ κ°œλ°œν•˜κ³  μ‹Άλ‹€λ©΄ μΈν…”λ¦¬μ œμ΄, 이클립슀 같은 IDE 도ꡬ μ„€μΉ˜μ™€ λ”λΆˆμ–΄ 이 JDK λ˜ν•œ λ°˜λ“œμ‹œ μ„€μΉ˜ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€. 

*버전에 λ”°λ₯Έ ν˜Έν™˜μ„± λ¬Έμ œκ°€ μžˆμ„ 수 μžˆμœΌλ‹ˆ ν™•μΈν•˜κ³  μ„€μΉ˜ν•΄μ•Ό ν•œλ‹€.

 

1-3. ν”„λ‘œκ·Έλž˜λ° μ΄ν•΄ν•˜κΈ°(main λ©”μ„œλ“œμ™€ μ½”λ“œ)

- mainλ©”μ„œλ“œλŠ” ν”„λ‘œκ·Έλž¨μ˜ μ‹œμž‘μ μ΄λ‹€. Java앱이 μ‹€ν–‰λ˜λ©΄ main λ©”μ„œλ“œλ₯Ό μš°μ„ μ μœΌλ‘œ μ‹€ν–‰μ‹œν‚€λŠ” 것이 JVM의 μ€‘μš”ν•œ μ—­ν•  쀑 ν•˜λ‚˜μ΄λ‹€. λ”°λΌμ„œ μžλ°” νŒŒμΌμ„ μƒˆλ‘œ λ§Œλ“€κ³  main methodλ₯Ό μ„ μ–Έν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.

 

#1)public 2)class 3)main :

1)μ™ΈλΆ€μ—μ„œ μ‹€ν–‰μ‹œν‚¬ 수 μžˆλ‹€κ³  ν‘œμ‹œν•΄μ£ΌλŠ” μ ‘κ·Όμ œμ–΄μž.

2)객체λ₯Ό λ§Œλ“œλŠ” 클래슀라고 "μ„ μ–Έ".

3)클래슀 이름! 파일λͺ…κ³Ό λ°˜λ“œμ‹œ μΌμΉ˜ν•΄μ•Ό ν•œλ‹€! 

 

#public 1)static 2)void main 3) (String[] args)

1) Java μ»΄νŒŒμΌλŸ¬κ°€ λ°”μ΄νŠΈ μ½”λ“œλ‘œ λ³€ν™˜ν•  λ•Œ 미리 μ •μ˜λ˜λŠ” λ©”μ„œλ“œ ν‘œκΈ°μ΄λ‹€.

2) λ©”μ„œλ“œμ˜ 응닡값을 μ •μ˜ν•˜λŠ” κ³³. void: 응닡값 μ—†μŒμ„ μ •μ˜.

3) λ©”μ„œλ“œκ°€ μ‹œμž‘λ  λ•Œ λ„˜κ²¨λ°›μ„ 데이터 곡간, λ¬Έμžμ—΄ μ—¬λŸ¬κ°œ 데이터 νƒ€μž…, κ·Έκ²ƒμ˜ 이름(μ‚¬μš©μžκ°€ μ •μ˜ν•œ κ°’.)

 

#System.out.print

: Java 좜λ ₯ μ½”λ“œμ΄λ‹€. println의 경우, ln은 line을 μ˜λ―Έν•˜λ©° 좜λ ₯값이 μ—¬λŸ¬κ°œμΌ λ•Œ λ™μΌν•œ 라인에 λ‚˜μ˜€μ§€ μ•Šκ³  μžλ™μœΌλ‘œ μ€„λ°”κΏˆμ„ ν•΄μ€€λ‹€. 

 

# // 

:μœ„ μŠ¬λž˜μ‰¬ 2κ°œλŠ” μ£Όμ„μ²˜λ¦¬λ₯Ό μ˜λ―Έν•˜λ©° ν•΄λ‹Ή λ‚΄μš©μ€ 전체 μ½”λ“œμ— μ–΄λ–€ 영ν–₯도 λ―ΈμΉ˜μ§€ μ•ŠλŠ”λ‹€. κ°œλ°œμžκ°€ ν•„μš”ν•œ 정보λ₯Ό λͺ…μ‹œν•΄μ•Όν•  경우 μ‚¬μš©ν•œλ‹€.

 


2-1. λ³€μˆ˜(λ³€ν•˜λŠ” 것과 λ³€ν•˜μ§€ μ•ŠλŠ” 것)

Java ν”„λ‘œκ·Έλž¨μ—μ„œ μ—¬λŸ¬ 값을 닀루기 μœ„ν•΄μ„œλŠ” 그것을 담을 "μ €μž₯ 곡간"이 ν•„μš”ν•˜λ‹€! λ³€μˆ˜λ₯Ό μ„ μ–Έν•¨μœΌλ‘œμ¨ ν•΄λ‹Ή 곡간이 λ§Œλ“€μ–΄μ§„λ‹€! +가변적인 값듀을 닀루기 μ‰¬μ›Œμ§

 

λ³€μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ μ €μž₯ 곡간에 담을 κ°’μ˜ νƒ€μž…(ν˜•νƒœ)와 κ·Έκ²ƒμ˜ 이름을 μ§€μ •ν•΄μ€˜μ•Ό ν•œλ‹€!

ex1) int num  ex2) int num=0; 이 두가지 μ˜ˆμ‹œ λͺ¨λ‘ μ •μˆ˜ν˜•μœΌλ‘œ μ„ μ–Έν•˜λ©° κ·Έκ²ƒμ˜ 이름을 num이라고 ν•΄μ£Όμ—ˆλ‹€.

 λ‹€λ₯Έ 점은 λ‘λ²ˆμ§Έ κ²½μš°μ—λŠ” λ³€μˆ˜ μ„ μ–Έκ³Ό λ™μ‹œμ— μ΄ˆκΈ°ν™”λ₯Ό ν•΄μ£Όμ—ˆλ‹€. 

 

- java ν”„λ‘œκ·Έλž¨μ—μ„œ μ €μž₯ν•˜λŠ” λŒ€λΆ€λΆ„μ˜ 값듀은 λ³€μˆ˜μ΄λ‹€. κ·Έλ ‡μ§€λ§Œ λ³€ν•˜μ§€ μ•ŠλŠ” μ €μž₯곡간인 "μƒμˆ˜"의 κ°œλ…λ„ μžˆλ‹€.

 μ΄λ ‡κ²Œ λ³€ν•˜μ§€ μ•Šμ„ 값듀을 λ”°λ‘œ μ„ μ–Έν•΄μ£Όλ©΄ 보닀 효율적으둜 μ €μž₯곡간을 μ‚¬μš©ν•  수 μžˆλ‹€.  

ex) final int num = 10; 이와 같이 λ³€μˆ˜μ˜ νƒ€μž… μ•žμ— final을 뢙이면 λœλ‹€.

 

2-2. λ³€μˆ˜μ˜ μ’…λ₯˜(κΈ°λ³Έν˜•κ³Ό μ°Έμ‘°ν˜•)

λ³€μˆ˜μ˜ μ’…λ₯˜λŠ” 크게 κΈ°λ³Έν˜• λ³€μˆ˜μ™€ μ°Έμ‘°ν˜• λ³€μˆ˜λ‘œ λ‚˜λ‰œλ‹€.

 

- κΈ°λ³Έν˜• λ³€μˆ˜: boolean / char / byte, int(4byte), long(8byte) / float(4byte), double(8byte) 각각 λ…Όλ¦¬ν˜•, λ¬Έμžν˜•, μ •μˆ˜ν˜•, μ‹€μˆ˜ν˜• 등이 있고 같은 데이터 νƒ€μž…μΈλ° μ—¬λŸ¬κ°œκ°€ μ‘΄μž¬ν•˜λŠ” 것은 각자 ν‘œν˜„ν•  수 μžˆλŠ” 정도가 λ‹€λ₯΄κΈ° λ•Œλ¬Έμ΄λ‹€. μ–Όλ§ˆλ§ŒνΌμ˜ λ²”μœ„λ₯Ό ν‘œν˜„ν•  수 μžˆλŠ”μ§€κ°€ λ‹€λ₯Έ 점이닀. 

** 문자 != λ¬Έμžμ—΄

 

- μ°Έμ‘°ν˜• λ³€μˆ˜: String(클래슀), Object, Array, List

* μ°Έμ‘°ν˜• λ³€μˆ˜λŠ” 값을 κ·Έ 곡간에 λ°”λ‘œ μ €μž₯ν•˜λŠ” 것이 μ•„λ‹ˆλΌ λ³„λ„μ˜ μ €μž₯ 곡간을 κ°–κ³  μžˆλ‹€. κ·Έλž˜μ„œ λ³€μˆ˜ μ„ μ–Έμ‹œ ν•΄λ‹Ή λ³€μˆ˜λŠ”     μ‹€μ œλ‘œ 데이터가 μ €μž₯λ˜μ–΄ μžˆλŠ” μ£Όμ†Œκ°’μ„ 가리킀고 μžˆλ‹€.

*λ³€μˆ˜μ˜ 크기 μžμ²΄κ°€ κΈ°λ³Έν˜•κ³Ό λ‹€λ₯΄κ²Œ 가변적이고 단일 곡간에 담을 수 μ—†λŠ” 크기가 큰 κ²½μš°κ°€ λ§Žλ‹€. 

 **λ©”λͺ¨λ¦¬ 관점 ? 

  *μœ„μ—μ„œ λ§ν•œ 것에 λ§λΆ™μ΄μžλ©΄ μ‹€μ œ 값을 μ €μž₯ν•˜λŠ” κΈ°λ³Έν˜• κ³Ό λ‹€λ₯΄κ²Œ μ°Έμ‘°ν˜•μ€ μ‹€μ œ 값이 μ•„λ‹Œ 원본 κ°’μ˜ "μ£Όμ†Œ"λ₯Ό μ €μž₯ν•œλ‹€. 이것을 memoryμƒμ—μ„œ 봀을 λ•Œ 원본값은 Heap(동적) μ˜μ—­μ— 있고 그것을 κ°€λ¦¬ν‚€λŠ” μ£Όμ†Œκ°’μ€ Stack(정적) μ˜μ—­μ— μžˆλ‹€. 

 

- 래퍼 클래슀 λ³€μˆ˜(Wrapper Class): "κΈ°λ³Έν˜• λ³€μˆ˜"λ₯Ό 클래슀둜 ν•œλ²ˆ λž˜ν•‘ν•˜λŠ” λ³€μˆ˜μ΄λ‹€.

 ex) int num = 10;

       Integer num = new Integer(num);

 *이것을 ꡳ이 μ‚¬μš©ν•˜λŠ” 이유? ν΄λž˜μŠ€λŠ” 객체지ν–₯ 언어인 μžλ°”μ˜ 핡심 κΈ°λŠ₯이닀. λ”°λΌμ„œ λ³€μˆ˜λ₯Ό 클래슀둜 κ΄€λ¦¬ν•˜λ©΄ 객체지ν–₯의 λ§Žμ€ κΈ°λŠ₯을 μ‚¬μš©ν•  수 μžˆλ‹€.

 

- μ•„μŠ€ν‚€μ½”λ“œ

μ»΄ν“¨ν„°μ—λŠ” 기본적으둜 1,0 두가지λ₯Ό 톡해 값을 μ €μž₯ν•  수 μžˆλ‹€. κ·Έλ ‡λ‹€λ©΄ μˆ«μžκ°€ μ•„λ‹Œ λ¬ΈμžλŠ” μ–΄λ–»κ²Œ μ €μž₯ν• κΉŒ?

κ·Έλž˜μ„œ λ“±μž₯ν•˜κ²Œ 된 것이 μ•„μŠ€ν‚€μ½”λ“œμ΄λ‹€. λ¬Έμžμ— 숫자λ₯Ό λ§€μΉ­ν•΄μ„œ 예λ₯Ό λ“€λ©΄ a - 65, c-67 이와 같이 컴퓨터에 μ €μž₯ν•  수 μžˆλ‹€. 

 

#λ¬Έμžμ™€ λ¬Έμžμ—΄μ˜ 차이?

λ¬ΈμžλŠ” 말 κ·ΈλŒ€λ‘œ 문자 ν•˜λ‚˜λ₯Ό μ˜λ―Έν•œλ‹€ a, b, c 이와 같은 단일 문자! char bee = 'a'; 이와 같이 값을 μ €μž₯ν•œλ‹€.(\n 널 κ°’ μ—†μŒ μ„ μ–Έν•˜λŠ” μžλ£Œν˜•μ΄ κΈ°λ³Έν˜•μ΄λΌλ©΄ 4byte, 8byteλ“±μœΌλ‘œ λͺ…ν™•ν•˜κ²Œ λ©”λͺ¨λ¦¬ 곡간이 할당됨)

String은 λ¬Έμžκ°€ ν•œκ°œ 이상인 "λ¬Έμžμ—΄"을 μ €μž₯ν•  수 μžˆλ‹€. String bee = "Dangerous speices"; 이와 같이 말이닀.

*이 두가지λ₯Ό ν—·κ°ˆλ¦¬λ©΄ μƒλ‹Ήνžˆ κ³€λž€ν•˜λ‹€. (λ„λ¬Έμž 쑴재.)

 

 


3-1. μž…μΆœλ ₯

- μž…λ ₯: μ½”λ“œ 맨 μœ— λΆ€λΆ„ μœ„μ— import java.util.Scanner; μ„ μ–Έ ν›„ 

Scanner sc = new Scanner(System.in); 
String input = sc.next();  // sc(Scanner)의 .next();

- 좜λ ₯: 

System.out.println();

 

이와 같이 μ‚¬μš©ν•˜λ©΄ λœλ‹€.

 


4-1 ν˜•λ³€ν™˜(Casting)

- ν”„λ‘œκ·Έλž˜λ° κ³Όμ • 쀑 λ¬Έμžμ—΄λ‘œ μž…λ ₯ν•œ λ³€μˆ˜λ₯Ό μ •μˆ˜ν˜•μœΌλ‘œ λ³€ν™˜ν•΄μ„œ κ³„μ‚°ν•˜κ³  싢은 경우 ν•΄λ‹Ή λ³€μˆ˜λ₯Ό λ‹€λ₯Έ ν˜•μœΌλ‘œ λ³€ν™˜μ΄ ν•„μš”ν•˜λ‹€. 이것을 μΊμŠ€νŒ…μ„ 톡해 ν•΄κ²°ν•  수 있으며 보톡 μ •μˆ˜ - μ‹€μˆ˜ - 문자 μ‚¬μ΄μ—μ„œ μΌμ–΄λ‚œλ‹€.

 

ex) μ‹€μˆ˜ν˜•μ„ μ •μˆ˜ν˜•μœΌλ‘œ λ³€ν™˜ν•˜κΈ°

//#1
double douNum = 3.2;
System.out.println((int)douNum); //λ‹¨μˆœν•˜κ²Œ μΊμŠ€νŒ…λ§Œ 진행.

//#2
float floNum = 3.5f;
int num;
num = (int)floNum; // num에 floNum의 값을 μ €μž₯ν•˜κ³  싢은데 이 값은 μ‹€μˆ˜μ΄λ‹€. 이것을 int둜 ν˜•λ³€ν™˜ ν•˜μ˜€κ³  
System.out.println(num); //num을 좜λ ₯ν•˜μ˜€λ‹€.

//κ·Έλ ‡μ§€λ§Œ μ΄λ ‡κ²Œ 되면 μ–΄μ©” 수 μ—†λŠ” κ°’μ˜ 손싀이 λ°œμƒν•œλ‹€.

이와 같이 κ°„λ‹¨ν•˜κ²Œ ν˜•λ³€ν™˜μ΄ κ°€λŠ₯ν•˜λ‹€. 

 

- ν˜•λ³€ν™˜μ—λŠ” μœ„μ™€ 같이 λͺ…μ‹œμ μΈ ν˜•λ³€ν™˜λ„ μžˆμ§€λ§Œ μžλ™μœΌλ‘œ ν˜•λ³€ν™˜μ΄ λ˜λŠ” κ²½μš°λ„ μžˆλ‹€.

예λ₯Ό λ“€λ©΄ 더 μž‘μ€ λ²”μœ„μΈ byte ν˜•μ˜ λ³€μˆ˜λ₯Ό intν˜•μœΌλ‘œ μΊμŠ€νŒ…ν•˜λ©΄ λ‹Ήμ—°νžˆ intν˜•μ΄ 더 큰 값을 담을 수 있기 λ•Œλ¬Έμ— 

문제 없이 μžλ™μœΌλ‘œ ν˜•λ³€ν™˜μ΄ 이루어진닀! 


μž‘μ„± ν›„κ°€: λ„ˆλ¬΄ 잘 μ¨μ•Όκ² λ‹€λŠ” μš•μ‹¬μ΄ μ•žμ„œ κ°œλ°œλΈ”λ‘œκ·Έλ₯Ό 미루고 λ―Έλ€˜λŠ”λ° 일단 κΎΈμ€€νžˆ 써봐야겠닀! 

처음으둜 μ½”λ“œλΈ”λŸ­λ„ 써보고 였늘 배운 λ‚΄μš© μ •λ¦¬ν•˜λ©΄μ„œ ν—·κ°ˆλ¦¬λ˜ κ°œλ…λ„ 훨씬 많이 μ •λ¦¬λ˜μ—ˆλ‹€! ν™”μ΄νŒ…! 

'JavaStudy' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

TIL JAVA #3-1  (0) 2023.11.30
TIL JAVA #2-4  (1) 2023.10.20
TIL JAVA #2-3  (0) 2023.10.19
TIL JAVA #2-2  (3) 2023.10.19
TIL JAVA #2-1  (0) 2023.10.18