Notice
Recent Posts
Recent Comments
Β«   2024/12   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
In Total
관리 메뉴

A Joyful AI Research Journey🌳😊

[33] 230214 Java Ch. 6 클래슀: 6. νŒ¨ν‚€μ§€μ™€ μ ‘κ·Ό μ œν•œμž, *Getter/Setter [K-디지털 νŠΈλ ˆμ΄λ‹ 33일] λ³Έλ¬Έ

🌳Bootcamp Revision 2023✨/Spring Framework, Java

[33] 230214 Java Ch. 6 클래슀: 6. νŒ¨ν‚€μ§€μ™€ μ ‘κ·Ό μ œν•œμž, *Getter/Setter [K-디지털 νŠΈλ ˆμ΄λ‹ 33일]

yjyuwisely 2023. 2. 14. 12:47

230214 Tue 33rd class

Ch. 6 클래슀
진도: p. 286 ~ (ꡐ재: 혼자 κ³΅λΆ€ν•˜λŠ” μžλ°”, μ €μž: μ‹ μš©κΆŒ)
ν•œλΉ›λ―Έλ””μ–΄_혼곡자_μš©μ–΄μ§‘.pdf
μš©μ–΄ μ°Έκ³ 

μžλ°” μ ‘κ·Ό μ œν•œμžμ˜ μ’…λ₯˜μ™€ 차이(public, protected, private)

 

혼자 κ³΅λΆ€ν•˜λŠ” μžλ°” | μ‹ μš©κΆŒ - ꡐ보문고

혼자 κ³΅λΆ€ν•˜λŠ” μžλ°” | 혼자 해도 μΆ©λΆ„ν•˜λ‹€! 1:1 κ³Όμ™Έν•˜λ“― λ°°μš°λŠ” μžλ°” ν”„λ‘œκ·Έλž˜λ° μžμŠ΅μ„œ (JAVA 8 &11 지원) 이 책은 λ…ν•™μœΌλ‘œ μžλ°”λ₯Ό λ°°μš°λŠ” μž…λ¬Έμžκ°€ ‘κΌ­ ν•„μš”ν•œ λ‚΄μš©μ„ μ œλŒ€λ‘œ’ ν•™μŠ΅ν•  수 μžˆλ„

product.kyobobook.co.kr

였늘 배운 것 쀑 κΈ°μ–΅ν•  것을 μ •λ¦¬ν–ˆλ‹€. 


μ§€λ‚œ μˆ˜μ—… λ•Œ 배운 것 쀑 λ‹€μ‹œ κΈ°μ–΅ν•  것

2023.02.13 - [1. Revision 2023/Java] - [32] 230213 Ch. 6 클래슀(3): μΈμŠ€ν„΄μŠ€ 멀버와 정적 멀버

μΈμŠ€ν„΄μŠ€: ν΄λž˜μŠ€λ‘œλΆ€ν„° λ§Œλ“€μ–΄μ§„ 객체
μΈμŠ€ν„΄μŠ€(instance) 멀버: μΈμŠ€ν„΄μŠ€ λ©€λ²„λž€ κ°μ²΄(μΈμŠ€ν„΄μŠ€)λ₯Ό μƒμ„±ν•œ ν›„ μ‚¬μš©ν•  수 μžˆλŠ” ν•„λ“œμ™€ λ©”μ„œλ“œλ₯Ό λ§ν•˜λŠ”λ°, 이듀은 각각 μΈμŠ€ν„΄μŠ€ ν•„λ“œ, μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œλΌκ³  λΆ€λ₯Έλ‹€.

μΈμŠ€ν„΄μŠ€ ν•„λ“œμ™€ λ©”μ„œλ“œλŠ” 객체에 μ†Œμ†λœ 멀버이기 λ•Œλ¬Έμ— 객체 μ—†μ΄λŠ” μ‚¬μš©ν•  수 μ—†λ‹€.


2023.02.01 - [1. Revision 2023/Java] - [24] 230201 Ch. 3 μžλ°” μ—°μ‚°μž: μ—°μ‚°μžμ™€ 연산식, μ—°μ‚°μžμ˜ μ’…λ₯˜

논리 λΆ€μ • μ—°μ‚°μž(!) p. 113

논리 λΆ€μ • μ—°μ‚°μžλŠ” trueλ₯Ό false둜, falseλ₯Ό true둜 λ³€κ²½ν•˜κΈ° λ•Œλ¬Έμ— boolean νƒ€μž…μ—λ§Œ μ‚¬μš©ν•  수 μžˆλ‹€.

μ—°μ‚°μž μ„€λͺ…
! ν”Όμ—°μ‚°μž(x) ν”Όμ—°μ‚°μžκ°€ true이면 false 값을 μ‚°μΆœ
ν”Όμ—°μ‚°μžκ°€ false이면 true 값을 μ‚°μΆœ

논리 λΆ€μ • μ—°μ‚°μžλŠ” 쑰건문과 μ œμ–΄λ¬Έμ—μ„œ μ‘°κ±΄μ‹μ˜ 값을 λΆ€μ •ν•˜λ„λ‘ν•΄μ„œ μ‹€ν–‰ 흐름을 μ œμ–΄ν•  λ•Œ 주둜 μ‚¬μš©ν•œλ‹€.
λ˜ν•œ λ‘ 가지 μƒνƒœ(true/false)λ₯Ό λ²ˆκ°ˆμ•„κ°€λ©° λ²ˆκ²½ν•˜λŠ” ν† κΈ€(toggle) κΈ°λŠ₯을 κ΅¬ν˜„ν•  λ•Œλ„ μ‚¬μš©ν•œλ‹€.


논리 λΆ€μ • μ—°μ‚°μž(!)λŠ” true 값을 false둜, false 값을 true둜 λ°˜μ „μ‹œμΌœμ€€λ‹€.

예λ₯Ό λ“€μ–΄, 'if(쑰건문)'은 쑰건문이 참일 경우 if 문이 μ‹€ν–‰λœλ‹€. ν•˜μ§€λ§Œ 'if(!쑰건문)'이 되면, 쑰건문이 거짓이면 참으둜 λ°˜μ „μ‹œν‚€κ³  참이면 κ±°μ§“μœΌλ‘œ λ°˜μ „μ‹œν‚¨λ‹€. λ”°λΌμ„œ 쑰건문이 거짓일 λ•Œ 논리 λΆ€μ • μ—°μ‚°μž(!)λ₯Ό 뢙이면 참으둜 λ°˜μ „λ˜λ―€λ‘œ if 문이 μ‹€ν–‰λœλ‹€.μ•„λž˜μ˜ 'if(쑰건문)'은 같은 의미λ₯Ό μ§€λ‹Œλ‹€.

if(Bool_true == 0){ ... }
if(!Bool_true){ ... }

μ°Έκ³ : https://sweetnew.tistory.com/m/50


boolean isValid = true;

if (isValid == false) {
    System.out.println("Invalid");
}Copy

The above version is relatively easy to read, though it might be harder to do if the logical expression was more complex. Java has an alternative for us, though, in the form of the not operator:

boolean isValid = true;

if (!isValid) {
    System.out.println("Invalid");
}

μ°Έκ³ : https://www.baeldung.com/java-using-not-in-if-conditions

