전체 κΈ€ 139

Java 2μ£Όμ°¨ (상속~Stream)

08. 상속 (Inheritance)ν•œμ€„ μš”μ•½μƒμœ„ 클래슀의 ν•„λ“œ/λ©”μ„œλ“œλ₯Ό ν•˜μœ„ ν΄λž˜μŠ€κ°€ λ¬Όλ €λ°›μ•„ μž¬μ‚¬μš©+ν™•μž₯.포인트- extends- is-a 관계- μƒμ„±μž 체이닝(super())- μ ‘κ·Ό μ œν•œμžclass Animal { protected String name; public Animal(String name){ this.name = name; } public void speak(){ System.out.println(name + " makes a sound"); }}class Dog extends Animal { public Dog(String name){ super(name); } @Override public void speak(){ System.out.println(name..

JAVA1μ£Όμ°¨ (μ†Œκ°œ ~ ν΄λž˜μŠ€μ™€ 객체02)

01. Java - μ†Œκ°œνŠΉμ§•ν”Œλž«νΌ 독립성 (JVM μœ„μ—μ„œ μ‹€ν–‰)객체 μ§€ν–₯ μ–Έμ–΄μžλ™ λ©”λͺ¨λ¦¬ 관리 (Garbage Collector)κ°•νƒ€μž… μ–Έμ–΄Hello World 예제public class Main { public static void main(String[] args) { System.out.println("Hello Java"); }}02. Java - λ³€μˆ˜μ™€ μžλ£Œν˜•κΈ°λ³Έν˜•(Primitive)μ •μˆ˜ν˜•: byte, short, int, longμ‹€μˆ˜ν˜•: float, doubleλ¬Έμžν˜•: charλ…Όλ¦¬ν˜•: booleanμ°Έμ‘°ν˜•(Reference)클래슀, λ°°μ—΄, μΈν„°νŽ˜μ΄μŠ€ λ“±μ˜ˆμ‹œint age = 25;double height = 175.5;char grade = 'A';boolean isStud..

JAVA 2025.08.11

λ‚¨λŠ” 슀마트폰으둜 효율적인 크둀링 μ„œλ²„ μš΄μ˜ν•˜κΈ°

νšŒμ‚¬μ—μ„œ 크둀링용 μ„œλ²„κ°€ ν•„μš”ν•΄ AWS EC2λ₯Ό κ²€ν† ν–ˆμ§€λ§Œ, λΉ„μš© λ¬Έμ œμ™€ ν”„λ‘μ‹œ κ΄€λ ¨ 였λ₯˜λ‘œ 인해 싀행이 μ–΄λ €μ› λ‹€. λŒ€μ•ˆμ„ κ³ λ―Όν•˜λ˜ 쀑, μ‚¬μš©λ˜μ§€ μ•Šκ³  μŒ“μ—¬ 있던 κ΅¬ν˜• 슀마트폰이 λˆˆμ— λ„μ—ˆλ‹€. μŠ€λ§ˆνŠΈν°λ„ CPU와 λ©”λͺ¨λ¦¬λ₯Ό κ°–μΆ˜ κΈ°κΈ°μ΄λ―€λ‘œ, μ„±λŠ₯이 λ‹€μ†Œ 떨어지더라도 크둀링 μ„œλ²„λ‘œ ν™œμš©ν•  수 μžˆμ§€ μ•Šμ„κΉŒ ν•˜λŠ” 생각이 λ“€μ—ˆλ‹€.μŠ€λ§ˆνŠΈν°μ—μ„œ 크둀링 ν™˜κ²½ κ΅¬μΆ•ν•˜κΈ°1️⃣ UserLand 앱을 μ΄μš©ν•΄ λ¦¬λˆ…μŠ€(Ubuntu) μ„€μΉ˜PlayμŠ€ν† μ–΄μ—μ„œ UserLand 앱을 μ„€μΉ˜ν•œ ν›„ Ubuntu ν™˜κ²½μ„ μ‹€ν–‰μ΅œμ΄ˆ μ‹€ν–‰ μ‹œ κΈ°λ³Έ 섀정을 따라가면 μžλ™μœΌλ‘œ Ubuntu ν™˜κ²½μ΄ μ„€μΉ˜λ¨2️⃣ 원격 접속을 μœ„ν•œ 포트 μ„€μ •κΈ°λ³Έμ μœΌλ‘œ μ‹œμŠ€ν…œ 포트(0~1023)λŠ” μ‚¬μš© λΆˆκ°€ν•˜λ―€λ‘œ, SSHλ₯Ό μœ„ν•΄ 2022 포트λ₯Ό μ‚¬μš©ν•œλ‹€.echo "Port 20..

crawling 2025.02.14

MVC νŒ¨ν„΄ (Model-View-Controller Pattern)

MVC νŒ¨ν„΄ (Model-View-Controller Pattern)μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ꡬ쑰λ₯Ό μ„Έ κ°€μ§€ μ£Όμš” ꡬ성 μš”μ†Œλ‘œ λ‚˜λˆ„μ–΄ μ†Œν”„νŠΈμ›¨μ–΄ 섀계λ₯Ό μ²΄κ³„μ μœΌλ‘œ κ΄€λ¦¬ν•˜λŠ” μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό λ°μŠ€ν¬ν†± μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ°œμ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€.MVC νŒ¨ν„΄μ˜ ν•΅μ‹¬λ™μž‘(μ•Œκ³ λ¦¬μ¦˜)의 μΊ‘μŠν™”ν–‰λ™(μ•Œκ³ λ¦¬μ¦˜)을 λ³„λ„μ˜ 클래슀둜 뢄리해 각각 λ…λ¦½μ μœΌλ‘œ κ΄€λ¦¬λ™μž‘ ꡐ체 κ°€λŠ₯객체의 λ™μž‘μ„ 싀행쀑 λ³€κ²½ ν• μˆ˜μžˆλ‹€.μœ μ—°μ„± 증가행동을 λ³€κ²½ν•˜κ±°λ‚˜ μΆ”κ°€ν• λ•Œ κΈ°μ‘΄μ½”λ“œλ₯Ό μˆ˜μ •ν•  ν•„μš” 없이 μƒˆλ‘œμš΄ 클래슀(μ „λž΅)을 μΆ”κ°€ ν•˜λ©΄λœλ‹€.κ΅¬μ„±μš”μ†ŒModel (λͺ¨λΈ)μ—­ν• : 데이터와 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ κ΄€λ¦¬ν•©λ‹ˆλ‹€.μ±…μž„: λ°μ΄ν„°λ² μ΄μŠ€μ™€μ˜ μƒν˜Έμž‘μš©, 데이터 μ €μž₯, μ—…λ°μ΄νŠΈ, μ‚­μ œ λ“±μ˜ μž‘μ—… μˆ˜ν–‰.μ˜ˆμ‹œ: λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ”, API 응닡 처리 둜직.View (λ·°)μ—­ν• : 사..

λ…ΈμΆœ λͺ¨λ“ˆ νŒ¨ν„΄ (Revealing Module Pattern)

λ…ΈμΆœ λͺ¨λ“ˆ νŒ¨ν„΄ (Revealing Module Pattern)μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λͺ¨λ“ˆ νŒ¨ν„΄μ˜ λ³€ν˜•μœΌλ‘œ, 객체 λ‚΄λΆ€μ˜ λΉ„κ³΅κ°œ(private) λ³€μˆ˜μ™€ λ©”μ„œλ“œλŠ” 숨기고, 외뢀에 λ…ΈμΆœν•  멀버λ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ„ μ–Έν•˜μ—¬ κ΄€λ¦¬ν•˜λŠ” λ””μžμΈ νŒ¨ν„΄λ…ΈμΆœλͺ¨λ“ˆ νŒ¨ν„΄μ˜ 핡심λͺ…μ‹œμ  λ…ΈμΆœμ–΄λ–€ λ©”μ„œλ“œμ™€ λ³€μˆ˜λ₯Ό 외뢀에 κ³΅κ°œν• μ§€ λͺ…ν™•ν•˜κ²Œ μ œμ–΄ν•  수 μžˆλ‹€.μΊ‘μŠν™”λΉ„κ³΅κ°œ λ³€μˆ˜λ‚˜ λ©”μ„œλ“œλŠ” ν΄λ‘œμ €λ₯Ό 톡해 μ™ΈλΆ€μ—μ„œ μ ‘κ·Όν•  수 없도둝 숨길 수 μžˆλ‹€.가독성 ν–₯μƒκ³΅κ°œλœ(public) λ©”μ„œλ“œμ™€ λΉ„κ³΅κ°œ(private) λ©”μ„œλ“œλ₯Ό λΆ„λ¦¬ν•˜μ—¬ μ½”λ“œλ₯Ό 더 λͺ…ν™•ν•˜κ²Œ λ§Œλ“ λ‹€.κ΅¬μ„±μš”μ†ŒContextμ „λž΅μ„ μ‚¬μš©ν•˜λŠ” μ£Όμ²΄μ•Œκ³ λ¦¬μ¦˜(μ „λž΅)을 μ‹€ν–‰ν•˜κΈ°μœ„ν•΄ Strategy객체λ₯Ό μ°Έμ‘°Strategyλ™μž‘(μ•Œκ³ λ¦¬μ¦˜)의 μΈν„°νŽ˜μ΄μŠ€ λ˜λŠ” 좔상 ν΄λž˜μŠ€λ™μž‘μ˜ κ³΅ν†΅λœ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ConcreteSt..

λ””μžμΈνŒ¨ν„΄ - μ΄ν„°λ ˆμ΄ν„° νŒ¨ν„΄

μ΄ν„°λ ˆμ΄ν„° νŒ¨ν„΄ (Iterator Pattern)μ»¬λ ‰μ…˜(리슀트, μ§‘ν•©, 트리 λ“±) λ‚΄μ˜ μš”μ†Œλ₯Ό 순차적으둜 μ ‘κ·Όν•˜λ©΄μ„œλ„ μ»¬λ ‰μ…˜μ˜ λ‚΄λΆ€ ꡬ쑰λ₯Ό λ…ΈμΆœν•˜μ§€ μ•Šλ„λ‘ ν•˜λŠ” λ””μžμΈ νŒ¨ν„΄μ΄ νŒ¨ν„΄μ€ 반볡자(Iterator) 객체λ₯Ό μ œκ³΅ν•˜μ—¬ 데이터λ₯Ό μˆœνšŒμ΄ν„°λ ˆμ΄ν„° νŒ¨ν„΄μ˜ 핡심내뢀 ꡬ쑰 μ€λ‹‰μ»¬λ ‰μ…˜μ˜ λ‚΄λΆ€ κ΅¬ν˜„μ„ μ•Œ ν•„μš” 없이, μ™ΈλΆ€μ—μ„œ λ™μΌν•œ λ°©μ‹μœΌλ‘œ 데이터λ₯Ό μˆœνšŒν•  수 있게 ν•œλ‹€.순회 μ±…μž„ λΆ„λ¦¬μ»¬λ ‰μ…˜ ν΄λž˜μŠ€λŠ” 데이터 μ €μž₯κ³Ό 관리에 μ§‘μ€‘ν•˜κ³ , 순회 λ‘œμ§μ€ μ΄ν„°λ ˆμ΄ν„° 객체가 λ‹΄λ‹Ήν•œλ‹€.μΌκ΄€λœ μ ‘κ·Όμ„œλ‘œ λ‹€λ₯Έ 데이터 ꡬ쑰(리슀트, 트리, μ§‘ν•© λ“±)λ₯Ό λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ‘œ μˆœνšŒν•  수 μžˆλ‹€.κ΅¬μ„±μš”μ†ŒIterator μΈν„°νŽ˜μ΄μŠ€μš”μ†Œλ₯Ό μˆœνšŒν•˜κΈ° μœ„ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜μ£Όμš” λ©”μ„œλ“œ:has_next(): λ‹€μŒ μš”μ†Œκ°€ μžˆλŠ”μ§€ 확인.next(): λ‹€μŒ..

ν”„λ‘μ‹œνŒ¨ν„΄ (Proxy Pattern)

ν”„λ‘μ‹œνŒ¨ν„΄ (Proxy Pattern)객체에 λŒ€ν•œ 접근을 μ œμ–΄ν•˜κ±°λ‚˜ 좔가적인 κΈ°λŠ₯을 μ œκ³΅ν•˜κΈ° μœ„ν•΄ 객체의 λŒ€λ¦¬μΈ 역할을 μˆ˜ν–‰ν•˜λŠ” 클래슀λ₯Ό λ§Œλ“œλŠ” ꡬ쑰적 λ””μžμΈ νŒ¨ν„΄ν”„λ‘μ‹œ κ°μ²΄λŠ” μ‹€μ œ 객체(Real Subject)에 λŒ€ν•œ μ°Έμ‘°λ₯Ό μœ μ§€ν•˜λ©°, ν΄λΌμ΄μ–ΈνŠΈκ°€ μ‹€μ œ 객체에 직접 μ ‘κ·Όν•˜μ§€ μ•Šκ³  ν”„λ‘μ‹œλ₯Ό 톡해 κ°„μ ‘μ μœΌλ‘œ μ ‘κ·Όν•˜λ„λ‘ λ§Œλ“ λ‹€.ν”„λ‘μ‹œ νŒ¨ν„΄μ˜ 핡심접근 μ œμ–΄κΆŒν•œ, 인증, μš”μ²­ μ œν•œ 등을 톡해 객체에 λŒ€ν•œ 접근을 κ΄€λ¦¬ν•œλ‹€.예: νŠΉμ • μ‚¬μš©μžλ§Œ λ°μ΄ν„°λ² μ΄μŠ€ μˆ˜μ • κΆŒν•œμ„ κ°–λŠ” 경우.λ¦¬μ†ŒμŠ€ κ΄€λ¦¬λ¦¬μ†ŒμŠ€κ°€ λ¬΄κ²κ±°λ‚˜ 생성 λΉ„μš©μ΄ 높은 객체의 생성을 μ§€μ—°ν•˜κ±°λ‚˜ μ΅œμ ν™” ν•œλ‹€.예: λŒ€μš©λŸ‰ 데이터λ₯Ό μ§€μ—° λ‘œλ”©(Lazy Loading)으둜 처리.μΆ”κ°€ κΈ°λŠ₯λ‘œκΉ…, 캐싱, μš”μ²­ 검증 λ“± μ‹€μ œ 객체와 λ…λ¦½μ μœΌλ‘œ 뢀가적인 λ™μž‘μ„ μˆ˜ν–‰ν•œλ‹€.예:..

μ˜΅μ €λ²„ νŒ¨ν„΄ (Observer Pattern)

μ˜΅μ €λ²„ νŒ¨ν„΄ (Observer Pattern)객체의 μƒνƒœ λ³€ν™”(Subject)λ₯Ό κ°μ§€ν•˜κ³ , κ·Έ 변화에 λ°˜μ‘ν•΄μ•Όν•˜λŠ” λ‹€μˆ˜μ˜ 객체(Observer)에 이λ₯Ό μžλ™μœΌλ‘œ ν†΅λ³΄ν•˜λŠ” λ””μžμΈ νŒ¨ν„΄μ¦‰, ν•˜λ‚˜μ˜ 객체(Subject)κ°€ λ³€ν• λ•Œ μ—°κ²°λœ λ‹€λ₯Έ 객체듀(Observer)μ—κ²Œ μžλ™μœΌλ‘œ λ³€ν™”κ°€ 톡지 되고 λ™μž‘ν•˜λ„λ‘ μ„€κ³„ν•œκ²ƒμ „λž΅ νŒ¨ν„΄μ˜ 핡심Subjectμƒνƒœλ₯Ό κ΄€λ¦¬ν•˜λ©΄ μƒνƒœλ³€ν™”κ°€ λ°œμƒν•˜λ©΄ μ˜΅μ €λ²„λ“€μ—κ²Œ 이λ₯Ό μ•Œλ¦°λ‹€.ObserverSubjectλ₯Ό κ΅¬λ…ν•˜μ—¬ μƒνƒœλ³€ν™”λ₯Ό κ°μ§€ν•˜κ³  μ•Œλ¦Όμ„ λ°›μœΌλ©΄ νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰κ°μ²΄κ°„ λŠμŠ¨ν•œκ²°ν•©(loose coupling)을 μœ μ§€ν•˜λ©΄μ„œλ„ μƒνƒœ 변경에 λ”°λ₯Έ λ°˜μ‘μ„ μžλ™ν™”ν•œλ‹€.κ΅¬μ„±μš”μ†ŒSubjectκ΄€μ°°λ˜λŠ” 객체둜, μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜λ©°, μ˜΅μ €λ²„λ“€μ„ 등둝/μ œκ±°ν•˜κ³  μƒνƒœ λ³€ν™”μ‹œ 톡보ObserverSubjectλ₯Ό ..

λ””μžμΈνŒ¨ν„΄ - μ „λž΅νŒ¨ν„΄

μ „λž΅νŒ¨ν„΄ (Strategy Pattern)객체의 λ™μž‘μ„ λ°”κΎΈκ³  μ‹Άμ„λ•Œ 직접 μ½”λ“œλ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šκ³ , μ•Œκ³ λ¦¬μ¦˜μ΄λ‚˜ 행동을 ν΄λž˜μŠ€ν™” ν•˜μ—¬ λ™μ μœΌλ‘œ μ„ νƒν• μˆ˜μžˆλ„λ‘ μ„€κ³„ν•˜λŠ” νŒ¨ν„΄μ¦‰, λ™μΌν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜μ§€λ§Œ λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ κ΅¬ν˜„λ˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ„ 각각 μΊ‘μŠν™” ν•˜κ³ , μ‹€ν–‰μ‹œμ— 이λ₯Ό μ„ νƒν•΄μ„œ μ‚¬μš©ν• μˆ˜μžˆκ²Œ ν•˜λŠ”κ²ƒμ „λž΅ νŒ¨ν„΄μ˜ ν•΅μ‹¬λ™μž‘(μ•Œκ³ λ¦¬μ¦˜)의 μΊ‘μŠν™”ν–‰λ™(μ•Œκ³ λ¦¬μ¦˜)을 λ³„λ„μ˜ 클래슀둜 뢄리해 각각 λ…λ¦½μ μœΌλ‘œ κ΄€λ¦¬λ™μž‘ ꡐ체 κ°€λŠ₯객체의 λ™μž‘μ„ 싀행쀑 λ³€κ²½ ν• μˆ˜μžˆλ‹€.μœ μ—°μ„± 증가행동을 λ³€κ²½ν•˜κ±°λ‚˜ μΆ”κ°€ν• λ•Œ κΈ°μ‘΄μ½”λ“œλ₯Ό μˆ˜μ •ν•  ν•„μš” 없이 μƒˆλ‘œμš΄ 클래슀(μ „λž΅)을 μΆ”κ°€ ν•˜λ©΄λœλ‹€.κ΅¬μ„±μš”μ†ŒContextμ „λž΅μ„ μ‚¬μš©ν•˜λŠ” μ£Όμ²΄μ•Œκ³ λ¦¬μ¦˜(μ „λž΅)을 μ‹€ν–‰ν•˜κΈ°μœ„ν•΄ Strategy객체λ₯Ό μ°Έμ‘°Strategyλ™μž‘(μ•Œκ³ λ¦¬μ¦˜)의 μΈν„°νŽ˜μ΄μŠ€ λ˜λŠ” 좔상 ν΄λž˜μŠ€λ™μž‘μ˜ 곡톡..

λ””μžμΈνŒ¨ν„΄ - νŒ©ν† λ¦¬ νŒ¨ν„΄

νŒ©ν† λ¦¬ νŒ¨ν„΄(Factory Pattern)객체 생성 λ‘œμ§μ„ μΊ‘μŠν™” ν•˜μ—¬ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜λŠ” μ±…μž„μ„ νŒ©ν† λ¦¬λΌλŠ” λ³„λ„μ˜ 클래슀 λ˜λŠ” λ§€μ„œλ“œλ‘œ λΆ„λ¦¬ν•˜λŠ” λ””μžμΈ νŒ¨ν„΄κ°μ²΄λ₯Ό μ‚¬μš©ν•˜λŠ”μ½”λ“œ(client)μ—μ„œ 객체 생성뢀뢄을 λ–Όμ–΄λ‚΄ μΆ”μƒν™”ν•œ νŒ¨ν„΄μ΄μž 상속관계에 μžˆλŠ” 두 클래슀(product)μ—μ„œ μƒμœ„ 클래슀(factory)κ°€ μ€‘μš”ν•œ λΌˆλŒ€λ₯Ό κ²°μ •ν•˜κ³  ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ 객체 생성에 κ΄€ν•œ ꡬ체적인 λ‚΄μš©μ„ κ²°μ •ν•˜λŠ” νŒ¨ν„΄μƒμœ„ ν΄λž˜μŠ€μ™€ ν•˜μœ„ ν΄λž˜μŠ€κ°€ 뢄리 λ˜κΈ°λ•Œλ¬Έμ— λŠμŠ¨ν•œ 결합을 κ°€μ§€λ©° μƒμœ„ν΄λž˜μŠ€μ—μ„œλŠ” μΈμŠ€ν„΄μŠ€ 생성방식에 λŒ€ν•΄ μ•Œν•„μš”κ°€ μ—†μ–΄μ„œ λ§Žμ€ μœ μ—°μ„±μ„ κ°€μ§„λ‹€.즉, 객체λ₯Ό 직접 μƒμ„±ν•˜λŠ” λŒ€μ‹ , νŒ©ν† λ¦¬ ν΄λž˜μŠ€λ‚˜ λ§€μ„œλ“œλ₯Ό 톡해 객체λ₯Ό 생성 ν•˜μ—¬ 객체 생성 과정을 μœ μ—°ν•˜κ³  ν™•μž₯κ°€λŠ₯ν•˜κ²Œ λ§Œλ“ λ‹€.νŠΉμ§•κ°μ²΄ 생성 둜직의 μΊ‘μŠν™”κ°μ²΄..