νλ‘κ·Έλλ° ν¨λ¬λ€μμ΄λ νλ‘κ·Έλλ¨Έμκ² νλ‘κ·Έλλ°μ κ΄μ μ κ°κ² ν΄μ£Όλ μν μ νλ κ°λ° λ°©λ²λ‘ μ΄λ€.
μλ₯Ό λ€μ΄, κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ νλ‘κ·Έλλ¨Έλ€μ΄ νλ‘κ·Έλ¨μ μνΈ μμ©νλ κ°μ²΄λ€μ μ§ν©μΌλ‘ λ³Ό μ μκ² νλ λ°λ©΄μ,
ν¨μν νλ‘κ·Έλλ°μ μν κ°μ μ§λμ§ μμ ν¨μ κ°λ€μ μ°μμΌλ‘ λ³Ό μ μκ² νλ€.
νλ‘κ·Έλλ° ν¨λ¬λ€μμ ν¬κ² μ μΈνκ³Ό λͺ λ ΉνμΌλ‘ λλκ³ , μ μΈνμ ν¨μνμ΄λΌλ νμ κ°λ μ κ°μ§λ©°, λͺ λ Ήνμ κ°μ²΄ μ§ν₯νκ³Ό μ μ°¨ μ§ν₯νμΌλ‘ λλλ€.
μ μΈνκ³Ό ν¨μν νλ‘κ·Έλλ°
μ μΈν νλ‘κ·Έλλ°(declarative programming)μ '무μμ' νμ΄λ΄λκ°μ μ§μ€νλ ν¨λ¬λ€μμ΄λ€. μλ₯Ό λ€μ΄, νλ©΄μ μΉ νμ΄μ§λ₯Ό λνλ΄μΌ ν λ, "μ΄λ€ λ°©λ²"μΌλ‘ νμ΄μ§λ₯Ό λνλ΄λμ§μ μ§μ€νλ κ²μ΄ μλλΌ, μ λͺ©, λ³Έλ¬Έ, μ΄λ―Έμ§ λ± "무μμ" νμ΄μ§μ λνλΌμ§ μ§μ€νλ κ²μ΄λ€.
ν¨μν νλ‘κ·Έλλ°μ μ μΈν νλ‘κ·Έλλ°μ μΌμ’ μ΄λ€.
μλ₯Ό λ€μ΄λ³΄λ©΄ λ€μκ³Ό κ°λ€.
const list = [1,2,3,4,5,11,12]
const ret = list.reduce((max, num) => num > max? num : max, 0)
console.log(ret) //12
*reduce() ν¨μλ 'λ°°μ΄'λ§ λ°μμ λμ ν κ²°κ³Όκ°μ λ°ννλ μμν¨μμ΄λ€.
reduce ν¨μμ μ¬μ© λ°©λ²μ μλ λΈλ‘κ·Έμμ λ³΄κ³ μ΄ν΄νλ€!
https://velog.io/@teo_ryu/javascript-reduce-%ED%95%A8%EC%88%98%EC%99%80-%EC%8B%B8%EC%9A%B0%EA%B8%B0
[javascript] reduce ν¨μμ μΈμ°κΈ°
ν¨μλ₯Ό μ€ννκ³ νλμ κ²°κ³Όκ°μ λ°ννλ reduce. μ΄λ»κ² μ겨먹μ κ±°λ
velog.io
μ°μ max κ°μ initial κ°μΌλ‘ 0μ΄ λ€μ΄κ°λ€. κ·Έλ¦¬κ³ κ·Έ νμ listμ μμλ€μ΄ μ°¨λ‘λλ‘ numμΌλ‘ λ€μ΄μ€λ©΄μ listμ μ΅λκ°μ ꡬνλ κ²μ΄λ€.
num > max κ° trueμ΄λ©΄ maxμ numμ΄ μ μ₯λκ³ , falseμ΄λ©΄ maxκ° μ μ₯λλ€.
λͺ¨λ list μμλ₯Ό κ±°μΉκ³ λλ©΄ μ΅μ’ κ²°κ³Όκ°μ΄ retμ μ μ₯λκ³ , 12κ° μΆλ ₯λλ€.
ν¨μν νλ‘κ·Έλλ°μ μ΄λ¬ν 'μμ ν¨μ'λ€μ λΈλ‘μ²λΌ μμμ λ‘μ§μ ꡬννκ³ 'κ³ μ°¨ ν¨μ'λ₯Ό ν΅ν΄ μ¬μ¬μ©μ±μ λμΈ νλ‘κ·Έλλ° ν¨λ¬λ€μμ΄λ€.
μ¬κΈ°μ μμ ν¨μ, κ³ μ°¨ ν¨μμ λν κ°λ μ λ¦¬κ° νμνλ€κ³ μκ°νλ€.
μμ ν¨μ
const pure = (a,b) => {
return a+b
}
μΆλ ₯μ΄ μ λ ₯μλ§ μμ‘΄νλ ν¨μμ΄λ€. μ ν¨μμμ λ§€κ°λ³μ a, bμλ§ μν₯μ λ°λλ€. λ§μ½ a, b λ§κ³ λ€λ₯Έ μ μ λ³μ c λ±μ΄ μ΄ μΆλ ₯μ μν₯μ μ£Όλ©΄ μμ ν¨μκ° μλλ€.
κ³ μ°¨ ν¨μ
ν¨μλ₯Ό λ§€κ° λ³μλ‘ μ λ ₯μ λ°κ±°λ λ¦¬ν΄ κ°μΌλ‘ μ¬μ©νλ ν¨μ. (ν¨μλ₯Ό μ΄λ€ κ°μ²λΌ μ¬μ©νλ€.)
// ν¨μλ₯Ό μΈμλ‘ μ λ¬
function sayHello() {
return "Hello, ";
}
function greeting(helloMessage, name) {
console.log(helloMessage() + name);
}
// `sayHello`λ₯Ό `greeting` ν¨μμ μΈμλ‘ μ λ¬
greeting(sayHello, "JavaScript!");
// λ¦¬ν΄ κ°μΌλ‘ ν¨μλ₯Ό μ¬μ©
function sayHello() {
return function() {
console.log("Hello!");
}
}
μ΄λ¬ν κ³ μ°¨ ν¨μλ₯Ό μ¬μ©νκΈ° μν΄μλ ν΄λΉ μΈμ΄κ° ν¨μλ₯Ό μΌκΈ κ°μ²΄λ‘ μ¬μ©νλ€λ νΉμ§μ κ°μ ΈμΌ νλ€.
μΌκΈ κ°μ²΄λ‘ μ¬κ²¨μ§κΈ° μν΄μ λ€μκ³Ό κ°μ νΉμ§μ κ°μ ΈμΌ νλ€.
- ν¨μμ λ§€κ°λ³μλ‘ λ΄κΈΈ μ μμ.
- ν¨μμ λ¦¬ν΄ κ°μΌλ‘ μ¬μ©ν μ μμ.
- λ³μμ ν λΉλκ±°λ λ©μλλ‘ μ¬μ©ν μ μμ.
*λ©μλμ ν¨μμ μ°¨μ΄λ ν¨μλ₯Ό νΈμΆνλ κ°μ²΄κ° μλ κ²½μ° λ©μλλΌκ³ λ§νλ©°, ν¨μλ₯Ό νΈμΆνλ κ°μ²΄κ° μλ κ²½μ° ν¨μλΌκ³ λ§νλ€.
λͺ λ Ήν νλ‘κ·Έλλ°
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°
κ°μ²΄ μ§ν₯ νλ‘κ·Έλ¨μ΄λ κ°μ²΄λ€μ μ§ν©μΌλ‘ νλ‘κ·Έλ¨μ μνΈ μμ©μ νννλ©° λ°μ΄ν°λ₯Ό κ°μ²΄λ‘ μ·¨κΈνμ¬ κ°μ²΄ λ΄λΆμ μ μΈλ λ©μλλ₯Ό νμ©νλ λ°©μμ λ§νλ€.
μλ₯Ό λ€μ΄, μμ°μλ‘ μ΄λ£¨μ΄μ§ λ°°μ΄μμ μ΅λκ°μ μ°ΎμΌλΌκ³ νλ€λ©΄ λ€μκ³Ό κ°μ΄ λ‘μ§μ ꡬμ±νλ€.
const ret = [1,2,3,4,5,11,12]
class List {
contructor(list){
this.list = list
this.mx = list.reduce((max, num) => num > max ? num : max, 0)
}
getMax() {
return this.mx
}
}
const a = new List(ret)
console.log(a.getMax()) //12
λ³μ aμ ν΄λμ€ Listμ κ°μ²΄λ₯Ό μμ±νλλ°, μ΄ κ³Όμ μμ ν΄λμ€ Listμ μμ±μλ₯Ό μ€ννκ³ , λ§€κ°λ³μμΈ retμ μ΅λκ°μ ν΄λμ€ Listμ mx λ³μμ μ μ₯νλ€.
κ·Έλ¦¬κ³ ν΄λμ€ Listμ κ°μ²΄κ° μ μ₯λ aμμ getMax() ν¨μλ₯Ό νΈμΆνμ¬ retμ μ΅λκ°μ μΆλ ₯νλ€.
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ νΉμ§
- μΆμν
- 볡μ‘ν μμ€ν μΌλ‘λΆν° κ° κ°μ²΄λ€μ 곡ν΅μ μΈ κ°λ λλ κΈ°λ₯μ κ°μΆλ¦¬λ κ²μ΄λ€.
- μλ₯Ό λ€μ΄, μλμ°¨μ μ€ν λ°μ΄λ λͺ¨λ μ΄λ μλ¨μ΄λ©΄μ, μ μ§κ³Ό νμ§μ΄ κ°λ₯νλ€λ 곡ν΅μ μ΄ μλ€.
- μ΄λ¬ν κ²½μ° 'μ΄λ μλ¨'μ΄λΌλ μμ ν΄λμ€μ 'μλμ°¨'μ 'μ€ν λ°μ΄'λΌλ νμ ν΄λμ€λ₯Ό λκ³ , μ΄λ μλ¨ ν΄λμ€μ νμ ν΄λμ€λ€μ 곡ν΅μ μΈ κΈ°λ₯(μ μ§, νμ§)μ μμ±λ€μ μ μνλ κ²μ΄λ€.
- μΊ‘μν
- κ°μ²΄μ μμ±κ³Ό λ©μλλ₯Ό νλλ‘ λ¬Άκ³ μΌλΆλ₯Ό μΈλΆμ κ°μΆμ΄μ μλνλ κ²μ΄λ€.
- μμμ±
- μμ ν΄λμ€μ νΉμ±μ νμ ν΄λμ€κ° μ΄μ΄λ°μμ μ¬μ¬μ©νκ±°λ μΆκ°, νμ₯νλ κ²μ λ§νλ€.
- λ€νμ±
- νλμ λ©μλλ ν΄λμ€κ° λ€μν λ°©λ²μΌλ‘ λμνλ κ²μ λ§νλ€. λνμ μΌλ‘ μ€λ² λ‘λ©κ³Ό μ€λ² λΌμ΄λ©μ΄ μλ€.
- μ€λ² λ‘λ©
- κ°μ μ΄λ¦μ κ°μ§ λ©μλλ₯Ό μ¬λ¬ λλ κ²μ λ§νλ€. λ©μλμ νμ , λ§€κ° λ³μμ μ νκ³Ό κ°μ λ±μΌλ‘ μ¬λ¬ κ°λ₯Ό λ μ μλ€.
- μμλ λ€μκ³Ό κ°λ€.
Class Person {
public void eat(String a) {
System.out.println("I eat" + a);
}
public void eat(String a, String b) {
System.out.println("I eat" + a + "and" +b);
}
}
public class CalculateArea {
public static void main(String[] args) {
Person a = new Person();
a.eat("apple");
a.eat("tomato", "phodo");
}
}
/*
I eat apple
I eat tomato and phodo
*/
Person ν΄λμ€μ κ°μ²΄ aκ° eat ν¨μλ₯Ό νΈμΆν λ, λ§€κ°λ³μμ κ°μμ λ°λΌ λ€λ₯Έ eat ν¨μκ° νΈμΆλλ κ²μ νμΈν μ μλ€.
- μ€λ²λΌμ΄λ©
- μμν΄λμ€λ‘λΆν° μμλ°μ λ©μλλ₯Ό νμ ν΄λμ€κ° μ¬μ μνλ κ²μ μλ―Ένλ€.
- μμλ λ€μκ³Ό κ°λ€.
Class Animal {
public void bark() {
System.out.println("mumu! mumu!");
}
}
Class Dog extends Animal {
@override
public void bark() {
System.out.println("wal!! wal!!")
}
}
public class Main {
public static void main(String[] args) {
Dog d = new Dog();
d.bark();
}
}
/*
wal!! wal!!
*/
Animal ν΄λμ€λ₯Ό μμλ°μ Dog ν΄λμ€μμ μμ ν΄λμ€μ bark() ν¨μλ₯Ό μ€λ²λΌμ΄λ©(μ¬μ μ)νμ¬ λ©μΈμμ Dog ν΄λμ€μ bark() ν¨μλ₯Ό μ€ννμ λ "wal!! wal!!"μ΄ μΆλ ₯λλ€.
μ μ°¨ν νλ‘κ·Έλλ°
μ μ°¨ν νλ‘κ·Έλλ°μ λ‘μ§μ΄ μνλμ΄μΌ ν μ°μμ μΈ κ³μ° κ³Όμ μΌλ‘ μ΄λ£¨μ΄μ Έ μλ€. μΌμ΄ μ§νλλ λ°©μμΌλ‘ κ·Έμ μ½λλ₯Ό ꡬννκΈ°λ§ νλ©΄ λκΈ° λλ¬Έμ μ½λμ κ°λ μ±μ΄ μ’μΌλ©° μ€ν μλκ° λΉ λ₯΄λ€. κ·Έλμ κ³μ°μ΄ λ§μ μμ μ μ£Όλ‘ μ°μΈλ€.
νμ§λ§, λͺ¨λννκΈ°κ° μ΄λ ΅κ³ μ μ§ λ³΄μμ±μ΄ λ¨μ΄μ§λ€.
μλ₯Ό λ€μ΄ μμ°μλ‘ μ΄λ£¨μ΄μ§ λ°°μ΄μμ μ΅λκ°μ μ°ΎμΌλΌκ³ νλ€λ©΄ λ€μκ³Ό κ°μ΄ λ‘μ§μ ꡬμ±νλ€.
const ret = [1,2,3,4,5,11,12]
let a = 0
for (let i = 0l i < ret.length; i++){
a = Math.max(ret[i],a);
}
console.log(a) //12
μ½λκ° μμ±λ μμλλ‘ ret λ°°μ΄κ³Ό a λ³μλ₯Ό μ μΈνκ³ , for λ°λ³΅λ¬Έμ μ΄μ©ν΄μ ret λ°°μ΄μ μ΅λκ°μ μ°Ύμμ aμ μ μ₯νκ³ μΆλ ₯νλ€.
'CS > λμμΈ ν¨ν΄' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λμμΈ ν¨ν΄] MVP ν¨ν΄, MVVM ν¨ν΄ (0) | 2023.08.07 |
---|---|
[λμμΈ ν¨ν΄] MVC ν¨ν΄ (0) | 2023.08.03 |
[λμμΈ ν¨ν΄] μ΄ν°λ μ΄ν° ν¨ν΄(Iterator Pattern)κ³Ό λ ΈμΆλͺ¨λ ν¨ν΄(revealing module pattern) (0) | 2023.08.03 |
[λμμΈ ν¨ν΄] νλ‘μ ν¨ν΄(Proxy Pattern)κ³Ό νλ‘μ μλ²(Proxy Server) (0) | 2023.08.03 |
[λμμΈ ν¨ν΄] μ΅μ λ² ν¨ν΄(Observer Pattern) (0) | 2023.08.02 |