When applied to a boolean value, the not operator turns true to false and false to true:

System.out.println(!true);   // prints false 
System.out.println(!false);  // prints true 
System.out.println(!!false); // prints false

μΈμŠ€ν„΄μŠ€ 멀버
class A{
          //ν•„λ“œ
          String Color;           //μΈμŠ€ν„΄μŠ€ ν•„λ“œ
          int speed;               //μΈμŠ€ν„΄μŠ€ ν•„λ“œ
          //μƒμ„±μž
          //λ©”μ„œλ“œ
          void run(){}             //μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ
}

정적 멀버
class A{
          //ν•„λ“œ
          static String Color; //정적 ν•„λ“œ
          static int speed;     //정적 ν•„λ“œ
          //μƒμ„±μž
          //λ©”μ„œλ“œ
          static void run(){} //μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ
}     

class ATest{
	public static void main(String[] args){
    	//정적 멀버 호좜
        //객체 생성없이 클래슀λͺ…μœΌλ‘œ
        //ν•„λ“œ 및 λ©”μ„œλ“œ μ—°κ²°
        Static.Color = "black";
        Static.speed = 10;
        Static.run();
        
        //μΈμŠ€ν„΄μŠ€ 멀버 호좜
        //객체 생성 ν›„ μ°Έμ‘°λ³€μˆ˜λ₯Ό 톡해
        //ν•„λ“œ 및 λ©”μ„œλ“œ μ—°κ²°
        Instance in = new Instance();
        in.Color = "black";
        in.speed = 10;
        in.run();
int a = 10;
a = 20;(O)

final int a = 10; //final ν•„λ“œ
static final int a = 10; //μƒμˆ˜ ν•„λ“œ

The static keyword means the value is the same for every instance of the class.
The final keyword means once the variable is assigned a value it can never be changed.

static κ°μ²΄λ§ˆλ‹€ κ°€μ§ˆ ν•„μš”κ°€ μ—†λŠ” 곡용으둜 μ‚¬μš©ν•˜λŠ” ν•„λ“œ ν˜Ήμ€ μΈμŠ€ν„΄μŠ€ ν•„λ“œλ₯Ό ν¬ν•¨ν•˜μ§€ μ•ŠλŠ” λ©”μ„œλ“œ
the value is the same for every instance of the class.
final ν•œ 번 값이 정해지고 λ‚˜λ©΄ 값을 λ°”κΏ€ 수 μ—†λŠ” ν•„λ“œ
once the variable is assigned a value it can never be changed.
static final λͺ¨λ“  μ˜μ—­μ—μ„œ κ³ μ •λœ κ°’μœΌλ‘œ μ‚¬μš©ν•˜λŠ” μƒμˆ˜

μ°Έκ³ : https://gobae.tistory.com/3


Ch. 6 ν΄λž˜μŠ€

μ±…μ˜ λͺ©μ°¨
06-1 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°
06-2 ν•„λ“œ
06-3 μƒμ„±μž
06-4 λ©”μ†Œλ“œ
06-5 μΈμŠ€ν„΄μŠ€ 멀버와 정적 멀버
06-6 νŒ¨ν‚€μ§€μ™€ μ ‘κ·Ό μ œν•œμž

6.6 νŒ¨ν‚€μ§€μ™€ μ ‘κ·Ό μ œν•œμž

μžλ°”μ—μ„œλŠ” 클래슀λ₯Ό μ²΄κ³„μ μœΌλ‘œ κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ νŒ¨ν‚€μ§€(package)λ₯Ό μ‚¬μš©ν•œλ‹€. 
μžλ°”μ—μ„œ νŒ¨ν‚€μ§€(package)λž€ ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€μ˜ 집합을 μ˜λ―Έν•œλ‹€. 

μœˆλ„μš°

폴더
λ¬Έμ„œ\pdfλ¬Έμ„œ\abc.pdf
λ¬Έμ„œ\μ—‘μ…€λ¬Έμ„œ\abc.xsl
λ¬Έμ„œ\ν•œκΈ€λ¬Έμ„œ\abc.hwp
μžλ°”

νŒ¨ν‚€μ§€
μƒμœ„νŒ¨ν‚€μ§€.ν•˜μœ„νŒ¨ν‚€μ§€.클래슀

λ¬Έμ„œ.pdfλ¬Έμ„œ.abc클래슀
λ¬Έμ„œ.μ—‘μ…€λ¬Έμ„œ.abc클래슀
λ¬Έμ„œ.ν•œκΈ€λ¬Έμ„œ.abc클래슀

νŒ¨ν‚€μ§€μ˜ 물리적인 ν˜•νƒœλŠ” 파일 μ‹œμŠ€ν…œμ˜ 폴더이닀. 
νŒ¨ν‚€μ§€λŠ” 폴더 κΈ°λŠ₯도 ν•˜κ³ , 클래슀의 μΌλΆ€λΆ„μœΌλ‘œ 클래슀λ₯Ό μœ μΌν•˜κ²Œ λ§Œλ“€μ–΄μ£ΌλŠ” μ‹λ³„μž 역할을 ν•œλ‹€.
클래슀 이름이 λ™μΌν•˜λ”λΌλ„ νŒ¨ν‚€μ§€κ°€ λ‹€λ₯΄λ©΄ λ‹€λ₯Έ 클래슀둜 μΈμ‹ν•œλ‹€.
클래슀의 전체 이름은 'νŒ¨ν‚€μ§€ 이름+클래슀 이름'인데
νŒ¨ν‚€μ§€κ°€ 상, ν•˜μœ„λ‘œ κ΅¬λΆ„λ˜μ–΄ μžˆλ‹€λ©΄ λ„νŠΈ(.)λ₯Ό μ‚¬μš©ν•΄μ„œ λ‹€μŒκ³Ό 같이 ν‘œν˜„ν•œλ‹€. 

μƒμœ„νŒ¨ν‚€μ§€.ν•˜μœ„νŒ¨ν‚€μ§€.클래슀
java.lang.String

 

μœ„μ˜ μ˜ˆμ œμ—μ„œ μžλ°”μ˜ String ν΄λž˜μŠ€λŠ” java.lang νŒ¨ν‚€μ§€μ— μ†ν•œ ν΄λž˜μŠ€λΌλŠ” 것을 μ•Œ 수 μžˆλ‹€.


6.6.1 νŒ¨ν‚€μ§€ μ„ μ–Έ p. 287

package μƒμœ„νŒ¨ν‚€μ§€.ν•˜μœ„νŒ¨ν‚€μ§€;
public class ClassName { ... }

ex) Car ν΄λž˜μŠ€κ°€ com.mycompany νŒ¨ν‚€μ§€μ— 속해야 ν•œλ‹€λ©΄ λ‹€μŒκ³Ό 같이 Car 클래슀λ₯Ό μž‘μ„±ν•΄μ•Ό ν•œλ‹€.

package com.mycompany;
public class Car {...}

νŒ¨ν‚€μ§€ μ΄λ¦„μ˜ κ·œμΉ™
- 숫자둜 μ‹œμž‘ X, _, $λ₯Ό μ œμ™Έν•œ 특수 문자λ₯Ό μ‚¬μš©ν•΄μ„œλŠ” μ•ˆ λœλ‹€.
- java둜 μ‹œμž‘ν•˜λŠ” νŒ¨ν‚€μ§€λŠ” μžλ°” ν‘œμ€€ APIμ—μ„œλ§Œ μ‚¬μš©ν•˜λ―€λ‘œ μ‚¬μš©ν•΄μ„œλŠ” μ•ˆ λœλ‹€.
- λͺ¨λ‘ μ†Œλ¬Έμžλ‘œ μž‘μ„±ν•˜λŠ” 것이 관둀이닀.  

νŒ¨ν‚€μ§€ μ΄λ¦„μ˜ 쀑볡 방지 방법
: 도메인 이름 μ—­μˆœ + ν”„λ‘œμ νŠΈ 이름

com.samsung.projectname
com.hyundai.projectname
com.lg.projectname
org.apache.projectname

1) μ΄ν΄λ¦½μŠ€μ—μ„œ νŒ¨ν‚€μ§€ 생성과 클래슀 생성

