본문 바로가기
JAVA

자바 기본 개념

by sjs_2215 2018. 12. 17.

1. 객체지향


기능(함수,메소드) + 정보(데이터) = 클래스.    여기서 정보는 속성. 여기서 기능은 메소드 =>클래스는 메소드와 속성으로 구성되어 있다. 

함수와 데이터를 한 단위로 묶어서 관리를 하게 됨. 

관리도 쉬워지고 개발도 쉬워짐. 

=>이런 객체지향이 새로운 패러다임이었음. 


ex)동물병원

클래스 '개'

속성: 개 이름을 지어줌 name. 생년월일 age. ->개를 관리할 때 필요한 데이터를 정의 

메소드: make Sound() {"멍멍"} -> 누구든지 개한테 시킬 수 있는 것들 


개 클래스는 실제로 존재하는게 아니라 진짜 개들의 틀을 제공해주는 것 뿐임.

 개 클래스에서 만들어지는 실제 개들: 뽀뽀, 싱가, 순심이들은 객체(인스턴스)


클래스 '고양이'

속성: name, age

메소드: make Sound() {"야옹"}



---

name

age

---

makeSound()  




고양이

---

name

age

---

makeSound()



이런 클래스를 가지고 프로그래밍을 하는게 객체지향

이렇게 해놓면 이 클래스들을 가지고 어떤 개던, 고양이던 만들 수 있음. 



만약 이 동물병원 100 종의 동물을 치료한다하면, 

클래스가 100개가 생길 것임


근데 클래스는 단독 클래스는 별로 없고, 웬만하면 서로 관계를 맺고 있음

=>클래스 계층 구조 


동물

포유류 조류

고양이

=>개와 고양이는 포유류가 가지고 있는 것을 다 가지고 있다. 

=>새는 조류가 가지고 있는 것을 다 가지고 있다. 

삼각형 기호는 -> 부모자식관계, 상속(inheritance)=부모가 가지고 있는 속성을 다 가지고 있는 것

=>자식들이 공통으로 가진 속성은 부모쪽에 정의해주면 됨. 



makeSound()->추상메소드. 소리 낸다는 것을 표현만 해놓고, 어떤 소리를 내는지 정하는 것은 하위 클래스가 정해주는 것. 

추상메소드를 가진 포유류는 객체를 만들 수 없음-> 추상 클래스

이런거 왜 만드냐? 분류를 위해 껍데기만 만들어 놈. 



항상 더 포괄적인 것이 부모 

화살표는 항상 부모에 붙음. 화살표 방향은 상관 없음. 


상속관계를 나타내는 키워드는 extends

ex) 열심히 하는 학생 extends 학생 



책가방은 학생을 표현하는 것. 이런 것은 마름모로 표현

이런 관계를 aggregation 관계(집합)


의사들과 동물들의 관계는 어떻게 표현할래?

상속과 aggregation관계가 아닌 association(일반관계)라고 말함. "치료한다"라고 써주면 됨



static(정적)  32분 30초

그림은 밑줄을 그어줌. 그림 참고 

객체가 아니라 클래스에 속함

static method

static attribute

ex)지금까지 생성된 개의 객체 갯수를 저장. 

->속성이름을 totalDogs -> static으로 

이 static은 개와 고양이 같은 객체에 만들어지지 않고(왜냐 totaldogs 객체마다 있을 필요없으니까), 클래스에 하나만 만든다. 


static method. 40분 10초

static method는 객체의 속성이나 메소드에는 접근(사용)할 수 없다. 


ex) 개 클래스의 인스턴스 만든 예

개 d1=new 개("싱가");

1. 개 클래스가 먼저 메모리에 로드된 후 

2. "싱가" 개 객체가 만들어 진다. 


43분 10초

=>클래스는 메모리에 로드되어 있는데, 아직 객체는 만들어지지 않는 경우가 발생. 


[항상 클래스가 먼저 만들어지고 객체가 만들어지기 때문에, 클래스에 속한 메소드는 아직 만들어지지 않은 객체에 접근할 수 없는 경우가 발생하니까, static 메소드는 객체에 속성/메소드에 접근할 수 없음. 코드상에서. 컴파일 에러남. ]


static 메소드는 클래스에 속해져있고, 클래스는 만들어져 있는데 객체가 만들어져있지 않는경우가 발생하기에 객체의 속성이나 메소드에 접근할 수 없도록 아예 막음. 그래서 이렇게 접근하면 컴파일 에러 남.


반대로 객체 메소드는 static 속성이나 메소드에 접근할 수 있다. 왜냐 

"항상 클래스가 먼저 만들어지고 객체가 만들어지기 때문에" 객체 메소드는 아무상관없이 이미 클래스 만들어질 떄 만들어진 static 속성이나 메소드에 접근할 수 있다. 



접근할 수 있다 없다 표


static 메소드, static 속성 객체 메소드, 객체 속성

static메소드 접근 가능O 접근 불가X

객체 메소드 접근 가능O 접근 가능O  



객체 생성

개(클래스는 사각형에 이름) 개 클래스

:개(객체는 사각형 안에 개 앞에 콜론) 개 d1;  

d1:개(변수이름까지표현하고싶으면 사각형 안에 이렇게) d1=new 개("순심이");

d1.makeSound();



Comments