15일차(6/27화)
🙋JS
&&(and) , ||(or), ===
- && : and 즉 그리고의 의미로 좌항과 우항이 모두 true여야 true를 반환, 두 항 중 하나라도 false면 false값을 반환
- || : also 즉 또는의 의미로 좌항과 우항 중 하나라도 true이면 true를 반환, 두 항 모두 false일때 false를 출력
- = : 작거나 같다 그리고 크거나 같다는 꺽쇠가 먼저오고 =이 와야함
- 좌우가 같다는 연산은 ===또는 ==이다.
- == : 피연산자가 같으면 true
- != : 피연산자가 같지 않으면 true
- === : 피연산자도 같고 자료형도 같으면 true
- !== : 피연산자가 같지않거나 자료형이 같지 않으면 true
문자열의 비교
“javascript” > “Javascript” true
⇒아스키값을 비교함.
조건문
- if
- true일 때 실행된다.
- 예시
- else
ex)
- 몇 살이냐고 묻는 팝업을 띄워서
- if 숫자를 입력하면, else구문 출력
- if 문자를 입력하면, if 구문 출
ex) “1”을 적는다면, 첫번째 구문에서 age= string 1 ⇒ number1로 바뀌어서
isNaN에서 false값을 갖는다. 따라서 else 구문이 출력된다.
“문자”를 적는다면, 첫번째 구문에서 age=NaN가 정의된다.
즉 isNaN에서 true이기때문에, if 구문이 출력된다.
- else if
- 몇 살이냐고 묻는 팝업을 띄워서
- if 문자를 입력하면 if문 출력
- 정확히 100살을 입력했을때 else if출력
- 0과 같거나 작을 때 else if출력
- 18보다 크거나 같을 때 else if출력
- 18보다 작을 떄 else if출력.
Java
추상메서드를 가지면 추상클래스로 표시해줘야함.
추상메서드 {} 몸통이 없음!
- 미완성 메서드
- 추상클래스 조상으로부터 상속받게된다면, 일부만구혔을 때 abstract를 앞서 붙여야하고 전부 구현하면 abstract를 지워야한다.
- 추상메서드는 값이 없기때문에 그냥 호출도 가능하다!
- 몸통이 없는 것은 추상메서드라고 보면된다!(abstract와 public은 생략 가능하기때문에 유의해라.)
ex ) abstract void play(int pos);
ex ) abstract void stop();
예시
추상 클래스의 작성
- 여러 클래스에 공통적으로 사용될 수 있는 추상클래스를 바로 작성하거나 기존클래스의 공통 부분을 뽑아서 추상클래스를 만든다.
- ex_) marine 클래스, tank 클래스, dropship 클래스의 부모가 되는 Unit 추상클래스. Unit 안에는 움직임을 의미하는 move추상메서드를 만들 수 있다.
- 공통 인자의 재활용으로 중복을제거할수있음.
추상클래스 예시
인터페이스
- 추상 메서드의 집합(추상메서드 만으로 구성) (프로그래밍 관점)
- 구현된 것이 전혀 없는 설계도. (모든멤버가 public)
- 인터페이스는 iv를 가질 수 없다. 하지만 추상클래스는 iv를 가질 수 있다.
public interface 인터페이스명 {
}
메서드를 통해 접근하는것 : 캡슐화
인터페이스의 선언
- 인터페이스 변수
- 인터페이스는 변수를 포함할 수 있으나 변수를 선언하지 않는 것이 좋음.(상수로 쓴다 보통)
- 인터페이스를 구현하는 클래스에 동일한 변수가 있는 경우 인터페이스 내부에 변수를 선언하면 중복되기 때문
- 인터페이스에 선언하는 모든 변수는 기본적으로 public, static, final이므로 명시적으로 선언할 필요가 없음.
인터페이스의 상속
- 인터페이스의 조상은 인터페이스만 가능(Object가 최고 조상 아님)
- 다중 상속이 가능하다.(추상메서드는 충돌해도 문제가 없다.)
인터페이스의 구현 ( implements )
- 인터페이스에 정의된 추상메서드를 완성하는 것
- ex_)class 클래스이름 implements 인터페이스이름 { }
인터페이스를 이용한 다형성
- 부모클래스와 인터페이스 둘을 상속받으면서, 인터페이스는 기존 java에서 단일상속만 허용되는 문제를 해결해줄 다중상속의 역할을 하게된다.
- 부모클래스와 인터페이스에 동일한 이름의 메서드가 있을 때!
조상타입의 참조변수는 자손객체를 가리킬수있다.(조상클래스 변수 = new 자손객체();)
- 인터페이스도 마찬가지다.
- 대신 부모인터페이스가 가진 메서드들만 사용가능하다.
- 인터페이스를 메서드의 리턴타입으로 지정할 수 있다.
인터페이스의 장점
- 두 객체간의 연결, 대화, 소통을 돕는 ‘중간 역할’을 한다.
- 변경에 유리하다. ( = 코드가 유연하다 )
⇒ 따라서 변경에 대한 에러를 최소화하려면 인터페이스를 잘 활용하는 것이 중요하다!
- 개발 시간을 단축할 수 있다.
- 표준화가 가능하다.
- JDBC ..(Java Database Connectivity)
- 자바 프로그램에서 DB에 접속하고 데이터를 관리하기 위한 API
- 옛날엔 Java로 개발할 때 DB에 직접 데이터를 요청하고 , 반환받았다.
- DB의 대표적인 예로 오라클과 mysql
- 오라클⇒ MySQL로 변경하려면 기업은 커다란 비용이 든다.
- 하지만 표준인터페이스에 맞춰 개발한다면 전환이 용이하다.
- JDBC는 DB 표준으로써 기능하며, 표준인터페이스를
- 서로 관계없는 클래스들의 관계를 맺어줄 수 있다.
- 예를들어,
- 유닛이라는 부모를 가진 지상유닛, 공중유닛 이라는 자손이 있다.
- 그 중 지상유닛과 공중유닛의 공통점(기계유닛)에 repair메서드를 부여하고 싶을 때
- 각각에 repair메서드오버로딩을 하지 않고 interface repair를 통해 공통분모를 만들어줄 수 있음.
디폴트 메서드와 static 메서드
- 인터페이스는 추상메서드만 가질 수 있었으나!
- 디폴트메서드와 static메서드를 추가할 수 있게 되었다.
인터페이스의 문제
- 새로운 메서드(추상메서드)를 추가하기 어려움.
- 디폴트 메서드는 인스턴스 메서드
- 기존interface 추상클래스{ void newMethod(); }
- 변경interface 추상클래스{ default void newMethod() {}; }
- 디폴트 메서드가 기존의 메서드와 충돌할 때 해결책
- 여러 인터페이스의 디폴트 메서드간의 충돌
- 인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩 해야한다.
- 디폴트 메서드와 조상 클래스의 메서드 간의 충돌
- 조상 클래스의 메서드가 상속되고, 디폴트 메서드는 무시된다.
내부클래스 (inner class)
내부클래스의 장점
- 객체 생성 없이 외부 클래스의 멤버에게 접근 가능
- 코드의 복잡성을 줄일 수 있다.(캡슐화)
내부클래스 종류와 유효범위 = 변수와 동일 ( iv , cv , lv )
● 인스턴스 내부 클래스
- 인스턴스내부클래스→외부클래스의 private멤버 접근가능하다
● static 내부 클래스
- 내부클래스가 static이면, 외부클래스도 static이어야한다.
- static은 객체 생성 없이 사용가능해야한다.
● 지역 내부 클래스
- 지역 내부 클래스를 감싸고있는 메서드의 상수만 사용가능.
패키지
- 관련 클래스의 모음
- 관련된 클래스, 인터페이스, 하위패키지를 하나로 묶음
java . util . scanner
최상위패키지.하위패키지.하위패키지util에 있는 클래스
패키지 사용의 장점
- 재사용성
- 패키지를 통해 데이터 캡슐화를 쉽게 구현할 수 있으므로 프로젝트를 개발하는동안 코드를 반복하여 작성하는 일이 거의 없음.
- 더 나은 조직화
- 기능에 따라 클래스를 정렬하기 때문에 클래스를 검색하기가 쉬움.
- 이름 충돌 방지
- 패키지는 이름의 충돌을 방지하는데 도움이 됨.
- 접근 제어
패키지 사용법
- 패키지 내부 클래스에 접근하려면 import 명령어 뒤에 패키지명과 클래스명을 지정함
패키지명.클래스명
패키지명.*
폴더 안에있는 클래스만 가져온다.
정규화된 이름 형식
내장패키지
java.lang 패키지
Object클래스
모든 클래스의 상위 클래스.
- toString()
- 객체의 문자열을 반환
- ex_)System.out.println(cat01.toString())
- equals(객체)
- 주어진 객체와 동일한지 여부를 나타낸다.
- ex_)System.out.println(cat01.equals(cat02));
Math 클래스
수학에서 자주 사용하는 상수와 함수를 미리 구현해놓은 클래스.
- 정적메서드이므로 객체를 생성하지 않고 바로 사용이 가능하다.
MySQL
내장함수