ex) νŒ¨ν‚€μ§€ 이름: sec06.exam01
Name: Car


2) import λ¬Έ p. 290

package → import → class μ„ μ–Έ μˆœμ΄λ‹€. 

μ‚¬μš©ν•˜κ³ μž ν•˜λŠ” 클래슀 λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€κ°€ λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— μ†Œμ†λ˜μ–΄ μžˆλ‹€λ©΄, import문으둜 ν•΄λ‹Ή νŒ¨ν‚€μ§€μ˜ 클래슀 λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό 가져와 μ‚¬μš©ν•  κ²ƒμž„μ„ μ»΄νŒŒμΌλŸ¬μ—κ²Œ μ•Œλ €μ€˜μ•Ό ν•œλ‹€.

import μƒμœ„νŒ¨ν‚€μ§€.ν•˜μœ„νŒ¨ν‚€μ§€.ν΄λž˜μŠ€μ΄λ¦„;
import μƒμœ„νŒ¨ν‚€μ§€.ν•˜μœ„νŒ¨ν‚€μ§€.*;

λ§Œμ•½ μ‚¬μš©ν•˜κ³ μž ν•˜λŠ” ν΄λž˜μŠ€λ“€μ΄ λ™μΌν•œ νŒ¨ν‚€μ§€ μ†Œμ†μ΄λΌλ©΄ κ°œλ³„ import문을 μž‘μ„±ν•˜λŠ” κ²ƒλ³΄λ‹€λŠ” *λ₯Ό μ΄μš©ν•΄μ„œ ν•΄λ‹Ή νŒ¨ν‚€μ§€μ— μ†Œμ†λœ ν΄λž˜μŠ€λ“€μ„ μ‚¬μš©ν•  κ²ƒμž„μ„ μ•Œλ €μ£ΌλŠ” 것도 쒋은 방법이닀.

import νŒ¨ν‚€μ§€μ΄λ¦„.ν΄λž˜μŠ€μ΄λ¦„;
import νŒ¨ν‚€μ§€μ΄λ¦„.*;

νŒ¨ν‚€μ§€ μ΄λ¦„μ—λŠ” νŒ¨ν‚€μ§€μ˜ κ²½λ‘œκΉŒμ§€ ν¬ν•¨ν•œ ν’€ λ„€μž„μ„ λͺ…μ‹œν•΄μ•Ό ν•œλ‹€. 첫 번째 방법은 ν•΄λ‹Ή νŒ¨ν‚€μ§€μ˜ νŠΉμ • ν΄λž˜μŠ€λ§Œμ„ μ‚¬μš©ν•˜κ³ μž ν•  λ•Œ μ‚¬μš©ν•œλ‹€. 두 번째 방법은 ν•΄λ‹Ή νŒ¨ν‚€μ§€μ˜ λͺ¨λ“  클래슀λ₯Ό 클래슀 μ΄λ¦„λ§ŒμœΌλ‘œ μ‚¬μš©ν•˜κ³  싢을 λ•Œ μ‚¬μš©ν•œλ‹€.

μΈν„°νŽ˜μ΄μŠ€(interface)λž€ λ‹€λ₯Έ 클래슀λ₯Ό μž‘μ„±ν•  λ•Œ 기본이 λ˜λŠ” 틀을 μ œκ³΅ν•˜λ©΄μ„œ, λ‹€λ₯Έ 클래슀 μ‚¬μ΄μ˜ 쀑간 맀개 μ—­ν• κΉŒμ§€ λ‹΄λ‹Ήν•˜λŠ” μΌμ’…μ˜ 좔상 클래슀λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. μžλ°”μ—μ„œ 좔상 ν΄λž˜μŠ€λŠ” 좔상 λ©”μ„œλ“œλΏλ§Œ μ•„λ‹ˆλΌ μƒμ„±μž, ν•„λ“œ, 일반 λ©”μ„œλ“œλ„ 포함할 수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ μΈν„°νŽ˜μ΄μŠ€(interface)λŠ” μ˜€λ‘œμ§€ 좔상 λ©”μ„œλ“œμ™€ μƒμˆ˜λ§Œμ„ 포함할 수 μžˆμŠ΅λ‹ˆλ‹€.
μ°Έκ³ : http://www.tcpschool.com/java/java_polymorphism_interface

import 문을 μ„ μ–Έν•  λ•Œ λ³„ν‘œ(*)λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 ν•΄λ‹Ή νŒ¨ν‚€μ§€μ— ν¬ν•¨λœ λ‹€λ₯Έ λͺ¨λ“  ν•˜μœ„ νŒ¨ν‚€μ§€μ˜ ν΄λž˜μŠ€κΉŒμ§€ 포함해 μ£ΌλŠ” 것은 μ•„λ‹ˆλ‹€.

import java.awt.*;
import java.util.*;

즉, μœ„μ™€ 같은 두 개의 import 문을 μ•„λž˜μ™€ 같이 ν•˜λ‚˜μ˜ import 문으둜 ν‘œν˜„ν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

import java.*;

예제) import문
Tire ν΄λž˜μŠ€λŠ” import된 두 νŒ¨ν‚€μ§€(hankook, kumho)에 λͺ¨λ‘ 있기 λ•Œλ¬Έμ— νŒ¨ν‚€μ§€ 이름과 ν•¨κ»˜ 전체 이름이 κΈ°μˆ λ˜μ–΄μ•Ό ν•œλ‹€. 

package com.mycompany;
import exam06.hankook.Tire;
import exam06.hankook.ShowTire;
//import exam06.kumho.Tire;
//import exam06.kumho.BigWidthTire;
import exam06.kumho.*;
import exam06.hyundai.*;

