일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- HTML Templating
- 부정 선택자
- 보충필요
- JavaScript
- 소스트리
- 김성박
- vmax
- 상속
- spring
- jsp
- 가상요소 선택자
- vmin
- 깃헙
- 부스트코스
- 가상클래스 선택자
- 즐거운자바
- 자바
- 웹개발
- 속성 선택자
- nth-of-type()
- nth-child()
- datalist
- 다시볼 것
- optgroup
- 복합 선택자
- 즐거운 자바
- 다시보자
- EDWITH
- 서블릿
- ES6
Archives
- Today
- Total
기억의 DataBase
객체지향 본문
-
객체지향
객체지향에서 가장 중요한 것은?
"이름" >> 직관을 받을 수 있는 이름 >> 이름만 보고서 안의 메소드를 예상할 수 있어야 함
-
객체지향의 2가지 중점
1.추상화 : 중요한 것은 남기고 불필요한 것은 삭제
2.응집도 : 관련된 것을 잘 모음
객체지향에서 재사용은 중요(라이브러리) - 업무에서 사용되는 객체는 재사용이 어렵다
좋은 객체는 이름만 봐도 뭔지 예상할 수 있어야 하고, 필요한 것을 잘 모으고(응집도),
필요없는 것은 삭제해야 하며(추상화), 독립적으로 기능할 수 있어야 한다(낮은 결합도)
(객체는 역할과 책임이 있다)
-
오버로딩(Overloading)
ex) 밥버거/보쌈/장조림을 먹었습니다(음식(parameter)은 변하지만,
동사(method)는 변하지 않는다)
C언어의 경우 파라미터의 수나 TYPE이 다르면 이름이 다른 함수를 만들어야 함
ex) plusInt(int, int) / plusFloat(float, float)
BUT JAVA의 경우 재활용이 가능
ex) plus(int, int) / plus(float, float)가 가능하다
parameter의 수와 type이 달라도 같은 이름으로 재사용이 가능!
어려운 문법을 사용하면 개발자는 힘들지만, 사용자는 편함
-
상속(문법이 아니라 개념이해가 더 중요 - is a / kind of 관계가 성립)
-
추상클래스 - 단어는 있지만,인스턴스가 될 수 없는 Class(자동차) - 일반화(공통점)
ex) 자동차 c = new 자동차(); >> X
ex) 자동차 c1 = new 버스(); >> O
>> 버스()는 자동차다
-
★조상타입의 참조변수로 후손 인스턴스를 참조할 수 있다★(오버라이딩이 되어 있지 않다면, 조상타입 메소드만 사용 가능)
ex) 자동차 c1 = new 버스(); >> O >> 달리다();만 쓸 수 있다
ex) 자동차 c2 = new 이층버스(); >> O >> 달리다();만 쓸 수 있다
왜 이렇게 생성하는가 >> 상황에 따라서 기능을 제한하기 위해서
ex) 포크레인 주차를 맡긴 상황 (달리다(); 기능만 사용할 수 있게 제한)
※ 아무것도 상속받지 않으면 Object class를 상속받는다
>> 모든 클래스의 부모(최상위 클래스)
-
오버라이딩(Overriding)
★기존의 메소드가 오버라이딩(중복되어 구현)되면, 무조건 자식의 메소드가 사용된다★
ex) 자동차 c = new 스포츠카();
달리다(); > 전륜구동 / 달리다(); > 후륜구동 >> 후륜구동이 실행됨
-
인터페이스(Interface) - 껍데기 / 인스턴스가 될 수 없음
기능을 미리 선언하는 방법(요구사항 정의)
어떤 기능을 구현하겠다는 선언(일종의 to DoList)
실제 기능은 클래스를 통해서 구현(상속의 관계가 아님)
분석을 하면 나오는 것(설계 > 클래스)
ex) 자동차는 운전석를 구현한다(O) <> 자동차는 운전석이다 / 자동차는 운전석의 종류다(X)
ex) Collection을 만들자
> Collection을 분석해보니 A기능, B기능이 필요(선언 - 인터페이스)
자바는 다중상속을 지원하지 않아서 인터페이스로 그 부분을 해결?(자바는 단일상속)
>> NO! 하나의 인터페이스로 한 클래스만 구현해도 필요하다!!
※ 어떤 언어를 공부하든, 그 언어의 철학에 맞게 공부해야
실제 코드 작성시 그 언어에 맞게 구현할 수 있음!
실제 코드 작성시 그 언어에 맞게 구현할 수 있음!
※ 인터페이스 type으로, 해당 인터페이스를 구현하고 있는 클래스의 인스턴스를 참조할 수 있음
ex) Collection<String> col = new HashSet<>();
public static void main(String[] args) {
// 인터페이스 // 클래스
Collection<String> col = new HashSet<>();
col.add("kim");
col.add("lee");
col.add("park");
col.add("choi");
// 인터페이스
Iterator<String> iter = col.iterator();
while(iter.hasNext()) {
String str = iter.next();
System.out.println(str);
}
}
public static void main(String[] args) {
//인터페이스(Dice)는 주사위를 굴린다는 기능만 있음
Dice dice6 = new Dice6();
// 실제 클래스(Dice6/Dice9)에서는 굴렸을 때 값을 6까지 할지 9까지 할지를 구현
// 실제 클래스(Dice6/Dice9)에서는 굴렸을 때 값을 6까지 할지 9까지 할지를 구현
int value = dice6.get();
System.out.println(value);
Dice dice9 = new Dice9();
value = dice9.get();
System.out.println(value);
}
※ 인터페이스는 기능만 선언한 상태이고 세부적인 동작이나 범위는 클래스에서 지정
※ 인터페이스와 상속의 차이
'Java' 카테고리의 다른 글
생성자 (0) | 2019.01.17 |
---|---|
예외처리(Exception) (0) | 2019.01.17 |
package(디렉토리)와 중요 package (0) | 2019.01.14 |
OOP(Object Oriented Programming) - 객체지향과 Memory (0) | 2019.01.14 |
JAVA Start (0) | 2019.01.11 |
Comments