Java - accidentlywoo/sec GitHub Wiki
Java ์ ๋ฆฌ
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ์!
- ๋ชฉ์ : ํด๋์ค ์ฌ์ฌ์ฉ์ฑ์ ๋์ด์.
๊ฐ์ฒด์งํฅ์ธ์ด์ ์กฐ๊ฑด
-
์์ ๋จ์ผ ์์
extends : class ํ์ํด๋์ค extends ์์ํด๋์ค{}
์์์ "Is A"||"Kind Of" ๊ด๊ณ์ผ๋ ์ฌ์ฉํ๋ค. ๋ ผ๋ฆฌ์ ์ธ ์ค๊ณ๋ฅผ ํ์!
"Has A"๊ด๊ณ๋ก ํํํ ์ ์์ด์ผ ํ๋ค.
-
์บก์ํ - ์ ๊ทผ์ ์ด
-
๋คํ์ฑ
์ ๊ทผ์ ์ด
- public : ๋๊ตฌ๋
- protected : ๋์ผ ํจํค์ง์์ ์ ๊ทผ๊ฐ๋ฅ, ๋ค๋ฅธ ํจํค์ง์ ํ์ํด๋์ค์์ ์ ๊ทผ๊ฐ๋ฅ
- deault(package) : ๋์ผ ํจํค์ง์์ ์ ๊ทผ๊ฐ๋ฅ
- private : ์๊ธฐ์๊ธด๋ง ์ ๊ฐ๋ฅ
์บก์ํ
์๋๋ ์ ๋ณด์ ์ ๊ทผํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์ค์ (set) / ์ป๊ธฐ(get)
์ปดํฌ๋ํธ[JavaBean]
์๋ฐ๋น์ด ๋๊ธฐ์ํ ์กฐ๊ฑด 4๊ฐ์ง.
-
public class
-
public ๋งค๊ฐ๋ณ์์๋ ์์ฑ์
-
ํ๋กํผํฐ์ฉ ์ธ์คํด์ค๋ณ์๋ public ์ด๋ฉด ์๋จ
-
ํ๋กํผํฐ์ฉ public setter ๋ฉ์๋ / public getter ๋ฉ์๋
public class Star{
private String color;
private String size;
public void setColor(String color) {
// ์ค์ ์ ์ด๋ฌธ ์์ฑ
this.color = color;
}
public String getColor(){return color;}
}
์ ์ ๋ฉค๋ฒ์ static
ํด๋์ค ๋ก๋ฉ์ ์ด๊ธฐํ๋๋ค. this ํค์๋ ์ฌ์ฉ๋ถ๊ฐ. ํด๋์ค ์ด๋ฆ์ผ๋ก ์ ๊ทผํ๋๊ฒ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ์ข๋ค.
class Single{
static int sv;
private Single() {}
static void plus(int i) {
sv = sv+i;
}
static Single getInstance() {
return new Single();
}
}
class Main{
public static void main(String[] args) {
System.out.println(Single.sv);
Single s1 = Single.getInstance();
System.out.println(s1.sv);
}
}
static ํ๋๋ฅผ ์ธ์คํด์คํํด์ ์ธ์คํด์ค ๊ฐ์ฒด๋ก ์ ๊ทผํ๋ฉด ์คํ์์ ํ์์ญ์ ๋ค์ง๊ณ ์์ผ๋ฉด ClassArea๋ฅผ ๋ค์ง๊ธฐ ๋๋ฌธ์ ํจ์จ์ด ๋จ์ด์ง๋ค.
System.out.println(s1.sv); //ํจ์จ ์ ์ํด, IDE์์ warning์ ํ์ํ๋ค.
System.out.println(Single.sv); // ์ด๋ ๊ฒ ์ฌ์ฉํ์.
lass Single{
int iv;
static int sv;
private Single() {}
static void test() {
// System.out.println(this);
// System.out.println(iv);
// System.out.println(this.iv);
// System.out.println(plus);
// System.out.println(this.plus);
}
static void plus(int i) {
sv = sv+i;
}
static Single getInstance() {
return new Single();
}
}
static method๋ ์ธ์คํด์คํํ ๊ฐ์ฒด์ method์์ญ์์ ๋ฉ์๋ ์๊ทธ๋์ฒ๊ฐ ์๋ค. class Area์์ ๋ค์ ๊ฑฐ๋ฆผ
static method๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ์ฅ์ ์ ๋ฝ์ ์ ์๋ ๋ฉ์๋
- ์ ํธ ํด๋์ค
- ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋
- ๋น๋ ํจํด
- ์ฑ๊ธํค
์์
ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ทธ๋ฆด๋, ์์๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ์์ ๋ถ๋ชจ๊ฐ์ฒด์ ์์ญ์ด ๋จผ์ ์๊ธด๋ค. (์ฑ ์ด ์๋ชป๋จ. ๋ฐ๋ก ์๊ฒจ์ ์์๋ฐ๊ฑฐ๋ ๊ทธ๋ ์ง ์๋ค.)
Is A ๊ด๊ณ
class Person{
String name;
String addr;
}
class Customer extends Person{
String id;
String pwd;
}
Customer์ Person์ด๋ค.
class Person{
String name;
String addr;
}
class Account extends Person{
String id;
String pwd;
}
Account๋ Person์ด ์๋๋ค.
Has A ๊ด๊ณ
class Person{
String name;
String addr;
}
class Account{
String id;
String pwd;
Person PersonInfo;
}
Account๋ Person์ ๋ณด๋ฅผ ๊ฐ๋๋ค.
์์์ ๋ฉค๋ฒํ๋๋ช ์ค๋ณต
class GrandParent{
int i;
}
class Parent extends GrandParent{
String i;
void pm(){
super.i = 10;
}
}
class Child extends Parent{
boolean i;
void m(){
this.i = true;
super.i = "hello";
pm();
}
}
new Child().i = false;
super ํค์๋๋ ํ์ฌ ๊ฐ์ฒด์์ ๋ถ๋ชจ๊ฐ์ฒด์ ์ ๊ทผ.
super() ๋ถ๋ชจ ์์ฑ์ ํธ์ถํ๋ผ!
๋คํ์ฑ์ ๊ฐ๋ ์ ์ฒดํฌํ์.
- auto up casting
- ๊ฐ์ down casting
์ค๋ฒ๋ผ์ด๋ ๊ท์น
- ์์๊ด๊ณ ๋ฉ์๋
- ๋ฉ์๋๋ช ๋์ผ, ๋งค๊ฐ๋ณ์(์๋ฃํ, ๊ฐ์, ์์) ๋์ผ, ๋ฐํํ๋ ๋์ผ
- ์์ ๋ฉ์๋ ์ ๊ทผ๋ฒ์ <= ํ์๋ฉ์๋ ์ ๊ทผ๋ฒ์
class P{ // ์ปดํ์ผ๋ฌ์์ class P extends Object{ ๋ก ๋ณํ
void m(){}
void m1(){}
}
class C extends P{
public void m(){}
private void m1(){} // ์ปดํ์ผ ์ค๋ฅ
}
- ์์ธ์ ์ธ
Object ์ต์์ ๊ฐ์ฒด
Object
- +hashCode():int
- +toString():String
- +equals(Object):boolean
String
- +hashCode():int
- +toString():String
- +equals(Object):boolean
StringBuffer
- +toString():String
Final Class ์ Abstract Class
ํด๋์ค์ ์ญํ
- ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ํ(final class)
- ํ์ ํด๋์ค๋ค์ ๊ณตํต์ ์ ๋ชจ์๋ (abstract class)
์ผ๋ฐ์ ์ธ ํด๋์ค๋ค์ ์ด๋์ ํน์ง์ ๋ชจ๋ ๊ฐ๋๋ค.
Final Method ์ Abstract Method
- final ๋ฉ์๋ : ์ฌ์ ์(overriding ๋ชปํจ) ๊ธ์ง
- abstract ๋ฉ์๋ : ๋ฐ๋์ ์ฌ์ ์ ํ์, ์ถ์ ๋ฉ์๋๋ฅผ ๊ฐ๊ณ ์๋ ํด๋์ค๋ ๋ฐ๋์ ์ถ์ ํด๋์ค์ฌ์ผ ํ๋ค.
Abstract Class
new ํค์๋๋ฅผ ์ฌ์ฉํด์ ์ธ์คํด์คํ ํ ์ ์๋ค.
์์ฑ์๊ฐ ์๋๋ฐ protected ์ ๊ทผ ์ ์ด์๊ฐ ๋ถ์ด์๋ค.
-> ํ์ ํด๋์ค์์ ํ์ฅํ์๋, ์์ฑ์๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ๋ง๋ค์ด์ ธ์๋ค.
ex) Abstract Class ์ธ Calendar ํด๋์ค๋ Calendar(), Calendar(TimeZone zone, Locale aLocale) ์์ฑ์๊ฐ ์๋๋ค.
Calendar ํด๋์ค์ ํ์ ํด๋์ค์ธ GregorianCalendar๋ Calendar.getInstance()๋ก ์ธ์คํด์คํํ ์ ์๋ค.
GregorianCalendarํด๋์ค๋ ํ์ฅํ Calendar ์ถ์ ํด๋์ค์ ์์ฑ์๋ฅผ ์ฌ์ฉํด(super()) ์์ฑ์ ํ์ฉํ๋ค!
Interface
interface A{
int A_CNT = 1;
void a();
}
interface B{
void b();
}
interface ABC extends A, B{
void abc(); // public abstract void abc();
}
class ABCImp implements ABC{
//void abc(){} ์ ๊ทผ์ ์ด์ ์ปดํ์ผ ์๋ฌ
public void abc(){}
public void a(){}
public void b(){}
}
abstract class ABCImp2 implements ABC{} // ์ปดํ์ผ ์๋ฌ ๋์ง ์๋๋ค.
class ABCImp3 extends Parents implements ABC{
public void abc(){}
public void a(){}
public void b(){}
}
Exception
- ํจ์จ์ฑ์ ์๊ฐํ๊ณ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ข๋ค.
ex) for๋ฌธ์์ Exception ์ฒดํฌ๋ฅผ ํด์ผํ ๋๋
// Bad Code
for(int i = 0 ; i < 10000; i++){
try{
exceptionCheckPlease(i);
}catch{}
}
// good code
try{
for(int i = 0; i < 10000; i ++){
exceptionCheckPlease(i);
}
}catch{}
๋งค๋ฒ ์ฒดํฌํ๋ ๊ฒ๋ณด๋ค. for๋ฌธ์ด ๊นจ์ง๋ catchํ๋ ๊ฒ์ด ์ข๋ค. (์ค๊ณ์ ๋ฐ๋ผ ๋ค๋ฆ)
Exception ์์ setMessage() ๋์๋ค. ๋ฉ์ธ์ง๋ฅผ ์ค์ ํ๊ณ ์ถ๋ค๋ฉด?
๊ฐ์ ๋ก Exception์ ๋ฐ์์ํค๊ณ , ์์ฑ์์ ๋ฉ์์ง๋ฅผ ๋ด๊ณ , ํด๋์ค ์์ฑํ๋ค.
throw new IOException("์์ธ ๋ฐ์");
throws๋ฅผ JVM์ผ๋ก?
throws๋ฅผ ๋ค์ง๊ฒ ์จ์ main๋ฉ์๋๊น์ง ๋๊ธฐ๋ฉด JVM๊น์ง ๋๊ธธ ์ ์๋ค.
๋ฉํฐ Exception
๋ํ ์ผํ Exception catch๊ตฌ๋ฌธ์ ์์ฑํ๊ณ ์ถ๋ค๋ฉด, ํ์ํด๋์ค๋ถํฐ catch ๊ตฌ๋ฌธ์ ์์ฑํด์ผ flow์ ๋ง๋ค.
์ฌ์ฉ์ ์ ์ Exception
์๋น์ค๋จ์ Exception๋๋ฌธ์ ์ฝ๋๊ฐ ์ง์ ๋ถํด์ง ์ ์๊ธฐ๋๋ฌธ์ ์ฌ์ฉ์ ์ ์ Exception์ ์์ฑํ ์ ์๋ค.
์ฃผ๋ก ๊ธฐ๋ฅ๋ณ, ๋ฉ์๋๋ณ๋ก ๋ง๋ค ์ ์๋ค.