public class Car {
	//ν•„λ“œ
	ShowTire tire1 = new ShowTire(); //ShowTire 클래슀λ₯Ό ν¬ν•¨μ‹œμΌœλΌ(Car ν΄λž˜μŠ€μ™€ ShowTire클래슀 κ°„μ˜ 포함관계)
	Tire tire2 = new Tire(); //ν•œκ΅­ Tire 클래슀λ₯Ό ν¬ν•¨μ‹œμΌœλΌ(Carν΄λž˜μŠ€μ™€  Tire클래슀 κ°„μ˜ 포함관계)
	BigWidthTire tire3 = new BigWidthTire(); //BigWidthTire 클래슀λ₯Ό ν¬ν•¨μ‹œμΌœλΌ(Carν΄λž˜μŠ€μ™€  BigWidthTire클래슀 κ°„μ˜ 포함관계)
	Tire tire4 = new Tire(); //금호 Tire 클래슀λ₯Ό ν¬ν•¨μ‹œμΌœλΌ(Carν΄λž˜μŠ€μ™€  Tire클래슀 κ°„μ˜ 포함관계)
	Engine engine = new Engine(); //Engine 클래슀λ₯Ό ν¬ν•¨μ‹œμΌœλΌ(Carν΄λž˜μŠ€μ™€ Engine클래슀 κ°„μ˜ 포함관계) 
}

6.6.2 μ ‘κ·Ό μ œν•œμž (Access Modifier) p. 293

μ ‘κ·Ό μ œν•œμžλŠ” 말 κ·ΈλŒ€λ‘œ 클래슀 및 μΈν„°νŽ˜μ΄μŠ€ 그리고 이듀이 가지고 μžˆλŠ” λ©€λ²„μ˜ 접근을 μ œν•œν•˜κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€. 

μ ‘κ·Ό μ œν•œμ΄ κ°•ν™”μˆœ: public > protected > default > private

μ ‘κ·Ό μ œμ–΄μž 같은 ν΄λž˜μŠ€μ˜ λ©€λ²„ 같은 νŒ¨ν‚€μ§€μ˜ λ©€λ²„ μžμ‹ ν΄λž˜μŠ€μ˜ λ©€λ²„ κ·Έ μ™Έμ˜ μ˜μ—­
public β—‹ β—‹ β—‹ β—‹
protected β—‹ β—‹ β—‹ X
default β—‹ β—‹ X X
private β—‹ X X X

클래슀 μ•žμ—λŠ” public, default만 올 수 μžˆλ‹€.

 


1) public μ ‘κ·Ό μ œν•œμž: 단어 뜻 κ·ΈλŒ€λ‘œ μ™ΈλΆ€ ν΄λž˜μŠ€κ°€ 자유둭게 μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•œλ‹€.
λͺ¨λ“  νŒ¨ν‚€μ§€μ—μ„œ μ œν•œ 없이 μƒμ„±μž 호좜 κ°€λŠ₯ν•˜λ‹€.

public μ ‘κ·Ό μ œν•œμž



2) protected μ ‘κ·Ό μ œν•œμž: 같은 νŒ¨ν‚€μ§€ λ˜λŠ” μžμ‹ ν΄λž˜μŠ€μ—μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•œλ‹€.
같은 νŒ¨ν‚€μ§€μ— μ†ν•˜λŠ” ν΄λž˜μŠ€μ—μ„œ μƒμ„±μž 호좜 κ°€λŠ₯ν•˜λ‹€. λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— μ†ν•œ ν΄λž˜μŠ€κ°€ ν•΄λ‹Ή μžμ‹ ν΄λž˜μŠ€λΌλ©΄ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•  μˆ˜ μžˆλ‹€.
상속 O

protected μ ‘κ·Ό μ œν•œμž

3) default μ ‘κ·Ό μ œν•œμž: 같은 νŒ¨ν‚€μ§€μ— μ†Œμ†λœ ν΄λž˜μŠ€μ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•œλ‹€.
μƒμ„±μžλ₯Ό μ„ μ–Έν•  λ•Œ μ œν•œμžλ₯Ό 아무것도 적지 μ•ŠμœΌλ©΄ default μ ‘κ·Ό μ œν•œμ„ 가진닀. 
같은 νŒ¨ν‚€μ§€ λ‚΄μ—μ„œ μ•„λ¬΄λŸ° μ œν•œ 없이 μƒμ„±μž 호좜 κ°€λŠ₯ν•˜λ‹€.
상속 X

default μ ‘κ·Ό μ œν•œμž


4) private μ ‘κ·Ό μ œν•œμž: 단어 λœ»λŒ€λ‘œ 개인적인 것이라 μ™ΈλΆ€μ—μ„œ μ‚¬μš©λ  수 없도둝 ν•œλ‹€.
μ˜€λ‘œμ§€ 클래슀 λ‚΄λΆ€μ—μ„œλ§Œ μƒμ„±μž 호좜 κ°€λŠ₯ν•˜λ‹€. 객체 생성 κ°€λŠ₯ν•˜λ‹€.
같은 νŒ¨ν‚€μ§€μ—¬λ„ 접근이 μ•ˆ λœλ‹€. 

private μ ‘κ·Ό μ œν•œμž

κ·Έλ¦Ό μ°Έκ³ : http://www.tcpschool.com/java/java_modifier_accessModifier


6.6.3 클래슀의 μ ‘κ·Ό μ œν•œ p. 294

클래슀 μ•žμ—λŠ” public, default만 올 수 μžˆλ‹€.

1) default μ ‘κ·Ό μ œν•œ

클래슀λ₯Ό μ„ μ–Έν•  λ•Œ public을 μƒλž΅ν–ˆλ‹€λ©΄ ν΄λž˜μŠ€λŠ” default μ ‘κ·Ό μ œν•œμ„ 가진닀.
같은 νŒ¨ν‚€μ§€μ—μ„œλŠ” μ•„λ¬΄λŸ° μ œν•œ 없이 μ‚¬μš©ν•  수 μžˆμ§€λ§Œ λ‹€λ₯Έ νŒ¨ν‚€μ§€μ—μ„œλŠ” μ‚¬μš©ν•  수 없도둝 μ œν•œλœλ‹€.

default μ ‘κ·Ό μ œν•œμžκ°™μ€ νŒ¨ν‚€μ§€μ— μ†Œμ†λœ ν΄λž˜μŠ€μ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•œλ‹€.
μƒμ„±μžλ₯Ό μ„ μ–Έν•  λ•Œ μ œν•œμžλ₯Ό 아무것도 적지 μ•ŠμœΌλ©΄ default μ ‘κ·Ό μ œν•œμ„ 가진닀. 
같은 νŒ¨ν‚€μ§€ λ‚΄μ—μ„œ μ•„λ¬΄λŸ° μ œν•œ 없이 μƒμ„±μž 호좜 κ°€λŠ₯ν•˜λ‹€.

default μ ‘κ·Ό μ œν•œμž


2) public μ ‘κ·Ό μ œν•œ

ν΄λž˜μŠ€κ°€ public μ ‘κ·Ό μ œν•œμ„ 가지면, 같은 νŒ¨ν‚€μ§€λΏλ§Œ μ•„λ‹ˆλΌ λ‹€λ₯Έ νŒ¨ν‚€μ§€μ—μ„œλ„ μ•„λ¬΄λŸ° μ œν•œ 없이 μ‚¬μš©ν•  수 μžˆλ‹€.

public μ ‘κ·Ό μ œν•œμžλ‹¨μ–΄ 뜻 κ·ΈλŒ€λ‘œ μ™ΈλΆ€ ν΄λž˜μŠ€κ°€ 자유둭게 μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•œλ‹€.
λͺ¨λ“  νŒ¨ν‚€μ§€μ—μ„œ μ œν•œ 없이 μƒμ„±μž 호좜 κ°€λŠ₯ν•˜λ‹€.

