νλ‘κ·Έλλ°μμ μ΄λ¦μ μ¬λ°λ₯΄κ² μ§λ κ²μ μ€μνλ€. νμ§λ§ ν¨ν€μ§, ν΄λμ€, λ©μλ, νλ, 맀κ°λ³μ, μ§μ λ³μ λ± λͺ λͺ ν μμκ° λ무 λ§κΈ° λλ¬Έμ λͺ¨λ μμμ μ’μ μ΄λ¦μ μ§λ κ²μ μ΄λ ΅λ€. 4μ₯μμλ μ½λ μμμ κ±Έλ§λ μ΄λ¦μ ν λΉνλ λ°©λ²μ λν΄μ λ°°μ΄λ€.
λͺ λͺ ν λ μλ° κ·μΉμ΄ μ€μνλ©°, λ©μλ λͺ λͺ μ κ°κ²°ν΄μΌλ§ νλ©° μλ―Έμκ±°λ ν κΈμμ§λ¦¬ μ΄λ¦μ νΌν΄μΌλ§ νλ€.
4.1 μλ° λͺ λͺ κ·μΉ μ¬μ©νκΈ°
μλ μ½λλ μ΄λ€ λ¬Έμ κ° μμκΉ..?
class Rover {
static final double WalkingSpeed = 3;
final String SerialNumber;
double MilesPerHour;
Rover(String NewSerialNumber) {
SerialNumber = NewSerialNumber;
}
void Drive() {
MilesPerHour = WalkingSpeed;
}
void Stop() {
MilesPerHour = 0;
}
}
μμ, λ©μλ, λ³μμ λ€μ΄λ°μ μμΈν νμΈν΄λ³΄μ.
μμ ν΄μΌ νλ κ²
- μλ° μ½λ κ·μΉμ λ°λΌ 첫μμμ μλ¬Έμλ‘ κ·Έλ€μ μμ λ¨μ΄λ λλ¬Έμλ‘ ν©λλ€.
- μμλ λλλ¬μ§κ² νν -> λͺ¨λ μ² μλ₯Ό λλ¬Έμ + '_'λ₯Ό ν΅ν΄ λ¨μ΄ μ΄μ
- λ³μλ λͺ μ¬λ‘ νν, λ©μλλ λμ¬μ ννλ₯Ό μ·¨νκ±°λ <is, has, save, get, set> λ±μ μ΄μ©ν΄ λμ¬λ‘ μμν΄μΌνλ€.
μμ μ½λ
class Rover {
static final double WALKING_SPEED = 3;
final String serialNumber;
double milesPerHour;
Rover(String serialNumber) {
this.serialNumber = serialNumber;
}
void drive() {
milesPerHour = WALKING_SPEED;
}
void stop() {
milesPerHour = 0;
}
}
4.2 νλ μμν¬μλ Getter/Setter κ·μΉ μ μ©
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μμλ μΈλΆμμ ν΄λμ€ νλμ μ§μ μ κ·Όνλ κ²μ μ ννκΈ° μν΄ κ²ν°μ μΈν° λ©μλλ₯Ό μμ±νλ€.
μ΄λ¬ν κ²ν°, μΈν° λ©μλλ₯Ό μ΄μ©ν΄ 'νμ΄λ²λ€μ΄νΈ', 'μμ¨' λ±μ νλ μμν¬μμλ κ°μμ κΈ°λ₯μ ꡬννκ³ μλ€. λ°λΌμ, κ²ν°, μΈν° μμ± μ λ§μλλ‘ μ΄λ¦ μ§μΌλ©΄ μλκ³ 'μλ° λΉ' λͺ μΈλ₯Ό λ°λΌμΌ νλ€.
class Astronaut {
private String name;
private boolean retired;
public Astronaut() {
}
public Astronaut(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isRetired() {
return retired;
}
public void setRetired(boolean retired) {
this.retired = retired;
}
}
- κ²ν°, μΈν°λ₯Ό μ¬μ©ν λ³μλͺ μμ getκ³Ό setμ λΆμ΄κ³ λ³μμ 첫λ²μ§Έ μ² μλ λλ¬Έμλ‘ λ§λ λ€.
- 'Boolean' νμ μ κ²ν°μ κ²½μ°μλ§ getRetired() λμ μ isRetired() ννλ‘ μμ±νλ€.
4.3 ν κΈμλ‘ λͺ λͺ νμ§ μκΈ°
class Inventory {
List<Supply> sl = new ArrayList<>();
boolean isInStock(String n) {
Supply s = new Supply(n);
int l = 0; // μ’μ§ μμ λ³μλͺ
.....
int h = sl.size() - 1;
while (l <= h) {
int m = l + (h - l) / 2;
int c = sl.get(m).compareTo(s);
if (c < 0) {
l = m + 1;
} else if (c > 0) {
h = m - 1;
} else {
return true;
}
}
return false;
}
}
μ μ½λ μ²λΌ λ³μλͺ μ ν κΈμλ‘ νννλ©΄ λ³μκ° μ΄λ€ μλ―ΈμΈμ§ λ¨Έλ¦Ώμμ νμ κΈ°μ΅νκ³ μμ΄μΌ νλ€. μ΄λ κ² λλ©΄ λ©μλκ° μ΄λ€ μν μ νλμ§λ μ΄ν΄νκΈ° μ΄λ €μμ§κ³ μ 체 μ½λ λ§₯λ½ λν μ΄ν΄νκΈ° μ΄λ €μμ§λ€.
λ³μλ₯Ό λ¨Έλ¦Ώμμ κΈ°μ΅νμ§ λ§κ³ κ·Έλ₯ μ½λμ "μ 체 μ΄λ¦"μ λͺ ννκ² μμ±νμ.
μ΄μ°¨νΌ μ»΄ν¨ν°κ° μ΄ν΄νλ λ°μ΄νΈμ½λμμ "ν κΈμ"μ "μ 체 μ΄λ¦"μ μ°¨μ΄λ μλ€.
4.4 μΆμ½ μ°μ§ μκΈ°
μΆμ½μ΄λ ν κΈμ μ°κΈ°λ λκ°λ€. μμ λ§ μ΄ν΄ν μ μλ μνΈμ΄λ©° λ€λ₯Έ μ¬λμ μ΄λ₯Ό ν΄μνλ μ λ₯Ό λ¨Ήμ κ²μ΄λ€.
λ°λΌμ, μ λ§ νν μ°μ΄λ μΆμ½ ννμ μ μΈνκ³ λ λ°λμ "μ 체 μ΄λ¦"μ μ¬μ©νμ.
- λ¬Έμ μ½λ
class Logbook {
static final Path DIR = Paths.get("/var/log");
static final Path CSV = DIR.resolve("stats.csv");
static final String GLOB = "*.log";
void createStats() throws IOException {
try (DirectoryStream<Path> dirStr =
Files.newDirectoryStream(DIR, GLOB);
BufferedWriter bufW = Files.newBufferedWriter(CSV)) {
for (Path lFile : dirStr) {
String csvLn = String.format("%s,%d,%s",
lFile,
Files.size(lFile),
Files.getLastModifiedTime(lFile));
bufW.write(csvLn);
bufW.newLine();
}
}
}
}
<κ°μ μ½λ>
class Logbook {
static final Path LOG_FOLDER = Paths.get("/var/log");
static final Path STATISTICS_CSV = LOG_FOLDER.resolve("stats.csv");
static final String FILE_FILTER = "*.log";
void createStatistics() throws IOException {
try (DirectoryStream<Path> logs =
Files.newDirectoryStream(LOG_FOLDER, FILE_FILTER);
BufferedWriter writer =
Files.newBufferedWriter(STATISTICS_CSV)) {
for (Path log : logs) {
String csvLine = String.format("%s,%d,%s",
log,
Files.size(log),
Files.getLastModifiedTime(log));
writer.write(csvLine);
writer.newLine();
}
}
}
}
4.5 무μλ―Έν μ©μ΄ μ°μ§ μκΈ°
"ν κΈμ μ°μ§ μκΈ°", "μΆμ½ μ¬μ©νμ§ μκΈ°" λ§ λ³΄λ©΄ 무쑰건 νμ΄μ΄ μ½λκ° μ’μ κ²μ²λΌ 보μΈλ€. νμ§λ§ 그건 μλλ€..
μ°λ¦¬λ μμ ν΄λ λλ '무μλ―Έν' λ¨μ΄λ₯Ό μ°Ύμμ μμ μΌ νλ€.
λ¬Έμ μ½λ
class MainSpaceShipManager {
AbstractRocketPropulsionEngine abstractRocketPropulsionEngine;
INavigationController navigationController;
boolean turboEnabledFlag;
void navigateSpaceShipTo(PlanetInfo planetInfo) {
RouteData data = navigationController.calculateRouteData(planetInfo);
LogHelper.logRouteData(data);
abstractRocketPropulsionEngine.invokeTask(data, turboEnabledFlag);
}
}
ν΄κ²° λ°©λ²
- μμ£Ό μ°μ΄λ 무μλ―Έν μ©μ΄ μ°Ύμμ μμ κΈ° ("main", "flag", "data", "info" λ±)
- νμ μ΄λ λ©μλ λͺ μ λ€μ΄μλ λΉμ°ν μ©μ΄λ€ ("abstract", "invoke(λ°λ)", "Call")
- ν΄λμ€λͺ μ΄ μ΄λ―Έ μλ €μ£Όκ³ μλ μ 보λ ν΄λμ€ λ΄ λ³μλ λ©μλμμ λ μλ €μ£Όμ§ μμλ λλ€.
κ°μ μ½λ
class SpaceShip {
Engine engine;
Navigator navigator;
boolean turboEnabled;
void navigateTo(Planet destination) {
Route route = navigator.calculateRouteTo(destination);
Logger.log(route);
engine.follow(route, turboEnabled);
}
}
λ³μμ λ©μλμ μν μ μ΄ν΄ν μ μμΌλ©΄μ ν¨μ¬ μ½λκ° κ°κ²°ν΄μ‘λ€.
4.6 λλ©μΈ μ©μ΄ μ¬μ©νκΈ°
κ°λ° μ€μΈ λλΆλΆμ μ½λλ νΉμ λλ©μΈμ μνκ² λκ³ λλ©μΈ λ§λ€ κ°κ°μ μ΄νλ₯Ό κ°μ§λ€.
μλ₯Ό λ€μ΄, μ€ν¬μΈ μμ 'μ€λ°₯μ΄μλ 곡'μ μΌκ΅¬μ΄κ³ 'μ€λ°₯μ΄ μμΌλ©΄μ νλ λ³Όμ' μΆκ΅¬κ³΅μΌ κ²μ΄λ€.
μ΄μ²λΌ νλ‘κ·Έλ¨μ ν΄λΉνλ λλ©μΈ μ©μ΄λ₯Ό μ½λμ λ§μ΄ λ£μ μλ‘ μ½λλ μ μ μ’μμ§λ€.
λ¬Έμ μ½λ
class Person {
String lastName;
String role;
int travels;
LocalDate employedSince;
String serializeAsLine() {
return String.join(",",
Arrays.asList(lastName,
role,
String.valueOf(travels),
String.valueOf(employedSince))
);
}
}
κ°μ μ½λ
class Astronaut {
String tagName; // μ°μ£ΌλΉνμ¬μκ² νΉνλ λ€μ΄λ°
String rank;
int missions;
LocalDate activeDutySince;
String toCSV() {
return String.join(",",
Arrays.asList(tagName,
rank,
String.valueOf(missions),
String.valueOf(activeDutySince))
);
}
}
μ°μ£ΌλΉνμ¬ νλμ λν μλ―Έμ μ΄ν΄λκ° ν¨μ¬ κ°μ λλ€.
4.7 4μ₯μμ λ°°μ΄ λ΄μ©
λͺ λͺ μ μλͺ»ν΄λ μ»΄νμΌμ λμ§λ§ μ½λλ₯Ό μ½κ³ μ΄ν΄νκΈ° μ΄λ €μμ§λ€.
μ΄λ μ½λ μ μ§λ³΄μλ₯Ό μ λ§ μ΄λ ΅κ² λ§λ λ€.
κΌ λͺ λͺ κ·μΉμ μ§ν€λ €κ³ λ Έλ ₯νλ©΄μ κ°λ°νλλ‘ νμ.
'πμ½μ μ± μ 리 > μλ° μ½λ©μ κΈ°μ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μλ° μ½λ©μ κΈ°μ ] 6μ₯ : μ¬λ°λ₯΄κ² λλ¬λ΄κΈ° (0) | 2021.04.15 |
---|---|
[μλ° μ½λ©μ κΈ°μ ] 5μ₯ : λ¬Έμ λ°μμ λλΉνκΈ° (0) | 2021.04.14 |
[μλ° μ½λ©μ κΈ°μ ] 3μ₯ : μ¬κΈ°λ‘κ² μ£Όμ μ¬μ©νκΈ° (0) | 2021.04.09 |
[μλ° μ½λ©μ κΈ°μ ] 2μ₯ : μ½λ μ€νμΌ λ 벨μ (0) | 2021.04.07 |
[μλ° μ½λ©μ κΈ°μ ] 1μ₯ : μ°μ μ 리λΆν° (0) | 2021.04.06 |