Day 11(21.09.15) - Gomserker/Java-101 GitHub Wiki

12. 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ° (Object Oriented Programming)

※듀어가기에 μ•žμ„œ
μˆ˜μ—…μ˜ λ‚΄μš©λŒ€λ‘œ 정리λ₯Ό ν•˜κ³  μžˆκΈ°μ— μˆœμ„œκ°€ μ•žλ’€λ‘œ μ˜€λ½κ°€λ½ν•  수 있음. 예λ₯Όλ“€μ–΄ μ•žμ—μ„œ λ©”μ†Œλ“œ μ–˜κΈ°λ₯Ό λ¨Όμ € 해놓고 κ°‘μžκΈ° OOP μ–˜κΈ°λ₯Ό μ‹œμž‘ν•œλ‹€λŠ” κ²ƒμ²˜λŸΌ...

(1) 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄λž€?

ν˜„μ‹€ μ„Έκ³„μ—μ„œλŠ” μ–΄λ–€ μ œν’ˆμ„ λ§Œλ“€ λ•Œ, λ³„κ°œμ˜ λΆ€ν’ˆμ„ λ”°λ‘œ κ°œλ°œν•˜κ³  이λ₯Ό μ‘°λ¦½ν•˜λŠ” 과정을 톡해 μ œν’ˆ ν•˜λ‚˜λ₯Ό μ™„μ„±ν•œλ‹€. 이와 λ§ˆμ°¬κ°€μ§€λ‘œ, μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό κ°œλ°œν•  λ•Œμ—λ„ λΆ€ν’ˆμ— ν•΄λ‹Ήν•˜λŠ” 객체듀을 λ¨Όμ € λ§Œλ“€κ³  이 객체듀을 μ‘°λ¦½ν•΄μ„œ ν”„λ‘œκ·Έλž¨μ„ μ™„μ„±ν•˜λŠ” 기법이 μžˆλŠ”λ°, 이λ₯Ό 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°(Object Oriented Programming)이라고 ν•œλ‹€.

(2) κ°μ²΄λž€ 무엇인가?

객체의 μ •μ˜λŠ” 물리적으둜 μ‘΄μž¬ν•˜κ±°λ‚˜ μΆ”μƒμ μœΌλ‘œ 생각할 수 μžˆλŠ” 것 μ€‘μ—μ„œ μžμ‹ μ˜ 속성을 κ°€μ§€κ³  있고, λ‹€λ₯Έ 것과 식별 κ°€λŠ₯ν•œ 것을 λ§ν•œλ‹€. μ‰½κ²Œ λ§ν•˜λ©΄ 우리 주변에 μžˆλŠ” λͺ¨λ“  것듀이 μ „λΆ€ 객체가 될 수 μžˆλ‹€. κ°μ²΄λŠ” 속성과 λ™μž‘μœΌλ‘œ κ΅¬μ„±λ˜μ–΄ μžˆλŠ”λ°, 예λ₯Ό λ“€λ©΄ μžλ™μ°¨μ˜ 경우 색상, λͺ¨λΈκ³Ό 같은 속성이 있고, λ‹¬λ¦°λ‹€λŠ” λ™μž‘μ΄ μžˆλ‹€. μžλ°”μ—μ„  μ΄λŸ¬ν•œ 속성과 λ™μž‘μ„ ν•„λ“œμ™€ λ©”μ†Œλ“œλΌκ³  λΆ€λ₯Έλ‹€.

(3) 객체와 클래슀