public μ ‘κ·Ό μ œν•œμž

예제) 클래슀의 μ ‘κ·Ό μ œν•œ(1)

package exam06.package1;

class A {} //default μ ‘κ·Ό μ œν•œ

예제) 클래슀의 μ ‘κ·Ό μ œν•œ(2)
B ν΄λž˜μŠ€λŠ” A ν΄λž˜μŠ€μ™€ 같은 νŒ¨ν‚€μ§€μ΄λ―€λ‘œ A ν΄λž˜μŠ€μ— 접근이 κ°€λŠ₯ν•˜λ‹€. 

package exam06.package1;

public class B {
	//B ν΄λž˜μŠ€λŠ” A 클래슀 ν¬ν•¨ν•œλ‹€. 
	//int a
	//μ°Έμ‘° νƒ€μž…, μ°Έμ‘° λ³€μˆ˜
	//A에 μžˆλŠ” λ©”μ„œλ“œλ§Œ μ“΄λ‹€. 
	A a; //A 클래슀 μ ‘κ·Ό κ°€λŠ₯(ν•„λ“œλ‘œ μ„ μ–Έν•  수 μžˆλ‹€.)
}

예제) 클래슀의 μ ‘κ·Ό μ œν•œ(3)
C ν΄λž˜μŠ€λŠ” A ν΄λž˜μŠ€μ™€ λ‹€λ₯Έ νŒ¨ν‚€μ§€μ΄λ―€λ‘œ default μ ‘κ·Ό μ œν•œμ„ κ°–λŠ” A ν΄λž˜μŠ€μ—λŠ” 접근이 λ˜μ§€ μ•Šμ§€λ§Œ, public μ ‘κ·Ό μ œν•œμ„ κ°–λŠ” B ν΄λž˜μŠ€λŠ” 접근이 κ°€λŠ₯ν•˜λ‹€. κ·Έλž˜μ„œ C ν΄λž˜μŠ€μ—μ„œ B 클래슀λ₯Ό μ΄μš©ν•˜μ—¬ ν•„λ“œ μ„ μ–Έ 및 μƒμ„±μž/λ©”μ„œλ“œ λ‚΄λΆ€μ—μ„œ λ³€μˆ˜ 선언이 κ°€λŠ₯ν•˜λ‹€.

package exam06.package1;

public class C {
	//Aν΄λž˜μŠ€λŠ” default μ ‘κ·Όμ œν•œμž (같은 νŒ¨ν‚€μ§€μ— μžˆλŠ” ν΄λž˜μŠ€λŠ” μ ‘κ·Ό κ°€λŠ₯ν•˜λ‚˜, λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— μžˆλŠ” ν΄λž˜μŠ€λŠ” μ ‘κ·Ό λΆˆκ°€)
	//A a;
	//Bν΄λž˜μŠ€λŠ” public μ ‘κ·Όμ œν•œμž (같은 νŒ¨ν‚€μ§€μ— μžˆλŠ” ν΄λž˜μŠ€λŠ” μ ‘κ·Ό κ°€λŠ₯ν•˜λ‚˜, λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— μžˆλŠ” ν΄λž˜μŠ€λ„ μ ‘κ·Ό κ°€λŠ₯)
	B b;
}

6.6.4 μƒμ„±μžμ˜ μ ‘κ·Ό μ œν•œ p. 296

객체λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•΄μ„œλŠ” new μ—°μ‚°μžλ‘œ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•œλ‹€. μƒμ„±μžλ₯Ό μ–΄λ””μ—μ„œλ‚˜ 호좜 ν•  수 μžˆλŠ” 것은 μ•„λ‹ˆλ‹€.
μƒμ„±μžκ°€ μ–΄λ–€ μ ‘κ·Ό μ œν•œμ„ κ°–λŠλƒμ— 따라 호좜 κ°€λŠ₯ μ—¬λΆ€κ°€ κ²°μ •λœλ‹€.
μƒμ„±μžλŠ” λ‹€μŒκ³Ό 같이 public, protected, default, private μ ‘κ·Ό μ œν•œμ„ 가진닀.

ex) μžλ°”λ‘œ dbμ΄μš©ν•  λ•Œ νšŒμ› κ°€μž… μ •λ³΄μ˜ μ ‘κ·Ό 자체λ₯Ό 막기

public class ClassName{
	//public μ ‘κ·Ό μ œν•œ
    public ClassName(...){...}
    
    //protected μ ‘κ·Ό μ œν•œ
    protected ClassName(...){...}
    
    //default μ ‘κ·Ό μ œν•œ
    ClassName(...){...}
    
    //private μ ‘κ·Ό μ œν•œ
    private ClassName(...){...}
}

예제) μƒμ„±μžμ˜ μ ‘κ·Ό μ œν•œ(1) 

package exam06.package1;

public class A {
	//ν•„λ“œ
	//int a; κΈ°λ³Ένƒ€μž…(μΈμŠ€ν„΄μŠ€ ν•„λ“œ)
	A a1 = new A(true); //μ°Έμ‘° νƒ€μž…
	A a2 = new A(1); //μ°Έμ‘°νƒ€μž…
	A a3 = new A("λ¬Έμžμ—΄");
	
	//μƒμ„±μž
	public A(boolean b) {} 
	A(int b){}	//default
	private A(String s) {}
	
	//λ©”μ„œλ“œ
}

 

예제) μƒμ„±μžμ˜ μ ‘κ·Ό μ œν•œ(2)

package exam06.package1;

public class B {
	//B ν΄λž˜μŠ€λŠ” A 클래슀 ν¬ν•¨ν•œλ‹€. 
	//ν•„λ“œ
	//int a
	//μ°Έμ‘° νƒ€μž…, μ°Έμ‘° λ³€μˆ˜
	//A에 μžˆλŠ” λ©”μ„œλ“œλ§Œ μ“΄λ‹€. 
	A a1 = new A(true); //μ°Έμ‘° νƒ€μž…
	A a2 = new A(1); //μ°Έμ‘° νƒ€μž…
	//A a3 = new A("λ¬Έμžμ—΄"); //private μƒμ„±μž μ ‘κ·Ό λΆˆκ°€(컴파일 μ—λŸ¬)
}


예제) μƒμ„±μžμ˜ μ ‘κ·Ό μ œν•œ(3)  

package exam06.package2;
import exam06.package1.A;
public class C {
	//ν•„λ“œ
	//int a
	//μ°Έμ‘° νƒ€μž…, μ°Έμ‘° λ³€μˆ˜
	//A에 μžˆλŠ” λ©”μ„œλ“œλ§Œ μ“΄λ‹€. 
	A a1 = new A(true); //μ°Έμ‘° νƒ€μž…
	//A a2 = new A(1); //default μƒμ„±μž μ ‘κ·Ό λΆˆκ°€(컴파일 μ—λŸ¬)
	//A a3 = new A("λ¬Έμžμ—΄"); //private μƒμ„±μž μ ‘κ·Ό λΆˆκ°€(컴파일 μ—λŸ¬)
}

6.6.5 ν•„λ“œμ™€ λ©”μ„œλ“œμ˜ μ ‘κ·Ό μ œν•œ

