。゚(*´□`)゚。

코딩의 즐거움과 도전, 그리고 일상의 소소한 순간들이 어우러진 블로그

[네이버클라우드] 클라우드 기반의 개발자 과정 7기/웹프로그래밍

[NC7기-37일차(6월16일)] - 웹프로그래밍 18일차

quarrrter 2023. 6. 16. 16:13

오전수업

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의 파일을 지우면 안됨.

1입장에서 2의 이름, 2입장에서 1의 이

 

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()

...

쓸 수 있는 메서드들 점 찍으면 나옴
java.lang.object 클래스 사용법

private 메서드, 클래스는 sub클래스가 못 가져감. 

아무것도 안 붙인 패키지 메서드(같은 패키지들끼리만 공유하는)는 sub클래스가 못 가져감. 

컴파일러의 관점에서만 판단하여 컴파일함. 2의 주소가 1에 들어갔는지 어쨌는지는 jvm이 따지는거임.
아래 두번째줄로 해결가능

 

자바의 최상위 클래스는 object 임 

어떤 자바의 클래스든  object의 자손이기에 . 

4교시

인스턴스 주소 다른 것 확인

오버라이딩(overriding) : 수퍼클래스의 메서드를 서브클래스에서 자신의 역할과 목적에 맞게 재 정의한다. 

 

equals() 인스턴스가 같은지 비교

toString(): 클래스이름과 해시값을 리턴 

 

Member m1 = new Member(); 

Member m2 = new Member(); 

m1 == m2 => false

m1.equals(m2) => false 

 

object equals는 인스턴스 주소를 비교하는 것임. 속에 값을 비교하는 것이 아님

.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은 따로 놈 

 

오버라이딩: 상속받은 메서드를 서브클래스에서 역할에 맞게 재정의하는거 

오버로딩: (파라미터 갯수 등 타입이 다르더라도) 같은 기능을 수행하는 메서드에 대해 같은 이름을 부여함으로써 일관성있게 프로그래밍가능하게 하는 문법 

 

오버로딩 : 

패런츠 클래 파일에 파라미터 두 개짜리 plus 있엇음