ν˜„μ‹€μ—μ„œ κ°μ²΄λŠ” 섀계도λ₯Ό λ°”νƒ•μœΌλ‘œ λ§Œλ“€μ–΄μ§„λ‹€. μžλ™μ°¨λ₯Ό 예둜 λ“€λ©΄, μ‚¬λžŒλ“€μ΄ μžλ™μ°¨λ₯Ό μ΄μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” 곡μž₯μ—μ„œ 섀계도λ₯Ό 보고 μžλ™μ°¨λ₯Ό λ§Œλ“€μ–΄μ•Ό ν•œλ‹€. μ΄λŠ” OOPμ—μ„œλ„ λ§ˆμ°¬κ°€μ§€λ‹€. λ©”λͺ¨λ¦¬μ—μ„œ μ‚¬μš©ν•˜κ³  싢은 객체가 μžˆλ‹€λ©΄ μ„€κ³„λ„λ‘œ ν•΄λ‹Ή 객체λ₯Ό λ§Œλ“œλŠ” μž‘μ—…μ΄ ν•„μš”ν•œλ°, μ΄λ•Œ ν•„μš”ν•œ μ„€κ³„λ„μ˜ κ°œλ…μ΄ μžλ°”μ—μ„œλŠ” ν΄λž˜μŠ€λΌλŠ” 것이닀. ν΄λž˜μŠ€μ—λŠ” 객체λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•œ ν•„λ“œμ™€ λ©”μ†Œλ“œκ°€ μ •μ˜λ˜μ–΄ μžˆλŠ”λ°, 클래슀둜 λ§Œλ“€μ–΄μ§„ 객체λ₯Ό ν•΄λ‹Ή 클래슀의 객체(μΈμŠ€ν„΄μŠ€)라고 ν•œλ‹€. 그리고 이 ν΄λž˜μŠ€μ—μ„œ 객체λ₯Ό λ§Œλ“œλŠ” 과정을 객체화(μΈμŠ€ν„΄μŠ€ν™”)라고 ν•œλ‹€. μžλ™μ°¨μ—μ„œλ„ ν•˜λ‚˜μ˜ μ„€κ³„λ„λ‘œ μ—¬λŸ¬ μžλ™μ°¨λ₯Ό λ§Œλ“€ 수 μžˆλ“―μ΄, μžλ°”μ—μ„œλ„ ν•˜λ‚˜μ˜ ν΄λž˜μŠ€μ—μ„œ μ—¬λŸ¬ 개의 객체(μΈμŠ€ν„΄μŠ€)λ₯Ό 생성할 수 μžˆλ‹€.

13. 클래슀

(1) 클래슀 μ„ μ–Έ

클래슀λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„  λ¨Όμ € 클래슀λ₯Ό μ„ μ–Έν•΄μ•Ό ν•˜λŠ”λ°, μ΄λ•Œ 클래슀의 이름은 λ‹€λ₯Έ ν΄λž˜μŠ€μ™€ 식별될 수 μžˆλ„λ‘ ν•˜λŠ” 것이 μ€‘μš”ν•˜λ―€λ‘œ μ‹λ³„μž μž‘μ„± κ·œμΉ™μ— λ”°λΌμ„œ λ§Œλ“€μ–΄μ•Ό ν•œλ‹€.

  1. ν•˜λ‚˜ μ΄μƒμ˜ 문자둜 μž‘μ„±ν• κ²ƒ.
  2. 첫 번째 κΈ€μžμ—λŠ” μˆ«μžκ°€ 올 수 μ—†λ‹€.
  3. '$', '_' μ™Έμ˜ 특수 λ¬ΈμžλŠ” μ‚¬μš©ν•  수 μ—†λ‹€.
  4. μžλ°” ν‚€μ›Œλ“œλŠ” μ‚¬μš©ν•  수 μ—†λ‹€.
  5. μžλ°” μ–Έμ–΄λŠ” μ˜μ–΄ λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•œλ‹€. κ΄€λ‘€μ μœΌλ‘œλŠ” 클래슀의 첫 κΈ€μžλŠ” λŒ€λ¬Έμžλ₯Ό μ‚¬μš©ν•œλ‹€.

(2) 객체 생성과 클래슀 λ³€μˆ˜

클래슀λ₯Ό μ„ μ–Έν•˜κ³  μ»΄νŒŒμΌν–ˆλ‹€λ©΄ 이제 객체λ₯Ό 생성할 섀계도가 λ§Œλ“€μ–΄μ§„ 것이닀. μ—¬κΈ°μ„œ 이 섀계도인 클래슀λ₯Ό λ°”νƒ•μœΌλ‘œ 객체λ₯Ό μƒμ„±ν•˜λ €λ©΄ λ‹€μŒκ³Ό 같이 new μ—°μ‚°μž(μƒμ„±μž)λ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€.

new 클래슀λͺ…();