예제) ν•„λ“œμ™€ λ©”μ„œλ“œμ˜ μ ‘κ·Όμ œν•œ(1)
A 클래슀 λ‚΄λΆ€μ—μ„œλŠ” μ ‘κ·Ό μ œν•œκ³Ό 상관없이 ν•„λ“œμ™€ λ©”μ„œλ“œλ₯Ό λͺ¨λ‘ μ‚¬μš©ν•  수 μžˆλ‹€.

package exam06.package1;

public class A {
	//ν•„λ“œ
	public int field1; //public μ ‘κ·Ό μ œν•œ
	int field2; //default μ ‘κ·Ό μ œν•œ
	private int field3; //private μ ‘κ·Ό μ œν•œ
	
	//μƒμ„±μž
	public A() {
		field1 = 1;
		field2 = 1;
		field3 = 1;
		
		method1();
		method2();
		method3();
	}
		
	//λ©”μ„œλ“œ
	public void method1() {}
	void method2() {}
	private void method3() {}
}


예제) ν•„λ“œμ™€ λ©”μ„œλ“œμ˜ μ ‘κ·Όμ œν•œ(2)
νŒ¨ν‚€μ§€κ°€ λ™μΌν•œ B ν΄λž˜μŠ€μ—μ„œλŠ” A 클래슀의 private ν•„λ“œμ™€ λ©”μ„œλ“œλ₯Ό μ œμ™Έν•œ λ‹€λ₯Έ ν•„λ“œμ™€ λ©”μ„œλ“œλŠ” μ‚¬μš©ν•  수 μžˆλ‹€. 

package exam06.package1;

public class B {
	public B{
		A a = new A();
		a.field1 = 1; //μ ‘κ·Όμ œν•œμž: public(같은 νŒ¨ν‚€μ§€O, λ‹€λ₯ΈνŒ¨ν‚€μ§€O)
		a.field2 = 1; //μ ‘κ·Όμ œν•œμž: default(같은 νŒ¨ν‚€μ§€O, λ‹€λ₯ΈνŒ¨ν‚€μ§€X)
		//a.field3 = 1; //μ ‘κ·Όμ œν•œμž: private(같은 νŒ¨ν‚€μ§€X, λ‹€λ₯ΈνŒ¨ν‚€μ§€X)
		
		a.method1(); //μ ‘κ·Όμ œν•œμž: public(같은 νŒ¨ν‚€μ§€O, λ‹€λ₯ΈνŒ¨ν‚€μ§€O)
		a.method2(); //μ ‘κ·Όμ œν•œμž: default(같은 νŒ¨ν‚€μ§€O, λ‹€λ₯ΈνŒ¨ν‚€μ§€X)
		//a.method3(); //μ ‘κ·Όμ œν•œμž: private(같은 νŒ¨ν‚€μ§€X, λ‹€λ₯ΈνŒ¨ν‚€μ§€X, 같은 ν΄λž˜μŠ€λ‚΄O) μ ‘κ·Ό λΆˆκ°€
	}
}


예제) ν•„λ“œμ™€ λ©”μ„œλ“œμ˜ μ ‘κ·Όμ œν•œ(3)
νŒ¨ν‚€μ§€κ°€ λ‹€λ₯Έ C ν΄λž˜μŠ€μ—μ„œλŠ” A 클래슀의 public ν•„λ“œμ™€ λ©”μ„œλ“œλ₯Ό μ œμ™Έν•œ λ‹€λ₯Έ ν•„λ“œμ™€ λ©”μ„œλ“œλŠ” μ‚¬μš©ν•  수 μ—†λ‹€.

package exam06.package2;
import exam06.package1.A;
public class C {
	public C() {
		A a = new A();
		a.field1 = 1; //μ ‘κ·Όμ œν•œμž: public(같은 νŒ¨ν‚€μ§€O, λ‹€λ₯ΈνŒ¨ν‚€μ§€O)
		//a.field2 = 1; //μ ‘κ·Όμ œν•œμž: default(같은 νŒ¨ν‚€μ§€O, λ‹€λ₯ΈνŒ¨ν‚€μ§€X) μ ‘κ·Ό λΆˆκ°€
		//a.field3 = 1; //μ ‘κ·Όμ œν•œμž: private(같은 νŒ¨ν‚€μ§€X, λ‹€λ₯ΈνŒ¨ν‚€μ§€X) μ ‘κ·Ό λΆˆκ°€
		
		a.method1(); //μ ‘κ·Όμ œν•œμž: public(같은 νŒ¨ν‚€μ§€O, λ‹€λ₯ΈνŒ¨ν‚€μ§€O)
		//a.method2(); //μ ‘κ·Όμ œν•œμž: default(같은 νŒ¨ν‚€μ§€O, λ‹€λ₯ΈνŒ¨ν‚€μ§€X) μ ‘κ·Ό λΆˆκ°€
		//a.method3(); //μ ‘κ·Όμ œν•œμž: private(같은 νŒ¨ν‚€μ§€X, λ‹€λ₯ΈνŒ¨ν‚€μ§€X, 같은 ν΄λž˜μŠ€λ‚΄O) μ ‘κ·Ό λΆˆκ°€
	}
}

6.6.6 Getter와 Setter λ©”μ„œλ“œ p. 301 

일반적으둜 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” 객체의 ν•„λ“œλ₯Ό 객체 μ™ΈλΆ€μ—μ„œ μ§μ ‘μ μœΌλ‘œ μ ‘κ·Όν•˜λŠ” 것을 λ§‰λŠ”λ‹€. μ™ΈλΆ€μ—μ„œ λ§ˆμŒλŒ€λ‘œ λ³€κ²½ν•  경우 객체의 무결성(결점이 μ—†λŠ” μ„±μ§ˆ)이 깨질 수 있기 λ•Œλ¬Έμ΄λ‹€.
ex) μžλ™μ°¨μ˜ 속λ ₯은 음수X, μ™ΈλΆ€μ—μ„œ 음수둜 λ³€κ²½ν•˜λ©΄ 객체의 무결성이 깨진닀.

μ΄λŸ¬ν•œ λ¬Έμ œμ μ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” λ©”μ„œλ“œλ₯Ό ν†΅ν•΄μ„œ ν•„λ“œλ₯Ό λ³€κ²½ν•˜λŠ” 방법을 μ„ ν˜Έν•œλ‹€. ν•„λ“œλŠ” μ™ΈλΆ€μ—μ„œ μ ‘κ·Όν•  수 없도둝 막고 λ©”μ„œλ“œλŠ” κ³΅κ°œν•΄μ„œ μ™ΈλΆ€μ—μ„œ λ©”μ„œλ“œλ₯Ό 톡해 ν•„λ“œμ— μ ‘κ·Όν•˜λ„λ‘ μœ λ„ν•œλ‹€. λ©”μ„œλ“œλŠ” λ§€κ°œκ°’μ„ κ²€μ¦ν•΄μ„œ μœ νš¨ν•œ κ°’λ§Œ 객체의 ν•„λ“œλ‘œ μ €μž₯ν•  수 있기 λ•Œλ¬Έμ΄λ‹€.

