All :L
[Java] ์์ (Inheritance) ๋ณธ๋ฌธ
๋ฐ์ํ
๐ ์์
1๏ธโฃ ์์ (Inheritance: OOP Is PIE)
- ๊ธฐ์กด(์์) ํด๋์ค์ ์์ฐ(๋ฉค๋ฒ)์ ์์(ํ์) ํด๋์ค์์ ์ฌ์ฌ์ฉํ๊ธฐ ์ํ ๊ฒ
- ์์ ํด๋์ค์ ์์ฑ์์ ์ด๊ธฐํ ๋ธ๋ก์ ์์ X
- ์์ ํด๋์ค์ ๋ฉค๋ฒ๋ฅผ ๋ฌผ๋ ค ๋ฐ๊ธฐ ๋๋ฌธ์ ์ฝ๋ ์ ๊ฐ
- ์์ ํด๋์ค ์ฝ๋ ๋ณ๊ฒฝ ์ ํ์ ํด๋์ค์๋ ์ ์ฉ → ์ ์ง ๋ณด์์ฑ ํฅ์
- ์์์ extends ํค์๋๋ฅผ ์ฌ์ฉํด ์ ์ฉ
2๏ธโฃ Object ํด๋์ค
- ๋ชจ๋ ํด๋์ค์ ์กฐ์ ํด๋์ค
- ๋ณ๋์ extends ์ ์ธ์ด ์๋ ํด๋์ค๋ extends Object ๊ฐ ์๋ต๋จ.
- ๋ชจ๋ ํด๋์ค์๋ Object ํด๋์ค์ ์ ์๋ ๋ฉ์๋ O
3๏ธโฃ ๋จ์ผ ์์ (Single Inheritance)
- Java๋ ๋จ์ผ ์์๋ง ์ง์
- interface์ ํฌํจ ๊ด๊ณ(has a)๋ก ๋จ์ ๊ทน๋ณต
- ๋ค์ค ์์ → ์ฌ๋ฌ ํด๋์ค ๊ธฐ๋ฅ ๋ฌผ๋ ค๋ฐ์ ์ O / but, ๊ด๊ณ ๋ณต์ก
4๏ธโฃ ํฌํจ ๊ด๊ณ
- ์์ ์ด์ธ์ ํด๋์ค๋ฅผ ์ฌํ์ฉ ํ๋ ๋ฐฉ๋ฒ
- 2๊ฐ ์ด์์ ํด๋์ค์์ ํน์ฑ์ ๊ฐ์ ธ์ฌ ๋ ํ๋๋ ์์, ๋๋จธ์ง๋ ๋ฉค๋ฒ ๋ณ์๋ก ์ฒ๋ฆฌ
- ํฌํจ ๊ด๊ณ UML ํํ → ์ค์ ํ์ดํ
- ์ ์ง ๋ณด์์ฑ ํ๋ณด
- ์์์ ํ ๊ฒ์ธ์ง ํฌํจ์ ํ ๊ฒ์ธ์ง ์ค์
- ์ด๋ค ํด๋์ค๋ฅผ ์์ ๋ฐ๊ณ ์ด๋ค ํด๋์ค๋ฅผ ํฌํจํด์ผ ํ๋์ง ์ค์ → ํ๋ก์ ํธ ๊ด์ ๋ฌธ์
- ์์: is a ๊ด๊ณ๊ฐ ์ฑ๋ฆฝํ๋์ง
- ํฌํจ: has a ๊ด๊ณ๊ฐ ์ฑ๋ฆฝํ๋์ง
๐ ๋ฉ์๋ ์ฌ์ ์
1๏ธโฃ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ(overriding)
- ์กฐ์ ํด๋์ค์ ์ ์๋ ๋ฉ์๋๋ฅผ ์์ ํด๋์ค์์ ์ ํฉํ๊ฒ ์์ ํ๋ ๊ฒ
- ์ค๋ฒ๋ก๋ฉ → ๊ณ์ ์ ์ฌํ๋ ๊ฒ / ์ค๋ฒ๋ผ์ด๋ฉ → ๊ณ์ ๋ฎ์ด์ฐ๋ ๊ฒ
- ์กฐ๊ฑด → ์กฐ์๋ถ์ ๋์ผ
- ๋ฉ์๋ ์ด๋ฆ ๋์ผ (์กฐ์์ด ๋ฌผ๋ ค์ค ๋ฉ์๋์)
- ๋งค๊ฐ ๋ณ์ ๊ฐ์, ํ์ , ์์ ๋์ผ
- ๋ฆฌํด ํ์ ๋์ผ
- ์ ๊ทผ ์ ํ์๋ ๋ถ๋ชจ ๋ณด๋ค ๋ฒ์๊ฐ ๋๊ฑฐ๋ ๋์ผ
- ์กฐ์๋ณด๋ค ๋ ํฐ ์์ธ๋ฅผ ๋์ง ์ X
2๏ธโฃ super ํค์๋
- ๋์ ์กฐ์
- this๋ก ๋ฉค๋ฒ์ ์ ๊ทผํ๋ฏ์ด super๋ฅผ ํตํด ์กฐ์ ํด๋์ค ๋ฉค๋ฒ ์ ๊ทผ
- super. ์ ์ด์ฉํด ์กฐ์์ ๋ฉ์๋ ํธ์ถ๋ก ์กฐ์์ ์ฝ๋ ์ฌ์ฌ์ฉ
- ๋ณ์์ scope
- ์ฌ์ฉ๋ ์์น์์ ์ ์ ํ์ฅํด๊ฐ๋ฉฐ ์ฒ์ ๋ง๋ ์ ์ธ๋ถ์ ์ฐ๊ฒฐ๋จ
- method ๋ด๋ถ → ํด๋น ํด๋์ค ๋ฉค๋ฒ ๋ณ์ → ์กฐ์ ํด๋์ค ๋ฉค๋ฒ ๋ณ์
- super()๋ ์กฐ์ ํด๋์ค์ ์์ฑ์ ํธ์ถ
- ์กฐ์ ํด๋์ค์ ์ ์ธ๋ ๋ฉค๋ฒ๋ค์ ์กฐ์ ํด๋์ค์ ์์ฑ์์์ ์ด๊ธฐํ๊ฐ ์ด๋ค์ง๋ฏ๋ก ์ด๋ฅผ ์ฌํ์ฉ
- ์์ ํด๋์ค์ ์ ์ธ๋ ๋ฉค๋ฒ๋ค๋ง ์์ ํด๋์ค ์์ฑ์์์ ์ด๊ธฐํ
- super()๋ ์์ ํด๋์ค ์์ฑ์์ ๋งจ ์ฒซ ์ค์์๋ง ํธ์ถ ๊ฐ๋ฅ
- ์์ฑ์์ ์ฒซ ์ค์๋ง this() ๋๋ super()๊ฐ ์ฌ ์ ์์.
- ๋ช
์์ ์ผ๋ก this() ๋๋ super()๋ฅผ ํธ์ถํ์ง ์๋ ๊ฒฝ์ฐ ์ปดํ์ผ๋ฌ๊ฐ super() ์ฝ์
- ๋งจ ์์ Object๊น์ง ๊ฐ์ฒด๊ฐ ๋ค ๋ง๋ค์ด์ง๋ ๊ตฌ์กฐ
class Person { String name; Person(String name) { this.name = name; } }
- ์์ฑ์ ํธ์ถ๊ณผ ๊ฐ์ฒด ์์ฑ์ ๋จ๊ณ
class Person { String name; Person(String name) { this.name = name; } } public class SpiderMan extends Person { Spider spider = new Spider(); boolean isSpider; SpiderMan(String name, Spider spider, boolean isSpider) { super(name); this.spider = spider; this.isSpider = isSpider; } SpiderMans(String name) { this(name, new Spider(), true); } public static void main(String[] args) { Spider sman = new SpiderMans("ํผํฐ ํ์ปค"); } }
3๏ธโฃ Annotation
- ์ฌ์ ์ ์๋ฏธ → ์ฃผ์ / ์ปดํ์ผ๋ฌ, JVM, ํ๋ ์์ํฌ ๋ฑ์ด ๋ณด๋ ์ฃผ์
- ์์ค์ฝ๋์ ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํ๋ ํํ
- ์์ค ์ฝ๋์ ๋ถ์ฌ ๋์ ๋ผ๋ฒจ
- ์ฝ๋์ ๋ํ ์ ๋ณด ์ถ๊ฐ → ์์ค ์ฝ๋์ ๊ตฌ์กฐ ๋ณ๊ฒฝ, ํ๊ฒฝ ์ค์ ์ ๋ณด ์ถ๊ฐ ๋ฑ์ ์์ ์งํ
- ๊ธฐ๋ณธ Annotation
- @Deprecated : ์ปดํ์ผ๋ฌ์๊ฒ ํด๋น ๋ฉ์๋๊ฐ deprecated ๋์๋ค๊ณ ์๋ ค์ค
- @Override : ์ปดํ์ผ๋ฌ์๊ฒ ํด๋น ๋ฉ์๋๋ overrideํ ๋ฉ์๋ ์์ ์๋ ค์ค (๋ฐ๋์ super class์ ์ ์ธ๋์ด ์๋ ๋ฉ์๋์ฌ์ผ ํจ)
- @SuppressWarnings : ์ปดํ์ผ๋ฌ์๊ฒ ์ฌ์ํ warning์ ๊ฒฝ์ฐ ์ ๊ฒฝ ์ฐ์ง ๋ง๋ผ๊ณ ์๋ ค์ค
๐ Package & import
1๏ธโฃ Package
- PC์ ๋ง์ ํ์ผ ๊ด๋ฆฌ → ํด๋ ์ด์ฉ
- ์ ์ฌํ ๋ชฉ์ ์ ํ์ผ ๊ธฐ์ค
- ์๋ฏธ์๋ ์ด๋ฆ์ผ๋ก ๊ณ์ธต์ ์ ๊ทผ
- ํ๋ก๊ทธ๋จ์ ๋ง์ ํด๋์ค → ํจํค์ง ์ด์ฉ
- ์๋ฏธ์๋ ์ด๋ฆ์ผ๋ก ๋ง๋ค๊ณ , . ์ ํตํด ๊ณ์ธต์ ์ ๊ทผ
- ๋ฌผ๋ฆฌ์ ์ผ๋ก ํจํค์ง๋ ํด๋์ค ํ์ผ์ ๋ด๊ณ ์๋ ๋๋ ํฐ๋ฆฌ
- package name + class name์ผ๋ก ํด๋์ค ๊ตฌ๋ถ → fully qualified name
- package ์ ์ธ
- package package_name;
- ์ฒซ ๋ฌธ์ฅ์ ํ๋์ ํจํค์ง๋ง ์ ์ธ
- ๋ชจ๋ ํด๋์ค๋ ๋ฐ๋์ ํ๋์ ํจํค์ง์ ์ํจ → ์๋ต ์ default package์ ์ํจ / but, ๊ฐ๊ธ์ ์ฌ์ฉ X
- ์ผ๋ฐ์ ์ธ package naming ํด
- ์์, ํ๋ก์ ํธ, ์ฉ๋
2๏ธโฃ import
- ๋ค๋ฅธ ํจํค์ง์ ์ ์ธ๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ํค์๋
- ํจํค์ง์ ํด๋์ค ์ ์ธ ์ฌ์ด์ ์์น
- ํจํค์ง์ ๋ฌ๋ฆฌ ์ฌ๋ฌ ๋ฒ ์ ์ธ ๊ฐ๋ฅ
- ์ ์ธ ๋ฐฉ๋ฒ
- import ํจํค์ง๋ช .ํด๋์ค๋ช ;
- import ํจํค์ง๋ช .*; → ํ์ ํจํค์ง๊น์ง import ํ์ง X
- importํ package์ ํด๋์ค ์ด๋ฆ์ด ๋์ผํ์ฌ ๋ช ํํ ๊ตฌ๋ถํด์ผ ํ ๋ → ํด๋์ค ์ด๋ฆ ์์ ํจํค์ง ๋ช ์ ๋ ฅ
- default import package
- java.lang.*;
3๏ธโฃ static import
- static member์ ๋ํ import
- ์์ฃผ ์ฌ์ฉ๋๋ static member๋ฅผ import ํ์ฌ static member ์ด๋ฆ๋ง์ผ๋ก ์ ๊ทผ
๐ ์ ํ์
1๏ธโฃ ์ ํ์
- ํด๋์ค, ๋ณ์, ๋ฉ์๋ ์ ์ธ๋ถ์ ํจ๊ป ์ฌ์ฉ๋์ด ๋ถ๊ฐ์ ์ธ ์๋ฏธ ๋ถ์ฌ
- ์ข
๋ฅ
- ์ ๊ทผ ์ ํ์
- public
- protected
- (default = package)
- private
- ๊ทธ ์ธ ์ ํ์
- static : ํด๋์ค ๋ ๋ฒจ ์์ ์ค์
- final : ์์๋ฅผ ๋ ์ด์ ์์ ํ ์ ์๊ฒ ํจ
- abstract : ์ถ์ ๋ฉ์๋ ๋ฐ ์ถ์ ํด๋์ค ์์ฑ
- synchoronized : ๋ฉํฐ์ค๋ ๋์์์ ๋๊ธฐํ ์ฒ๋ฆฌ
- ์ ๊ทผ ์ ํ์
- ํ๋์ ๋์์ ์ฌ๋ฌ ์ ํ์ ์กฐํฉ ๊ฐ๋ฅ / but, ์ ๊ทผ ์ ํ์๋ ํ๋๋ง ์ฌ์ฉ ๊ฐ๋ฅ
- ์์ ๋ฌด๊ด → but, ์ผ๋ฐ์ ์ผ๋ก ์ ๊ทผ ์ ํ์๋ฅผ ๋งจ ์์ ๋
2๏ธโฃ final
- ๋ง์ง๋ง, ๋ ์ด์ ๋ฐ๋ ์ ์์
- final class
- ๋ ์ด์ ํ์ฅํ ์ X
- ์์ ๊ธ์ง → ์ค๋ฒ๋ผ์ด๋ ๋ฐฉ์ง
- final method
- ๋ ์ด์ ์ฌ์ ์ ํ ์ X
- overriding ๊ธ์ง
- final variable
- ๋ ์ด์ ๊ฐ ๋ณ๊ฒฝํ ์ X
- Blank final
- ๊ฐ์ด ํ ๋น๋์ง ์์ ๋ฉค๋ฒ ๋ณ์
- final ๋ฉค๋ฒ ๋ณ์์ ์ด๊ธฐ ๊ฐ์ด ํ ๋น๋์ด๋ฒ๋ฆฌ๋ฉด ๋ชจ๋ ๊ฐ์ฒด๋ ๊ฐ์ ๊ฐ์ ์ฌ์ฉํด์ผ ํจ.
- ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ฉด ๊ฐ์ ๋ณ๊ฒฝํ ๊ธฐํ X → ๋ฐ๋์ ์์ฑ์์์ 1ํ ์ด๊ธฐํ ๊ฐ๋ฅ
- ์์ฑ์์์ ์ด๊ธฐํ๋ฅผ ๊ฐ์ ํ๋ ์ญํ
- static final
- ๋จ์ง final๋ง ์์ผ๋ฉด ๊ฐ์ฒด๋ง๋ค ๊ฐ๋ ๊ฐ์ผ๋ก ๊ณต์ฉ์ฑ์ด ์์
- ์ง์ ํ ์์๋ ๊ฐ์ฒด์ ๋ฌด๊ณ ๋ํ๊ฒ ๋ชจ๋๊ฐ ๊ณต์ฉํ๋ ๊ฐ
3๏ธโฃ ์ ๊ทผ ์ ํ์(Access modifier)
- ๋ฉค๋ฒ ๋ฑ์ ์ฌ์ฉ๋๋ฉฐ ํด๋น ์์๋ฅผ ์ธ๋ถ์์ ์ฌ์ฉํ ์ ์๋์ง ์ค์
- method override ์กฐ๊ฑด ํ์ธ
- ๋ถ๋ชจ์ ์ ํ์ ๋ฒ์์ ๊ฐ๊ฑฐ๋ ๋์ ๋ฒ์๋ก๋ง ์ฌ์ฉ ๊ฐ๋ฅ
- Private < Default < Protected < Public
- ์ ๊ทผ ์ ํ์ ์ข ๋ฅ & ์ฐจ์ด
4๏ธโฃ Sealed class
- ๋ด์ธ๋ ํด๋์ค๋ก ํน์ ํด๋์ค์๊ฒ๋ง ์์ ๊ฐ๋ฅ
- ์์ ๊ณ์ธต ๋ด์์ ์๊ฒฉํ ์ ์ด
- ํ๋ก๊ทธ๋จ ๊ตฌ์กฐ ๋ช ํํ๊ฒ ์ ์ง, ์๋์น ์์ ์์์ผ๋ก ์ธํ ๋ณต์ก์ฑ ๋ฐ ํผ๋ ๋ฐฉ์ง
- ๋ช ํํ ์ญํ ๊ณผ ์ง๋ฌด ๋ถ๋ฅ๊ฐ ์ค์ํ ๊ฐ๋ ์ ์ฃผ๋ก ์ฌ์ฉ
- ์์ฑ๋ฒ
- ํด๋์ค์ sealed ํค์๋ ์ฌ์ฉ → ์์์ ํ๋ฝํ๋ ํด๋์ค๋ฅผ permits ๋ค์ ๋์ด
- sealed๊ฐ ์ ์ธ๋ ํด๋์ค๋ permits ๋ฐ๋์ ํ์
- ๊ตฌํ ํด๋์ค์ ํ์ํ ํค์๋
- sealed : ๋ด์ธ๋ ํด๋์ค, ์ถ๊ฐ์ ์ผ๋ก permits๋ก ํ์ ํด๋์ค ๋์ด ํ์
- final : ๋ ์ด์ ์์ ๋ฐ์ ์ ์๋ ํด๋์ค
- non-sealed : ๋ด์ธ์ด ํด์ ๋ ํด๋์ค → ์์ ๋กญ๊ฒ ์์ ๊ฐ๋ฅ
- ํด๋์ค์ sealed ํค์๋ ์ฌ์ฉ → ์์์ ํ๋ฝํ๋ ํด๋์ค๋ฅผ permits ๋ค์ ๋์ด
๋ฐ์ํ
'STUDY > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ์ ๋ค๋ฆญ (Generic) (2) | 2024.10.28 |
---|---|
[Java] ์ธํฐํ์ด์ค (Interface) (0) | 2024.10.26 |
[Java] ๋คํ์ฑ (Polymorphism) (0) | 2024.10.24 |
[Java] ์ถ์ํ (Abstraction) (0) | 2024.10.18 |
[Java] ์๋ฐ ๊ธฐ๋ณธ (0) | 2024.10.16 |
Comments