newλŠ” ν΄λž˜μŠ€λ‘œλΆ€ν„° 객체λ₯Ό μƒμ„±μ‹œν‚€λŠ” μ—°μ‚°μžμ΄λ‹€. new μ—°μ‚°μž λ’€μ—λŠ” μƒμ„±μžκ°€ μ˜€λŠ”λ°, μƒμ„±μžλŠ” 클래슀λͺ…() ν˜•νƒœλ₯Ό ν•˜κ³  μžˆλ‹€. new μ—°μ‚°μžλ‘œ μƒμ„±λœ κ°μ²΄λŠ” λ©”λͺ¨λ¦¬ μ˜μ—­ μ€‘μ—μ„œλ„ heap μ˜μ—­μ— μƒμ„±λ˜λŠ”λ°, ν˜„μ‹€μ—μ„œλ„ 물건을 놓은 μœ„μΉ˜λ₯Ό λͺ¨λ₯΄λ©΄ 물건을 μ‚¬μš©ν•  수 없듯이 μžλ°”μ˜ 객체도 λ§ˆμ°¬κ°€μ§€μ΄λ‹€. κ·Έλž˜μ„œ new μ—°μ‚°μžλŠ” heap μ˜μ—­μ— 객체λ₯Ό μƒμ„±μ‹œν‚¨ ν›„, stack μ˜μ—­μ— 객체의 μ£Όμ†Œλ₯Ό λ¦¬ν„΄ν•˜λ„λ‘ λ˜μ–΄ μžˆλ‹€.
λ‹€μŒ ν”„λ‘œκ·Έλž¨μ€ Student 클래슀λ₯Ό μ„ μ–Έν•˜κ³  StudentExample 클래슀의 main() methodμ—μ„œ Student 객체λ₯Ό μƒμ„±ν•˜λŠ” 과정을 λ‚˜νƒ€λ‚Έ ν”„λ‘œκ·Έλž¨μ΄λ‹€.

//Student.java
public class Student{
}
//StudentExample.java  
public class StudentExample {
 public static void main(String[] args) {
   Student s1 = new Student();
   System.out.println("s1 λ³€μˆ˜κ°€ Student 객체λ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€.");

   Student s2 = new Student();
   System.out.println("s2 λ³€μˆ˜κ°€ 또 λ‹€λ₯Έ Student 객체λ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€.");
  }
 }

result

s1 λ³€μˆ˜κ°€ Student 객체λ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€.  
s2 λ³€μˆ˜κ°€ 또 λ‹€λ₯Έ Student 객체λ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€.

μ˜ˆμ œκ°€ μ‹€ν–‰λ˜λ©΄ stack λ©”λͺ¨λ¦¬μ™€ heap λ©”λͺ¨λ¦¬μ— 각각 클래슀 λ³€μˆ˜μ™€ 객체가 μƒμ„±λœλ‹€. Student ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ§€λ§Œ new μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•œ 횟수만큼 객체가 λ©”λͺ¨λ¦¬μ— μƒμ„±λœλ‹€. μ΄λŸ¬ν•œ 객체듀은 Student이 μΈμŠ€ν„΄μŠ€λ“€μ΄λ‹€. 같은 ν΄λž˜μŠ€μ—μ„œ μƒμ„±λ˜μ—ˆμ–΄λ„ 각각의 Student κ°μ²΄λŠ” μžμ‹ λ§Œμ˜ 고유 데이터λ₯Ό κ°€μ§€λ©΄μ„œ λ©”λͺ¨λ¦¬μ—μ„œ ν™œλ™ν•˜κ²Œ λœλ‹€. 즉, s1이 μ°Έμ‘°ν•˜λŠ” Student 객체와 s2κ°€ μ°Έμ‘°ν•˜λŠ” Student κ°μ²΄λŠ” μ™„μ „νžˆ λ…λ¦½λœ μ„œλ‘œ λ‹€λ₯Έ κ°μ²΄λΌλŠ” λœ»μ΄λ‹€.

(3) 클래슀의 ꡬ성 멀버

ν΄λž˜μŠ€μ—λŠ” 객체가 κ°€μ Έμ•Όν•  ꡬ성 멀버가 μ„ μ–Έλœλ‹€. ꡬ성 λ©€λ²„μ—λŠ” ν•„λ“œ(Field), μƒμ„±μž(Constructor), λ©”μ†Œλ“œ(Method)κ°€ μžˆλ‹€. 이 ꡬ성 λ©€λ²„λŠ” μƒλž΅λ˜κ±°λ‚˜ μ—¬λŸ¬κ°œ μž‘μ„±λ  수 μžˆλ‹€.