ν•„λ“œλŠ” μ™ΈλΆ€μ—μ„œ μ ‘κ·Όν•  수 없도둝 막고 λ©”μ„œλ“œλŠ” κ³΅κ°œν•΄μ„œ μ™ΈλΆ€μ—μ„œ λ©”μ„œλ“œλ₯Ό 톡해 ν•„λ“œμ— μ ‘κ·Όν•˜λ„λ‘ μœ λ„ν•œλ‹€.
ν•„λ“œμ˜ 값을 μ™ΈλΆ€λ‘œ λ¦¬ν„΄ν•΄μ£ΌλŠ” λ©”μ„œλ“œλ₯Ό Getter라고 ν•˜κ³ 

μ™ΈλΆ€μ—μ„œ 값을 λ°›μ•„ ν•„λ“œλ₯Ό λ³€κ²½ν•˜λŠ” λ©”μ„œλ“œλ₯Ό Setter라고 ν•œλ‹€. 

Setter: μ™ΈλΆ€μ—μ„œ 값을 λ°›μ•„ ν•„λ“œλ₯Ό λ³€κ²½ν•˜λŠ” λ©”μ„œλ“œμ΄λ‹€. 
Getter: ν•„λ“œμ˜ 값을 μ™ΈλΆ€λ‘œ λ¦¬ν„΄ν•΄μ£ΌλŠ” λ©”μ„œλ“œμ΄λ‹€. λ©”μ„œλ“œλ‘œ ν•„λ“œκ°’μ„ κ°€κ³΅ν•œ ν›„ μ™ΈλΆ€λ‘œ μ „λ‹¬ν•œλ‹€.

set: μ €μž₯ν•œλ‹€.
get
: μ €μž₯된 κ±° κ°€μ Έμ˜¨λ‹€.

 
SET은 λ³€μˆ˜κ°’μ„ ν• λ‹Ήν•˜λŠ” λͺ©μ μ˜ ν•¨μˆ˜μ΄κΈ° λ•Œλ¬Έμ— 인자λ₯Ό λ°›μ•„μ•Ό ν•˜κ³ 
GET은 λ³€μˆ˜κ°’μ„ λ°˜ν™˜ν•˜λŠ” λͺ©μ μ΄κΈ° λ•Œλ¬Έμ— return이 ν•„μš”ν•˜λ‹€.


클래슀λ₯Ό μ„ μ–Έν•  λ•Œ κ°€λŠ₯ν•˜λ‹€λ©΄ ν•„λ“œλ₯Ό private으둜 μ„ μ–Έν•΄μ„œ μ™ΈλΆ€λ‘œλΆ€ν„° λ³΄ν˜Έν•˜κ³ , ν•„λ“œμ— λŒ€ν•œ Setter와 Getter λ©”μ„œλ“œλ₯Ό μž‘μ„±ν•΄μ„œ ν•„λ“œκ°’μ„ μ•ˆμ „ν•˜κ²Œ λ³€κ²½/μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.

μ°Έκ³ : https://www.geeksforgeeks.org/getter-and-setter-in-java/


ν•„λ“œ νƒ€μž…μ΄ boolean일 경우 GetterλŠ” get λŒ€μ‹  is둜 μ‹œμž‘ν•˜λŠ” 것이 관둀이닀. 

private boolean stop; //ν•„λ“œ μ ‘κ·Ό μ œν•œμž: boolean

//Getter //μ €μž₯된 κ±° κ°€μ Έμ˜¨λ‹€.
public boolean isStop(){ //μ ‘κ·Ό μ œν•œμž: public, 리턴 νƒ€μž…: ν•„λ“œ νƒ€μž…
	return stop;		//λ©”μ„œλ“œ 이름: is+ν•„λ“œνƒ€μž…(첫 κΈ€μžλŠ” λŒ€λ¬Έμž), 리턴값: ν•„λ“œκ°’
}

//Setter //μ €μž₯ν•œλ‹€.
public void setStop(boolean stop){
	this.stop = stop;
}

λ§Œμ•½ μ™ΈλΆ€μ—μ„œ ν•„λ“œκ°’μ„ 읽을 수만 있고 λ³€κ²½ν•˜μ§€ λͺ»ν•˜λ„둝 ν•˜λ €λ©΄(읽기 μ „μš©) Getter λ©”μ„œλ“œλ§Œ 선언해도 μ’‹κ³ ,
μ•„λ‹ˆλ©΄ Setter λ©”μ„œλ“œκ°€ private μ ‘κ·Ό μ œν•œμ„ 갖도둝 선언해도 μ’‹λ‹€. 


Car 클래슀의 speed와 stop ν•„λ“œμ— λŒ€ν•œ Getter와 Setter을 μž‘μ„±ν•œ 것이닀.

예제 1) Getter와 Setter λ©”μ„œλ“œ μ„ μ–Έ

public class Car4 {
	//ν•„λ“œ
	//μ™ΈλΆ€μ—μ„œ μ ‘κ·Όν•  수 없도둝 막고
	private int speed;
	private boolean stop;
	
	//μƒμ„±μž
	
	//getter / setter λ©”μ„œλ“œ
	public int getSpeed() {
		return speed;
	}
	
	public void setSpeed(int speed) {
		//λ§Œμ•½μ— speed 값이 음수이면
		if (speed<0) {
			//아무것도 μ•ˆ ν•˜κ³  setSpeed λ©”μ„œλ“œ μ’…λ£Œ
			return;
		}else {//speed값이 μ–‘μˆ˜μ΄λ©΄
			//speedν•„λ“œμ— 값을 μ €μž₯ν•œλ‹€.
			this.speed = speed;
		}
	}
	
	public boolean isStop() {
		return stop;//κΈ°λ³Έκ°’:false
	}
	public void setStop(boolean stop) {
		this.stop = stop;
		this.speed = 0;
	}		
}

예제 2) Getter와 Setter λ©”μ„œλ“œ μ‚¬μš©
stop
ν•„λ“œμ˜ Getter(isStop()) 리턴값이 false인 경우, true둜 λ§Œλ“€κ³  (μ›λž˜ 리턴값이 λ„˜μ–΄κ°ˆ λ•Œ)
μžλ™μ°¨λ₯Ό λ©ˆμΆ”κΈ° μœ„ν•΄ Setter(setStop(true))λ₯Ό ν˜ΈμΆœν•΄μ„œ stop ν•„λ“œλ₯Ό true둜, speed ν•„λ“œλ₯Ό 0으둜 λ³€κ²½ν•œλ‹€.
(μ€‘μš”ν•œ 것은 get, set이닀.)

