-
Notifications
You must be signed in to change notification settings - Fork 2
Chapter 05. Formatting
2021.08.14 (SAT) 10:20-12:00 (100mins)
π Lead by. 'Sujin'
λ°₯ μμ μ¨μ λ°λ¨:
- μ½λκ° κΉλνκ³ , μΌκ΄μ μ΄λ©°, κΌΌκΌΌνκ³ , μ§μ μ μ°νμΌλ©΄ μ’κ² λ€.
- κ·Έλ κ² μ§°λ€λ©΄ μ λ¬Έκ°κ° μ§°λ€λ μΈμμ μ¬μ΄μ€ μ μλ€.
- λ°λλ‘, μ½λκ° μ΄μμ ν΄ λ³΄μΈλ€λ©΄ νλ‘μ νΈλ₯Ό μ λ°μ μΌλ‘ 무μ±μν νλλ‘ μμ±νλ€κ³ μκ°ν κ²μ΄λ€.
- κ·μΉμ μ νκ³ κ·Έ κ·μΉμ λ°λΌμΌ νλ€.
- κ·μΉμ μλμΌλ‘ μ μ©μν€λ λꡬλ₯Ό νμ©ν΄λ μ’λ€.- μ½λ νμμ μ€μνλ€! λ§€μ° μ€μνλ€! βοΈ
- 'λμκ°λ μ½λ'μ λ§μ‘±νλ©΄ μλλ€.
- μ€λ ꡬνν κΈ°λ₯μ λ€μ λ²μ μμ λ°λ μ μλ€.
- μ²μ μ‘μλμ ꡬν μ€νμΌκ³Ό κ°λ μ± μμ€μ μ μ§λ³΄μμ νμ₯μ±μ κ³μ μν₯μ λ―ΈμΉλ€.
μ½λλ μ¬λΌμ§μ§λΌλ κ°λ°μμ μ€νμΌκ³Ό κ·μ¨μ μ¬λΌμ§μ§ μλλ€!
νμΌμ μΈλ‘ κΈΈμ΄λ μ§§μΌλ©΄ μ§§μμλ‘ μ’λ€. μΌλ°μ μΌλ‘ ν° νμΌλ³΄λ€ μμ νμΌμ΄ μ΄ν΄νκΈ° μ½λ€.
- μ½λλ μμμ μλλ‘ μ½νλ€λ μ¬μ€μ κΈ°μ΅νμ
- μ΄λ¦μ κ°λ¨νλ©΄μλ μ€λͺ μ΄ κ°λ₯νκ² μ§λλ€.
- μ΅μλ¨μλ μλλ₯Ό λλ¬λ΄κ³ νλ¨μλ ꡬ체μ μΈ λ΄μ©μ λ°°μΉνλ€.
- μκ° μ¬μ΄μλ λΉ νμ λ£μ΄ λΆλ¦¬νμ
- import λ¬Έ, κ° ν¨μ μ¬μ΄, ν¨ν€μ§ μ μΈλΆμ λΉ νμ λ£λλ€.
- μ΄λ μλ‘μ΄ κ°λ μ μμνλ€λ μκ°μ λ¨μλ€.
import React from 'react';
import MyComponent from './MyComponent';
const App = () => {
return <MyComponent />
};
export default App;- μ€λ°κΏμ΄ κ°λ μ λΆλ¦¬νλ€λ©΄ μΈλ‘ λ°μ§λλ μ°κ΄μ±μ μλ―Ένλ€.
- μλ‘ λ°μ ν μ½λλ κ°κΉμ΄ λ°°μΉνλ€.
- μλ―Έ μλ μ£Όμμ μμ νλ€.
// BAD
// μλ―Έμλ μ£ΌμμΌλ‘ λ³μλ₯Ό λ¨μ΄λ¨λ €μ νλμ νμ
μ΄ μ μλλ€.
public class ReporterConfig {
/**
* 리ν¬ν° 리μ€λμ ν΄λμ€ μ΄λ¦
*/
private String m_className;
/**
* 리ν¬ν° 리μ€λμ μμ±
*/
private List<Property> m_properties = new ArrayList<Property>();
public void addProperty(Property property) {
m_properties.add(property);
}
}// GOOD
// μλ―Έ μλ μ£Όμμ μ κ±°ν¨μΌλ‘μ¨ μ½λκ° νλμ λ€μ΄μ¨λ€.
// λ³μ 2κ°μ λ©μλκ° 1κ°μΈ ν΄λμ€λΌλ μ¬μ€μ΄ λλ¬λλ€.
public class ReporterConfig {
private String m_className;
private List<Property> m_properties = new ArrayList<Property>();
public void addProperty(Property property) {
m_properties.add(property);
}
}μ΄ ν¨μμμ νΈμΆνλ λ€λ₯Έ ν¨μλ₯Ό μ°ΎκΈ° μν΄ λ―Έλ‘κ°μ μ½λλ₯Ό λ€μ§ κ²½νμ΄ μλκ°? π€¦
μ΄ μ‘°κ°, μ μ‘°κ°μ΄ μ΄λμ μλμ§ μ°Ύκ³ κΈ°μ΅νλ λ°μ μκ°κ³Ό λ Έλ ₯μ΄ λ무 λ§μ΄ λ λ€.
- μλ‘ λ°μ ν κ°λ μ μΈλ‘λ‘ κ°κΉμ΄μ λλ©°, ν νμΌμ μμΉν΄μΌ νλ€.
- λ³μλ μ¬μ©νλ ν¨μμ μ΅λν κ°κΉμ΄ μ μΈνλ€.
-
λ³μλ μ¬μ©νλ μμΉμ μ΅λν κ°κΉμ΄ μ μΈνλ€.
const confirmName = () => { const name = getName(); if (name === 'test') { return false; } return name; }
-
μ§μλ³μλ ν¨μ 맨 μ²μ, λΈλ‘ μλ¨, 루ν μ§μ μ μ μΈνλ€.
-
루νλ₯Ό μ μ΄νλ λ³μλ 루νλ¬Έ λ΄λΆμ νν μ μΈνλ€.
const list = [1, 2, 4, 3, 5]; let sum = 0; for (let num of list) { sum += num; }
const hashIt = (data) => { let hash = 0; const length = data.length; // μ§μ λ³μ μ μΈ for (let i = 0; i < length; i++) { const char = data.charCodeAt(i); hash = ((hash << 5) - hash) + char; hash &= hash; } }
- μΈμ€ν΄μ€ λ³μλ₯Ό μ μΈνλ μμΉλ λ Όμμ΄ λΆλΆνλ€.
- μλ°λ ν΄λμ€ λ§¨ μ²μμ μ μΈνμ§λ§ C++μ λ§μ§λ§μ μ μΈ(κ°μ κ·μΉ)νλ€.
- μ΄λ μͺ½μ΄λ μκ΄ μμΌλ μ μλ €μ§ μμΉμ μΈμ€ν΄μ€ λ³μλ₯Ό λͺ¨μμΌ νλ€.
A ν¨μμ B ν¨μκ° μλ€κ³ νμ:
A ν¨μκ° B ν¨μλ₯Ό νΈμΆνλ€λ©΄:
- A ν¨μλ₯Ό λ¨Όμ λ°°μΉνλ€.
- A, B ν¨μλ μλ‘ κ°κΉμ΄ μμΉμ μ μΈν΄μΌ νλ€.
---
κ²°κ³Ό: νΈμΆλλ ν¨μλ₯Ό μ°ΎκΈ° μ¬μμ§λ©°, κ°λ
μ±λ λμμ§λ€.
---
μ΅κ·Ό λν₯: ν¨μλ μ μλλ μμ μ΄ μλλΌ νΈμΆλλ μμ μ λμνλ©° νΈμ΄μ€ν
μ΄ μ§μλκΈ° λλ¬Έμ
Aν¨μλ₯Ό λ¨Όμ μ°λ B ν¨μλ₯Ό λ¨Όμ μ°λλ μ°¨μ΄κ° μμ΅λλ€.
νΈμΆμμ κ³Ό μ μ μμ μ΄ λΆλ¦¬λμ μμλ μκ΄ μμΌλ μμ°μ€λ½κ² μ½μ΄ λ΄λ €κ°λ λ°©ν₯μΌλ‘ κΈ°μ¬νλ€.let todos = [];
const deleteTodo = (e) => {
const deleteButton = e.target;
const item = deleteButton.parentNode;
const cleanTodo = todos.filter((todo) => todo.id !== item.id);
saveTodos();
}
const saveTodos = () => {
localStorage.setItem(todoItem, JSON.stringify(todos));
}
const loadTodos = () => {
const loadedTodos = localStorage.getItem(todoItem);
}
const init = () => {
loadTodos();
todoForm.addEventListener('submit', handleSubmit);
}
init();κ°λ μ μΈ μΉνλκ° λμμλ‘ μ½λλ₯Ό κ°κΉμ΄ λ°°μΉνλ€.
μΉνλκ° λμ μμΈ:
- μ§μ μ μΈ μ’
μμ± (ν ν¨μκ° λ€λ₯Έ ν¨μλ₯Ό νΈμΆ)
- λ³μμ κ·Έ λ³μλ₯Ό μ¬μ©νλ ν¨μ
- λΉμ·ν λμμ μννλ ν¨μclass BankAccount {
alias;
numberCode;
balance;
constructor({ alias = "λ³μΉμμ", numberCode, balance }) {
this.alias = alias;
this.numberCode = numberCode;
this.balance = balance;
}
get basicInfo() {
return `${this.alias}: ${this.numberCode} / νμ¬ μμ‘: ${this.balance.toLocaleString("ko-KR")} μ`;
}
}
const dataFromAPI = {
alias: "γ
γ
κ³μ’",
numberCode: "5353-825-82825",
balance: 5126500
};
const myBankAccount = new BankAccount(dataFromAPI);
console.log(`[INFO] myBankAccount.alias > ${myBankAccount.alias}`);
console.log(`[INFO] myBankAccount.numberCode > ${myBankAccount.numberCode}`);
console.log(`[INFO] myBankAccount.balance > ${myBankAccount.balance}`);
// [INFO] myBankAccount.alias > γ
γ
κ³μ’
// [INFO] myBankAccount.numberCode > 5353-825-82825
// [INFO] myBankAccount.balance > 5126500
console.log(`[INFO] myBankAccount.basicInfo > ${myBankAccount.basicInfo}`);
// [INFO] myBankAccount.basicInfo > γ
γ
κ³μ’: 5353-825-82825 / νμ¬ μμ‘: 5,126,500 μ- ν¨μ νΈμΆ μ’ μμ±μ μλλ°©ν₯μ μ μ§νλ€.
- νΈμΆλλ ν¨μλ₯Ό νΈμΆνλ ν¨μλ³΄λ€ λ€μ λ°°μΉνλ€.
- μμ€μ½λλ μμ°μ€λ½κ² κ³ μ°¨μ -> μ μ°¨μμΌλ‘ λ΄λ €κ°λ€.
- μ€μ κ°λ μ κ°μ₯ λ¨Όμ , μΈμΈν μ¬νμ λ§μ§λ§μ!
Q. ν νμ κ°λ‘λ‘ μΌλ§λ κΈΈμ΄μΌ μ λΉν κΉ?
A. λλ€μμ νλ‘κ·Έλλ¨Έλ€μ λͺ
λ°±ν μ§§μ νμ μ νΈνλ―λ‘ μ§§μ νμ΄ λ°λμ§νλ€.
μΌλ°μ μΈ νλ‘κ·Έλ¨μμ νκ· μ μΈ κ°λ‘νμ κΈΈμ΄λ λλ΅ 20-60μ μ¬μ΄
λ κΈΈμ΄λ μκ΄μλ€ μμ¦ μ μ νλ‘κ·Έλλ¨Έλ€μ λͺ¨λν°λ ν¬κ³ λλ μ’μμ 200μλ κ°λ₯
νμ κ°μΈμ μΌλ‘λ 120μ μ λλ‘ κΈΈμ΄λ₯Ό μ ννλ€.
κ°λ‘λ‘λ 곡백μ μ¬μ©ν΄ λ°μ ν κ°λ κ³Ό λμ¨ν κ°λ μ νννλ€.
// ν λΉ μ°μ°μ μ’μ°λ‘ 곡백μ μ€ => μΌμͺ½, μ€λ₯Έμͺ½ μμκ° νμ€νκ² κ΅¬λΆλ¨
const totalQuantity = items
// ν¨μ μ΄λ¦κ³Ό κ΄νΈ μ¬μ΄μλ 곡백μ λ£μ§ μμ => ν¨μμ μΈμμ λ°μ ν¨μ 보μ¬μ€
.filter((item) => item.limitQuantity === null)
// κ΄νΈ μμ μΈμλΌλ¦¬λ μΌν λ€μ 곡백μ ν΅ν΄ μΈμκ° λ³κ°λΌλ μ¬μ€μ 보μ¬μ€
.reduce((acc, val) => acc + val.quantity, 0);-
μ°μ°μ μ°μ μμλ₯Ό κ°μ‘°νκΈ° μν΄μλ 곡백μ μ¬μ©νλ€.
return b*b - 4*a*c; -
νμ§λ§.. Code Formatterλ±μ λκ΅¬κ° μ°μ°μ μ°μ μμκΉμ§ κ³ λ €νμ§ λͺ»νλ―λ‘
곡백μ μμλ‘ λ£μ΄μ£ΌλλΌλ μ¬λΌμ§λ κ²½μ°κ° λλΆλΆ.Q. κ·Έλ λ€λ©΄ κ΄νΈλ‘ λ¬Άμ΄μ£Όλ κ²μ΄ λ λ°λμ§νμ§ μμκΉ? π€
- μ΄λ° μ λ ¬μ μ½λκ° μλ±ν λΆλΆμ κ°μ‘°ν΄ μλκ° κ°λ €μ§ μ μλ€.
- μλ₯Ό λ€μ΄, λ³μ μ νμ 무μνκ³ λ³μμ΄λ¦λΆν° μ½μ μ μλ€.
- κ²λ€κ° Code Formatter λλΆλΆλ€μ μ΄λ κ² ν΄λλ΄€μ 무μνκ³ μλλλ‘ λλ €λλλ€.
- κ·Έλ¬λ―λ‘ μ μΈλ¬Έκ³Ό ν λΉλ¬Έμ λ³λλ‘ μ λ ¬ν νμκ° μλ€.
// BAD
public class FitNessExpenditer implements ResponseSender {
private Socket socket;
private InputStream input;
private FitNesseContext context;
public FitNEsseExpenditer(Socket s, FitNesseContext context) throws Exception {
this.context = context;
socket = s;
input = s.getInputStream();
}
}// GOOD
public class FitNessExpenditer implements ResponseSender {
private Socket socket;
private InputStream input;
private FitNesseContext context;
public FitNEsseExpenditer(Socket s, FitNesseContext context) throws Exception {
this.context = context;
socket = s;
input = s.getInputStream();
}
}- λ€μ¬μ°κΈ°ν νμΌμ κ΅¬μ‘°κ° νλμ λ€μ΄μ¨λ€.
- νμ§λ§ λ€μ¬μ°κΈ°λ₯Ό νμ§ μμ μΌλͺ μ€νκ²ν° μ½λλ μ΄μ¬ν λΆμνμ§ μλ ν μ΄ν΄νκΈ°κ° νλ€λ€.
// BAD
public class CommentWidget extends TextWidget {
public static final String REGEXP = "^#[^\r\n]*(?:(?:\r\n)|\n|\r)?";
public CommentWidget(ParentWidget parent, String text){super(parent, text);}
public String render() throws Exception {return ""; }
}// GOOD
// κ°λ
μ±μ μν΄ νμ€μ΄λΌλ μ μ±μ€λ½κ² λ€μ¬μ°κΈ°λ‘ κ°μΈμ£Όμ.
public class CommentWidget extends TextWidget {
public static final String REGEXP = "^#[^\r\n]*(?:(?:\r\n)|\n|\r)?";
public CommentWidget(ParentWidget parent, String text){
super(parent, text);
}
public String render() throws Exception {
return "";
}
}λΉ whileλ¬Έμ΄λ forλ¬Έμ μ ν λκ° μλ€.
κ°λ₯νν νΌν΄μΌ λμ§λ§, νΌνμ§ λͺ» ν κ²½μ°μ λΉ λΈλ‘μ μ¬λ°λ‘ λ€μ¬μ°κ³ κ΄νΈλ‘ κ°μΌλ€.
κ·Έλ μ§ μμΌλ©΄ μ°Ύμ μ μλ λ²κ·Έκ° λ°μν μ§λ..
λΉ λΈλ‘μ λ°λ³΅λ¬Έμ κ²½μ° μ 보μ΄μ§ μμΌλ―λ‘, ;(μΈλ―Έμ½λ‘ )μ κ²½μ°μλ μνμ μ μ΄μ λμ λκ² ν΄μ£Όμ!
while(dis.read(buf, 0, readBufferSize) != -1)
;νμ μν΄μλ€λ©΄, ν κ·μΉμ κ°μ₯ μ°μ μ νκ³ μ νΈν΄μΌ νλ€.
μ²μ νμ΄ μ΄λ£¨μ΄ μ‘λ€λ©΄,
μ½λ©μ μμνκΈ° μ , μ½λ© μ€νμΌμ μλ Ό(κ΄νΈλ₯Ό μ΄λμ λ£μμ§, λ€μ΄λ°μ μ΄λ»κ² ν μ§ λ±)νμ¬
IDE Fomatterλ‘ μ§μ νμ¬ κ΅¬ννλ κ²μ΄ μ³μ λ°©μμ΄λ€.μ’μ μννΈμ¨μ΄ μμ€ν μ μ½κΈ° μ¬μ΄ λ¬Έμλ‘ μ΄λ£¨μ΄μ§λ€.
μ€νμΌμ μΌκ΄μ μ΄κ³ λ§€λλ¬μμΌ νλ€.
μ¨κ° μ€νμΌμ μμ΄ μ½λλ₯Ό νμ μ΄μμΌλ‘ 볡μ‘νκ² λ§λ€μ§ λ§μ.
π Prerequisites
π How to use
π Clean Code
π Meaningful Names + Extra
π Functions
π Comments
π Formatting
π Objects and Data Structures
ongoing! π
π Error Handling
π Boundaries
π Unit Tests
π Classes
π Systems
π Emergence
up-to-here! π
π§· Concurrency
π§· JUnit Internals