public class ClassName {
   //field : 객체의 데이터가 μ €μž₯λ˜λŠ” κ³³
   int fieldName; 


   //constructor  :  객체 생성 μ‹œ μ΄ˆκΈ°ν™” μ—­ν•  λ‹΄λ‹Ή
   ClassName() { ...}

   //method : 객체의 λ™μž‘μ— ν•΄λ‹Ήν•˜λŠ” μ‹€ν–‰ 블둝
   void methodName() {...}
}

ν•„λ“œ(field)

객체의 고유 데이터, λΆ€ν’ˆ 객체, μƒνƒœ 정보λ₯Ό μ €μž₯ν•˜λŠ” 곳이닀. μ„ μ–Έ ν˜•νƒœλŠ” λ³€μˆ˜μ™€ λΉ„μŠ·ν•˜μ§€λ§Œ ν•„λ“œλ₯Ό λ³€μˆ˜λΌκ³  λΆ€λ₯΄μ§€λŠ” μ•ŠλŠ”λ‹€. λ³€μˆ˜λŠ” μƒμ„±μžμ™€ λ©”μ†Œλ“œ λ‚΄μ—μ„œλ§Œ μ‚¬μš©λ˜κ³  μƒμ„±μžμ™€ λ©”μ†Œλ“œκ°€ μ‹€ν–‰ μ’…λ£Œλ˜λ©΄ μžλ™μœΌλ‘œ μ†Œλ©Έλœλ‹€. 반면, ν•„λ“œλŠ” μƒμ„±μžμ™€ λ©”μ†Œλ“œ μ „μ²΄μ—μ„œ μ‚¬μš©λ˜λ©° 객체가 μ†Œλ©Έλ˜μ§€ μ•ŠλŠ” ν•œ 계속 μ‘΄μž¬ν•œλ‹€.

μƒμ„±μž(constructor)

μƒμ„±μžλŠ” new μ—°μ‚°μžλ‘œ ν˜ΈμΆœλ˜λŠ” νŠΉλ³„ν•œ μ€‘κ΄„ν˜Έ {} 블둝이닀. μƒμ„±μžμ˜ 역할은 객체 μƒμ„±μ‹œ μ΄ˆκΈ°ν™”μΈλ°, ν•„λ“œλ₯Ό μ΄ˆκΈ°ν™” ν•˜κ±°λ‚˜, ν—€μ†Œλ“œλ₯Ό ν˜ΈμΆœν•΄μ„œ 객체λ₯Ό μ‚¬μš©ν•  μ€€λΉ„λ₯Ό ν•œλ‹€. λ©”μ†Œλ“œμ™€ λΉ„μŠ·ν•˜κ²Œ μƒκ²Όμ§€λ§Œ 클래슀 μ΄λ¦„μœΌλ‘œ λ˜μ–΄ 있고, 리턴 νƒ€μž…μ΄ μ—†λ‹€.

λ©”μ†Œλ“œ(method)

λ©”μ†Œλ“œλŠ” 객체의 λ™μž‘μ— ν•΄λ‹Ήν•˜λŠ” μ€‘κ΄„ν˜Έ {} 블둝을 λ§ν•œλ‹€. 이 μ€‘κ΄„ν˜Έ λΈ”λ‘μ˜ 이름이 λ©”μ†Œλ“œμ˜ 이름이 λœλ‹€. λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄ μ€‘κ΄„ν˜Έ 블둝 μ•ˆμ— μžˆλŠ” λͺ¨λ“  μ½”λ“œλ“€μ΄ μΌκ΄„μ μœΌλ‘œ μ‹€ν–‰λ˜λŠ”λ°, ν•„λ“œλ₯Ό 읽고 μˆ˜μ •ν•˜λŠ” 역할도 ν•˜μ§€λ§Œ, λ‹€λ₯Έ 객체λ₯Ό μƒμ„±ν•΄μ„œ λ‹€μ–‘ν•œ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κΈ°λ„ ν•˜λ©°, 객체 κ°„μ˜ 데이터 μ „λ‹¬μ˜ μˆ˜λ‹¨μœΌλ‘œλ„ μ‚¬μš©λœλ‹€.