public class Car5Example {
	public static void main(String[] args) {
		Car5 myCar = new Car5();
		
		//잘λͺ»λœ 속도 λ³€κ²½
		myCar.setSpeed(-50);
		
		System.out.println("ν˜„μž¬ 속도: "+myCar.getSpeed());
		
		//μ˜¬λ°”λ₯Έ 속도 λ³€κ²½
		myCar.setSpeed(60);
		
		//System.out.println("myCar.isStop(): "+myCar.isStop()); //false
		//System.out.println("!myCar.isStop(): "+!myCar.isStop()); //true
		//멈좀
        // λ©ˆμΆ”λŠ” λ©”μ„œλ“œ 호좜
		// => μ°¨λŸ‰μ΄ 움직일 κ²½μš°μ—λ§Œ 호좜
		//μ°¨λŸ‰μ΄ μ›€μ§μ΄λŠ”μ§€ 확인(isStop값이 false 일 경우) λ¦¬ν„΄μ˜ 기본값이 false둜 λ„˜μ–΄κ°€λ©΄
		if(!myCar.isStop()) {
			myCar.setStop(true);
		}
/*			if(myCar.isStop()) {
				myCar.setStop(false);
			}else {
				myCar.setStop(true);
			}*/
		
		//System.out.println("myCar.isStop(): "+myCar.isStop()); //true
		//System.out.println("!myCar.isStop(): "+!myCar.isStop()); //false
		
		System.out.println("ν˜„μž¬ 속도: "+myCar.getSpeed());
	}
}

 

μ°Έκ³ : https://velog.io/@luvaa/%EC%A0%91%EA%B7%BC%EC%A0%9C%ED%95%9C%EC%9E%90


마무리 p. 306
4가지 ν‚€μ›Œλ“œλ‘œ λλ‚΄λŠ” 핡심 포인트

1) νŒ¨ν‚€μ§€ μ„ μ–Έ: ν•΄λ‹Ή 클래슀 λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€κ°€ μ–΄λ–€ νŒ¨ν‚€μ§€μ— 속할 것인지λ₯Ό μ„ μ–Έν•˜λŠ” 것이닀.
μ†ŒμŠ€ 파일의 μ΅œμƒλ‹¨μ— μœ„μΉ˜ν•˜λ©° λ‹€μŒκ³Ό 같이 μž‘μ„±ν•œλ‹€.

package μƒμœ„νŒ¨ν‚€μ§€.ν•˜μœ„νŒ¨ν‚€μ§€;

2) importλ¬Έ: μ‚¬μš©ν•˜κ³ μž ν•˜λŠ” 클래슀 λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€κ°€ λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— μ†Œμ†λ˜μ–΄ μžˆλ‹€λ©΄, import문으둜 ν•΄λ‹Ή νŒ¨ν‚€μ§€μ˜ 클래슀 λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό 가져와 μ‚¬μš©ν•  κ²ƒμž„μ„ μ»΄νŒŒμΌλŸ¬μ—κ²Œ μ•Œλ €μ€˜μ•Ό ν•œλ‹€.

import μƒμœ„νŒ¨ν‚€μ§€.ν•˜μœ„νŒ¨ν‚€μ§€.ν΄λž˜μŠ€μ΄λ¦„;
import μƒμœ„νŒ¨ν‚€μ§€.ν•˜μœ„νŒ¨ν‚€μ§€.*;

3) μ ‘κ·Όμ œν•œμž: ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ‹€λ₯Έ νŒ¨ν‚€μ§€μ—μ„œ μ‚¬μš©ν•˜μ§€ λͺ»ν•˜λ„둝 막을 ν•„μš”κ°€ μžˆλ‹€. 그리고 객체 생성을 막기 μœ„ν•΄ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜μ§€ λͺ»ν•˜κ²Œ ν•˜κ±°λ‚˜ ν•„λ“œλ‚˜ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ§€ λͺ»ν•˜λ„둝 막아야 λ˜λŠ” κ²½μš°λ„ μžˆλ‹€.
μ΄λ•Œ μ ‘κ·Ό μ œν•œμžλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

[μ ‘κ·Ό μ œν•œμ˜ μ’…λ₯˜μ™€ μ μš©ν•  λŒ€μƒ]

μ ‘κ·Ό μ œν•œ 적용 λŒ€μƒ μ ‘κ·Όν•  수 μ—†λŠ” 클래슀
1) public 클래슀, ν•„λ“œ, μƒμ„±μž, λ©”μ„œλ“œ μ—†μŒ
2) protected ν•„λ“œ, μƒμ„±μž, λ©”μ„œλ“œ μžμ‹ ν΄λž˜μŠ€κ°€ μ•„λ‹Œ λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— μ†Œμ†λœ 클래슀
3) default 클래슀, ν•„λ“œ, μƒμ„±μž, λ©”μ„œλ“œ λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— μ†Œμ†λœ 클래슀
4) private ν•„λ“œ, μƒμ„±μž, λ©”μ„œλ“œ λͺ¨λ“  μ™ΈλΆ€ 클래슀
μ ‘κ·Ό μ œν•œμž
public: μ ‘κ·Ό μ œν•œμ΄ μ—†λ‹€.
protected: 같은 νŒ¨ν‚€μ§€μ— μžˆλŠ” ν΄λž˜μŠ€λŠ” μ ‘κ·Ό κ°€λŠ₯, λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— μžˆλŠ” ν΄λž˜μŠ€λŠ” μ ‘κ·Ό λΆˆκ°€λŠ₯
* 상속을 ν•˜λ©΄ λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— μžˆλŠ” ν΄λž˜μŠ€λŠ” μ ‘κ·Ό κ°€λŠ₯ * 
(default): 같은 νŒ¨ν‚€μ§€μ— μžˆλŠ” ν΄λž˜μŠ€λŠ” μ ‘κ·Ό κ°€λŠ₯, λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— μžˆλŠ” ν΄λž˜μŠ€λŠ” μ ‘κ·Ό λΆˆκ°€λŠ₯
* 상속을 해도 λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— μžˆλŠ” 클래슀 μ ‘κ·Ό λΆˆκ°€λŠ₯ *
private: μ™ΈλΆ€μ—μ„œ 접근이 λΆˆκ°€λŠ₯(같은 클래슀 λ‚΄μ—μ„œλ§Œ μ ‘κ·Ό)
μ ‘κ·Ό μ œμ–΄μž 같은 ν΄λž˜μŠ€μ˜ λ©€λ²„ 같은 νŒ¨ν‚€μ§€μ˜ λ©€λ²„ μžμ‹ ν΄λž˜μŠ€μ˜ λ©€λ²„ κ·Έ μ™Έμ˜ μ˜μ—­
public β—‹ β—‹ β—‹ β—‹
protected β—‹ β—‹ β—‹ X
default β—‹ β—‹ X X
private β—‹ X X X


4) Getter/Setter: ν•„λ“œλŠ” μ™ΈλΆ€μ—μ„œ μ ‘κ·Όν•  수 없도둝 막고 λ©”μ„œλ“œλŠ” κ³΅κ°œν•΄μ„œ μ™ΈλΆ€μ—μ„œ λ©”μ„œλ“œλ₯Ό 톡해 ν•„λ“œμ— μ ‘κ·Όν•˜λ„λ‘ μœ λ„ν•œλ‹€. ν•„λ“œμ˜ 값을 μ™ΈλΆ€λ‘œ λ¦¬ν„΄ν•΄μ£ΌλŠ” λ©”μ„œλ“œλ₯Ό Getter라고 ν•˜κ³ 
μ™ΈλΆ€μ—μ„œ 값을 λ°›μ•„ ν•„λ“œλ₯Ό λ³€κ²½ν•˜λŠ” λ©”μ„œλ“œλ₯Ό Setter라고 ν•œλ‹€. 


728x90
λ°˜μ‘ν˜•
Comments