κ°μ²΄ νμ© μΈμ
11/19 15:00 ~ 16:15 (μ½ 1μκ° 15λΆκ° μ§ν)
μΈμ μ λͺ©μ : ν΄λμ€λ₯Ό μ μ¬μ©ν΄ 보μ!
JVM λ©λͺ¨λ¦¬ μμ
- μλ°μ»΄νμΌλ¬κ° .java νμΌμ λ°μ΄νΈμ½λλ‘ λ³ν
- JVMμ΄ λ°μ΄νΈμ½λλ₯Ό μ½μ΄μ λ©λͺ¨λ¦¬μ μ μ¬
βοΈ λ°μ΄νΈμ½λ(.class)
λ°μ΄νΈμ½λλ μλ° νλ‘κ·Έλ¨μ΄ μ»΄νμΌλ ν μμ±λλ μ€κ° ννμ μ½λμ΄λ€. μ¬λμ΄ μ½μ μ μλ μμ€ μ½λμ κΈ°κ³κ° μ€ννλ κΈ°κ³μ΄μ μ€κ° λ¨κ³μ ν΄λΉνλ€.
μλ°μ JVM(Java Virtual Machine)μμ μ€νλλ©° νλ«νΌ λ 립μ±μ κ°λ₯νκ² νλ ν΅μ¬ μμμ λλ€.
β μλ° λ©λͺ¨λ¦¬ ꡬ쑰 β
- Method Area(λμκ΄) : .class νμΌμ μ λ³΄κ° μ¬λΌκ°λ κ³³μ΄λ€. μλ° νλ‘κ·Έλ¨μ΄ μ€νλ λ λͺ¨λ ν΄λμ€μ λ©μλ μ 보(ν΄λμ€ κ΅¬μ‘°, λ©μλ μ 보, μμ λ±)κ° μ μ₯λλ κ³³μ΄λ€.
- Stack Area(μ μ μκΈ°) : FILO(First In Last Out, μ μ νμΆ) ꡬ쑰μ΄λ€. λ©μλκ° νΈμΆλ λλ§λ€ λ©μλμ μ 보λ₯Ό κ°μ§ μλ‘μ΄ Stack νλ μμ΄ μμΈλ€. κ°μ₯ μμ μλ μ μλ₯Ό λ¨Όμ κΊΌλ΄μ μ¬μ©νλ―μ΄ λ§μ§λ§μ νΈμΆλ λ©μλκ° λ¨Όμ μ€νλλ€.
- Heap Area(νμ ) : νμμ λ°λΌ ν¬κΈ°κ° λ³νλ κ°μ²΄κ° μ μ₯λλ 곡κ°μ΄λ€.
μ½λ νλ¦
https://cscircles.cemc.uwaterloo.ca/java_visualize/
μΊ‘μν : λ΄λΆ ꡬνμ μΈλΆμ κ°μΆκ³ νμν μ λ³΄λ§ μ 곡ν΄μ λ°μ΄ν°μ λ‘μ§μ 보νΈνλ€.
μ κ·Ό μ μ΄μ
μ κ·Ό μ μ΄μ | κ°μ ν΄λμ€ | κ°μ ν¨ν€μ§ | μμν ν΄λμ€ | λ€λ₯Έ ν¨ν€μ§ |
public | βοΈ | βοΈ | βοΈ | βοΈ |
protected | βοΈ | βοΈ | βοΈ | β |
default | βοΈ | βοΈ | β | β |
private | βοΈ | β | β | β |
Getter & Setter
- Getter : κ°μ²΄μ λ°μ΄ν°(μμ± κ°)λ₯Ό μ½μ μ μλλ‘ μ 곡νλ λ©μλ
- Setter : κ°μ²΄μ λ°μ΄ν°(μμ± κ°)λ₯Ό μμ ν μ μλλ‘ μ 곡νλ λ©μλ
β 무λΆλ³ν μΈν° β
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μμ ν΄λμ€μ μμ±(attribute)μ μμ ν μ μλλ‘ νλ setter λ©μλκ° κ·μΉ μμ΄ λ¨λ°λκ±°λ, μ ν μμ΄ μΈλΆμμ νΈμΆ κ°λ₯ν μνλ₯Ό λ§νλ€. μ΄λ μννΈμ¨μ΄ μ€κ³μ μ€μν μμΉμΈ μΊ‘μν(encapsulation)λ₯Ό μλ°νλ©° μ¬λ¬ λ¬Έμ λ₯Ό μΌκΈ°ν μ μλ€.
μ€μ΅ : λμκ΄ νλ‘κ·Έλ¨ κ°μ΄ λ§λ€κΈ°
- Book.java
package librarySystem;
public class Book {
// 1. μμ± (λ³μ)
// μ λͺ©(title)
private String title;
// μ μ(author)
private String author;
// λμ¬μ¬λΆ(isAvailable)
private boolean isAvailable;
// 2. μμ±μ (쑰립μ€λͺ
μ)
public Book (String title, String author, boolean isAvailable) {
this.title = title;
this.author = author;
this.isAvailable = isAvailable;
}
// 3. κΈ°λ₯ (λ©μλ)
// μ±
μ λͺ© μ‘°ν -> getter
public String getTitle () {
return this.title;
}
// μ±
λμ¬μ¬λΆ μ‘°ν -> getter
public boolean getIsAvailable () {
return this.isAvailable;
}
// μ±
λμ¬μ¬λΆ μ€μ -> setter
public void setIsAvailable (boolean flag) {
this.isAvailable = flag;
}
// μ±
μμΈ μ 보 μΆλ ₯ -> getter
public void printBookInfo () {
System.out.println("μ±
μ λͺ©μ " + this.title + "μ
λλ€.");
System.out.println("μ μλ " + this.author + "μ
λλ€.");
if (this.isAvailable) {
System.out.println("μ±
μ λμ¬ν μ μμ΅λλ€.");
} else {
System.out.println("μ±
μ λμ¬ν μ μμ΅λλ€.");
}
}
}
- Library.java
package librarySystem;
import java.util.ArrayList;
public class Library {
// 1. μμ± (λ³μ)
// μ±
λͺ©λ‘(books): ArrayList
private ArrayList<Book> books;
// 2. μμ±μ (쑰립μ€λͺ
μ)
public Library () {
books = new ArrayList<>();
}
// 3. κΈ°λ₯ (λ©μλ)
// λμκ΄μ μ±
μΆκ° -> Setter
public void addBook (Book book) {
this.books.add(book);
}
// λμκ΄μμ μ±
μ κ±° -> Setter
public void removeBook(Book book) {
this.books.remove(book);
}
// λμκ΄μμ μ±
μ΄λ¦μΌλ‘ κ²μ -> getter
public String searchByTitle (String title) {
for (Book book : books) {
String foundBook = book.getTitle();
// μ°ΎμΌλ €κ³ νλ μ±
μ μ λͺ©κ³Ό book 리μ€νΈμ μ μ₯λ μ±
μ μ λͺ©μ΄ μΌμΉν λ μ€ν
if (foundBook.equals(title)) {
return foundBook;
}
}
return null;
}
// λμκ΄μ λͺ¨λ μ±
μ‘°ν -> getter
public void lookUpAllBook () {
for (Book book : books) {
// μ±
μ μ 보 μΆλ ₯
book.printBookInfo();
}
}
// λμκ΄μμ μ±
λμ¬
public void rentBook (String title) {
for (Book book : books) {
String foundBook = book.getTitle();
// λμ¬νλ €κ³ νλ μ±
μ μ λͺ©κ³Ό book 리μ€νΈμ μ μ₯λ μ±
μ μ λͺ©μ΄ μΌμΉν λ μ€ν
if (foundBook.equals(title)) {
// λμ¬νκ³ μ νλ μ±
μ΄ λμ¬ κ°λ₯ν μνμΌ λ μ€ν
if (book.getIsAvailable()) {
// μ±
μ λμ¬ μνλ₯Ό false κ°μΌλ‘ λ³κ²½
book.setIsAvailable(false);
System.out.println("λμ¬ μ±κ³΅");
} else { // μ΄λ―Έ λ€λ₯Έ μ¬λμ΄ λμ¬ μ€μΌ κ²½μ°
System.out.println("λ€λ₯Έ μ¬λμ΄ μ΄λ―Έ λμ¬ μ€μ
λλ€.");
}
}
}
}
// λμκ΄μμ μ±
λ°λ©
public void returnBook(String title) {
for (Book book : books) {
String foundBook = book.getTitle();
// λ°λ©νλ €κ³ νλ μ±
μ μ λͺ©κ³Ό book 리μ€νΈμ μ μ₯λ μ±
μ μ λͺ©μ΄ μΌμΉν λ μ€ν
if (foundBook.equals(title)) {
// λ°λ©νκ³ μ νλ μ±
μ λμ¬ μνλ₯Ό νμΈ
if (book.getIsAvailable()){ // λμ¬ μνκ° trueμΈ κ²½μ°
System.out.println("μ±
μ΄ μ΄λ―Έ λ°λ©λ μνμ
λλ€.");
} else { // λμ¬ μνκ° falseμΈ κ²½μ°
book.setIsAvailable(true);
System.out.println("λ°λ© μ±κ³΅");
}
}
}
}
}
- Main.java
package librarySystem;
public class Main {
public static void main(String[] args) {
// λμκ΄ κ°μ²΄ μμ±
Library library = new Library();
// μ±
κ°μ²΄ 4κ° μμ±
Book bookA = new Book("μλ°μμ μ", "xxx", true);
Book bookB = new Book("μλ°μμ μ2", "ooo", false);
Book bookC = new Book("μλ°μμ μ3", "aaa", false);
Book bookD = new Book("μλ°μμ μ4", "uuu", true);
// λμκ΄μ μ±
μΆκ°
library.addBook(bookA);
library.addBook(bookB);
library.addBook(bookC);
library.addBook(bookD);
// λμκ΄μμ μ±
μ κ±°
library.removeBook(bookD);
// λμκ΄μ λͺ¨λ μ±
μΆλ ₯
library.lookUpAllBook();
// λμκ΄μμ μ±
λμ¬
library.rentBook(bookA.getTitle());
library.rentBook(bookB.getTitle());
// λμκ΄μμ μ±
λ°λ©
library.returnBook(bookA.getTitle());
library.returnBook(bookD.getTitle());
}
}
'Today I Learned(TIL) > μΈμ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Java μΈμ _κ°μ²΄ κ°μ κ²°ν©λμ λ€νμ± (1) | 2024.11.30 |
---|---|
Java μΈμ _λΉκ΅λ 무μμΌκΉ? (λλ±μ±κ³Ό λμΌμ±) (0) | 2024.11.22 |
Java ν΄λμ€_μ΄ν΄νμ§ λͺ»νλ©΄ λκ° μ μλ λ°©.. (0) | 2024.11.19 |
κΉμ§ QnA μΈμ (7) | 2024.11.16 |
Java μΈμ _νλ‘κ·Έλλ° κΈ°μ΄ (8) | 2024.11.14 |