14. ν•„λ“œ(field)

ν•„λ“œλŠ” 객체의 고유 데이터, 객체가 κ°€μ Έμ•Όν•  λΆ€ν’ˆ λ“±μ˜ 데이터λ₯Ό μ €μž₯ν•˜λŠ” 곳이닀. μžλ™μ°¨ 객체가 μžˆλ‹€κ³  κ°€μ •ν• λ•Œ, μ œμ‘°μ‚¬, λͺ¨λΈ, 색깔 등은 고유 데이터에 ν•΄λ‹Ήν•˜κ³ , ν˜„μž¬ 속도, μ—”μ§„ RPM 등은 μƒνƒœ 데이터에 ν•΄λ‹Ήν•˜λ©°, 차체, μ—”μ§„, νƒ€μ΄μ–΄λŠ” λΆ€ν’ˆμ— ν•΄λ‹Ήν•œλ‹€ λ³Ό 수 μžˆλ‹€. λ”°λΌμ„œ ν•΄λ‹Ή 데이터듀은 μžλ™μ°¨μ˜ 클래슀λ₯Ό 섀계할 λ•Œ ν•„λ“œλ‘œ μ„ μ–Έλ˜μ–΄μ•Ό ν•œλ‹€.

public class Car {
//μžλ™μ°¨ 클래슀 μ„ μ–Έ

  String company;
  String model;
  String color;
  int maxSpeed;
// 고유 데이터

  int speed;
  int rpm;
// μƒνƒœ

  Body body;
  Engine engine;
  Tire tire;
// λΆ€ν’ˆ

(1) ν•„λ“œ μ„ μ–Έ

ν•„λ“œ 선언은 클래슀 μ€‘κ΄„ν˜Έ 블둝 μ–΄λ””μ„œλ“  κ°€λŠ₯ν•˜λ‹€. ν•˜μ§€λ§Œ μƒμ„±μžμ™€ λ©”μ†Œλ“œμ˜ μ€‘κ΄„ν˜Έ 블둝 λ‚΄λΆ€μ—μ„œλŠ” 선언될 수 μ—†λ‹€. μƒμ„±μžμ™€ λ©”μ†Œλ“œμ˜ μ€‘κ΄„ν˜Έ 블둝 내뢀에 μ„ μ–Έλœ 것은 μ „λΆ€ 둜컬 λ³€μˆ˜λ‘œ μ·¨κΈ‰λ˜μ–΄ λ‹€λ₯Έ λΈ”λ‘μ—μ„œ μ‚¬μš©ν•  수 μ—†κ²Œ λœλ‹€. ν•„λ“œ 선언은 λ³€μˆ˜μ˜ μ„ μ–Έκ³Ό λΉ„μŠ·ν•˜κΈ° λ•Œλ¬Έμ— ν•„λ“œλ₯Ό 클래슀 멀버 λ³€μˆ˜λΌκ³  λΆ€λ₯΄κΈ°λ„ ν•œλ‹€. (ꢌμž₯ν•˜μ§€λŠ” μ•ŠμŒ) μ„ μ–Έ ν• λ•ŒλŠ” μ•„λž˜μ™€ 같이 μ„ μ–Έν•œλ‹€.

νƒ€μž… ν•„λ“œ = μ΄ˆκΈ°κ°’;

νƒ€μž…μ—λŠ” κΈ°λ³Έ νƒ€μž…, μ°Έμ‘° νƒ€μž…μ΄ λͺ¨λ‘ 올 수 있으며, μ΄ˆκΈ°ν™”λŠ” μƒλž΅ κ°€λŠ₯ν•˜λ‹€.

(2) ν•„λ“œ μ‚¬μš©

ν•„λ“œ μ‚¬μš©μ˜ μ˜λ―ΈλŠ” ν•„λ“œκ°’μ„ 읽고 λ³€κ²½ν•œλ‹€λŠ” 것을 λ§ν•œλ‹€. 클래슀 λ‚΄λΆ€μ˜ μƒμ„±μžλ‚˜ λ©”μ†Œλ“œμ—μ„œ μ‚¬μš©ν• λ• λ‹¨μˆœνžˆ ν•„λ“œ μ΄λ¦„μœΌλ‘œ 읽고 λ³€κ²½ν•˜λ©΄ λ˜μ§€λ§Œ μ™ΈλΆ€μ—μ„œ μ‚¬μš©ν•  κ²½μš°μ—” ν΄λž˜μŠ€λ‘œλΆ€ν„° 객체λ₯Ό μƒμ„±ν•œ 뒀에 ν•„λ“œλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. κ·Έ μ΄μœ λŠ” ν•„λ“œλŠ” 객체에 μ†Œμ†λœ 데이터이기 λ•Œλ¬Έμ΄λ‹€. λ”°λΌμ„œ 객체가 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ° ν•„λ“œκ°€ μ‘΄μž¬ν•  수 μ—†λ‹€.

public class WhoseCar
 void method() {
  Car myCar = new Car();
  // Car 객체 생성
  myCar.speed = 60;
  // ν•„λ“œ μ‚¬μš©
}
public class Car
//field
int speed;

//constructor
Car() {
 speed = 0;
}

//method
void method(...) {
 speed = 10;
}

μœ„ μ˜ˆμ‹œμ—μ„œ Car 클래슀의 speed ν•„λ“œλŠ” μƒμ„±μžμ™€ λ©”μ†Œλ“œμ—μ„œ 변경이 κ°€λŠ₯ν•˜λ‹€. μ‚¬μš© 방법은 λ³€μˆ˜μ™€ λ™μΌν•˜μ§€λ§Œ 차이점은 λ³€μˆ˜λŠ” μžμ‹ μ΄ μ„ μ–Έλœ 블둝 λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆμ§€λ§Œ ν•„λ“œλŠ” μƒμ„±μžμ™€ λͺ¨λ“  λ©”μ†Œλ“œμ—μ„œ μ‚¬μš©ν•  수 μžˆλ‹€. μ™ΈλΆ€ 클래슀인 WhoseCar ν΄λž˜μŠ€μ—μ„œ Car 클래슀의 ν•„λ“œμΈ speedλ₯Ό μ‚¬μš©ν•˜λ €λ©΄ Car 객체λ₯Ό λ¨Όμ € 생성해야 ν•œλ‹€.
myCar λ³€μˆ˜κ°€ Car 객체λ₯Ό μ°Έμ‘°ν•˜κ²Œ 되면 λ„νŠΈ(.) μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•΄ speed ν•„λ“œμ— μ ‘κ·Όν•  수 있게 λœλ‹€.

(3) 예제

