오전수업
GRASP 패턴
High cohesion(응집력) : 서로 관련된 기능을 묶는 것. 관련없는 기능은 분리. 클래스가 더 전문적인 역할을 하게 됨.
=> 이점: 유지보수가 쉬워진다. 역할을 잘게 쪼갤수록 재사용하기가 쉬워진다. 교체도 쉽다.
우리가 지금 짠건 CLI 화면에서 사용하는건데 결국엔 웹브라우저에서 해야함 이때 재 사용 가능함.
유지보수가 쉽게하기위해 쪼개기때문에 묶는것이 관리하기 편하면 묶기도 함. 쪼개는 게 무조건 정답이 아님.
19. 다형성을 이용하여 MemberList를 범용으로 만들기
FRAME WORK : 틀
멤버핸들러, 멤버리스트 소스가 있으면 , 나도 똑같이 포토핸들러, 포토리스트 만들면 됨.
유지보수의 일관성, 통일성을 위해 속도가 떨어지더라도 프레임워크를 따라감.
일반적인 웹어플리케이션 범용 프레임워크 존재함: 스프링프레임워크 ,, !!
[BEFORE]
BoardHandler- BoardList
MemberHandler- MemberList
이렇게 쓰다가
일상적인 용도로 쓸 수 있는 범용리스트를 만들어서
[AFTER]
BoardHandler& MemberHandler- ArrayList 를 사용하게 함.
ArrayList 사용 기술
배열, 다형성(다형적 변수), 형변환 기술, 배열을 다루는 API
다형성(polymorphism)
다형적 변수 (polymorpphic variable) 모양이 여러개인 변수
동물(동물, 포유류, 유인원,사람)
상속
기본 문법과 의미
의미: 기존 코드를 수정하지 않고 기능추가
1. 새 기능 추가에 따른 오류 가능성을 줄인다. -> 기존 코드에 새 코드를 추가하다 보면 실수로 기존 코드를 잘 못 변경하여
되던 기능을 안 되게 만들 수 있다.
2. 기존 코드 재사용 -> 기존의 기능을 다시 작성하지 않고 그대로 재사용 할 수 있다면 개발 시간 & 개발비 (비용) 절감
C2.minus(100,200) ;
C2 / 1. 메서드를 호출하려면 유효한 인스턴스 주소를 갖고 있어야함. (유효하지않으면 null point exception)
minus / 2. 레퍼런스의 클래스에 정의된 멤버(필드, 메서드)여야한다.
상속
+ Calculator2에 권한을 부여
class Calculator extends Calculator{ }
extends: Calculator2가 다른 클래스를 자신의 멤버처럼 사용할 수 있는 권한을 부여
수퍼클래스것을 내가 쓰겠다는 것임 코드 공유일뿐 ~
저 클래스를 사용할 권한을 갖는 것일뿐 그 클래스의 코드를 전부 가져오겠다는 뜻이 아님. 그래서 super class의 파일을 지우면 안됨.
int a
int : 데이터 타입 (type) 프리머티브타입/ 클래스타입 2개임
a : 변수 (variable)
java.lang.Object 클래스
=> Root class :
모든 자바 클래스의 최상위 클래스 ,
클래스를 정의할 때 super클래스를 지정하지 않으면 컴파일러가 object를 수퍼클래스로 자동 지정한다.
class A {... }
class A extends object {...}
=> 자바의 모든 클래스는 object 의 자손이다!
Object 의 메서드들
equals()
hashCode()
toString()
...
private 메서드, 클래스는 sub클래스가 못 가져감.
아무것도 안 붙인 패키지 메서드(같은 패키지들끼리만 공유하는)는 sub클래스가 못 가져감.
자바의 최상위 클래스는 object 임
어떤 자바의 클래스든 object의 자손이기에 .
4교시
오버라이딩(overriding) : 수퍼클래스의 메서드를 서브클래스에서 자신의 역할과 목적에 맞게 재 정의한다.
equals() 인스턴스가 같은지 비교
toString(): 클래스이름과 해시값을 리턴
Member m1 = new Member();
Member m2 = new Member();
m1 == m2 => false
m1.equals(m2) => false
.equals()
super클래스의 메서드를 재 정의
값이 같은지 비교
super클래스의 메서드를 재 정의하는 이유 :
//Objecj의 equals()는 Member 인스턴스를 비교하는데 적합하지 않다.
// 왜? Object의 equals()는 단순히 인스턴스 주소가 같은지 비교하기 때문이다.
//우리가 원하는 것은 인스턴스 주소가 다르더라도
//그 인스턴스안에 저장된 변수들의 값이 같다면
// 두 인스턴스는 같은 것으로 처리하는 것이다.
// 그렇게 하기 위해 수퍼클래스의 equals()를 재정의한다.
//=> 이것이 오버라이딩 (overriding)이라 부른다.
재정의 후(오버라이딩 후) 결과 값! false => true
오후 수업
(위 코드 이어서)
Object obj1 = m1;
Object obj2 = m2;
System.out.println(obj1.equals(obj2));
/다형적 변수의 규칙
컴파일이 통과되면, JVM이 메서드를 호출할 때
다형적 변수가 실제 가리키는 인스턴스의 클래스부터 찾아 올라간다.
//컴파일러 : obj1은 object 타입이고 object 안에 equals 있으니까 컴파일 ok
//jvm이 현 obj는 타입은 object지만 실제는 member의 객체 주소를 갖고 잇기때문에 member 클래스에서 equals를 찾는다 . member에 equasl있으면 거기서 정의 eqauls 쓰고 없으면 object로 올라감
=> 컴파일러와 jvm은 따로 놈
오버라이딩: 상속받은 메서드를 서브클래스에서 역할에 맞게 재정의하는거
오버로딩: (파라미터 갯수 등 타입이 다르더라도) 같은 기능을 수행하는 메서드에 대해 같은 이름을 부여함으로써 일관성있게 프로그래밍가능하게 하는 문법
오버로딩 :
'[네이버클라우드] 클라우드 기반의 개발자 과정 7기 > 웹프로그래밍' 카테고리의 다른 글
[NC7기-39일차(6월20일)] - 웹프로그래밍 20일차 (0) | 2023.06.20 |
---|---|
[NC7기-38일차(6월19일)] - 웹프로그래밍 19일차 (0) | 2023.06.19 |
[NC7기-36일차(6월15일)] - 웹프로그래밍 17일차 (0) | 2023.06.15 |
[NC7기-35일차(6월14일)] - 웹프로그래밍 16일차 (0) | 2023.06.14 |
[NC7기-34일차(6월13일)] - 웹프로그래밍 15일차 (0) | 2023.06.13 |