  1. λ‹€μŒμ€ κ°•μ•„μ§€μ˜ 정보λ₯Ό 좜λ ₯ν•΄μ£ΌλŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•œ 것이닀.
//Dog.java
public class Dog {
	
	// field μ„ μ–Έ
	String name;
	int age;
	double weight;
	
	//κΈ°λŠ₯ method
	void bark() {
		System.out.println("멍멍");
	}
	
	//κ°•μ•„μ§€μ˜ 정보 좜λ ₯
	void printInfo() {
		System.out.println(name);
		System.out.println(age);
		System.out.println(weight);
	}	
}
public class WhoseDog {
 public static void main(String[] args) {
   //κ°•μ•„μ§€ ν•œλ§ˆλ¦¬ 객체 생성
   Dog dog1 = new Dog(); //Dog 객체λ₯Ό μ°Έμ‘°ν•˜λŠ” μ°Έμ‘°λ³€μˆ˜ dog1
	dog1.name = "μ΄ˆμ½”";
	dog1.age = 3;
	dog1.weight = 3.5;
// Dog 클래슀의 ν•„λ“œμ— 정보 μ €μž₯
	dog1.printInfo();
// 정보λ₯Ό 좜λ ₯ν•˜λŠ” λ©”μ†Œλ“œ printInfo() μ‹€ν–‰
  }
}

result

μ΄ˆμ½”
3
3.5
  1. λ‹€μŒμ€ μžλ™μ°¨μ˜ μ œμ›μ„ 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•œ 것이닀.
    result
manufacturer: ν˜„λŒ€μžλ™μ°¨
model: grandeur
color: black
maximum speed: 350
current speed: 0
changed speed: 60