CSS
CSS 속성에 사용하는 단위
- 고정: px
- 상대: %
- 부모를 기준(텍스트): em
- html 기준(텍스트): rem
html 기본문서의 글자크기는 16px
텍스트 속성
- font-family: <글꼴1>, <글꼴2>...<글꼴유형>;
- 1개이상의 폰트를 설정한다. 글꼴이 없으면 다음 순위 글꼴을 적용한다.
- 글꼴 유형이란 글꼴의 개념이 아닌 글꼴의 형태이다. 지정한 글꼴을 전부 불러오지 못하더라도 텍스트가 유사한 형태로 보인다.(ex: serif, sans-serif, monospace, fantasy, cursive)
- font-family: Batangche, "Times New Roman", serif;(공백이 있는경우 "" 붙여야 구분함)
- font-size
- font-style: normal/italic/oblique;
기본, 이탤릭체(글꼴에서 지원하는 이탤릭체), 기울임꼴(단순히 글자를 기울여 보여줌)
- color
- text-align:left/center/right/justify;
왼쪽정렬, 가운데정렬, 오른쪽정렬, 양쪽정렬
- text-decoration: none/line-through/overline/underline
- 텍스트장식 모두지움, 텍스트 관통 선, 텍스트위 선긋기, 텍스트 밑줄긋기
- 최근에는 html 태그로도 텍스트 관통선을 그을수있다.
- letter-spacing:normal/15px;
- 웹 브라우저 기본값/15px 적용
- 자간조절(글자 사이 간격)
- line-height: normal/1.5/200%/16px;
- 웹 브라우저 기본값/현재 font-size1.5/현재 font-size2배/입력 크기 적용
- line-height가 font-size보다 작으면 윗줄과 아랫줄의 텍스트가 겹쳐 가독성이 떨어짐. 항상 line-height > font-size 로 설정하는 것이 좋다.
box
주의점
- margin: 10px 20px; == margin: 10px 20px 10px 20px;
- margin 겹침현상
- 인접한 margin 값은 큰값 하나로 통일되어 한곳에만 적용된다.
- 겹침현상은 마진이 아닌 padding 사용시 예방된다.
border style
p.203
1. border / padding / margin 값 설정
- border: 10px
-> 상/하/좌/우 10px 적용
- border: 10px, 30px
-> 상하 10px, 좌우30px 적용
- border: 10px, 30px, 20px
-> 상10px, 좌우30px, 하20px 적용
- border: 10px, 20px, 5px, 30px
-> 상10px, 우20px, 하5px, 좌30px 적용
- 선 굵기도 설정가능
border-bottom-width: thick;
border-left-width: 1px
backgroud
- color
- image
position
static
relative, absolute
- 상대좌표는 요소를 기준으로 할수 있음
- 절대좌표는 웹페이지전체 시작점 등 절대적인 좌표위치에 따라 배치
기타
- beautifulsoup
- 가운데정렬
margin:0 auto
- 인라인 스타일은 태그 안에
<strong style="color:red;/>
-
CSS 전체
- 이전 CSS(table) : 글자크기 / 간격 / 글꼴
- 반응형 이후(div) : 배치(box, display: float <-수평메뉴 / position, flex, grid 3가지 이해. Mix해서 써야됨)
- JSES7을 기준으로 봐야함. 이후 연도로 바뀌었으나 큰 틀은 변화없음
-
3개 mix
- position: 절대 / 상대
- flex : 1차원, 한축만 선택
- gird : 2차원, 행/열 - 가로 세로
-
java 버전
- 1.8 == 8 버전이 가장 많이 쓰임
- 8~11까지 -> 톰캣9 -> 스프링5 -> 스프링 부트 2.x
- 17버전 -> 톰캣10 -> 스프링6 -> 스프링 부트 3.x
-
js 호이스팅
JSES6
- var 중복가능
- let 일반 변수. 지역과 전역을 구분하고 중복을 불허
- const == java의 final, 상수
https://cafe.naver.com/hamminglab/21079
java
Class
정적 멤버, 인스턴스 멤버
- 정적멤버: static(필드|메소드), 클래스에 고정.
- 정적 메소드와 정적 블록(일괄 초기화) 내부에 인스턴스 필드나 인스턴스 메소드를 사용할 수없다.
- 인스턴스: new로 생성한 객체에 소속
static final 대문자
- 상수는 객체마다 저장할 필요가없고, 여러개의 값을 가져도 안되기 때문에 static 이면서 final인 특성을 가져야 한다.
따라서 상수는 다음과 같이 선언한다.
static final 대문자 [=초기값];
import (*)
- 지정된 모든 클래스를 인식
- 단, 그 단계만 가능
import java.util.date
import java.util.input
import java.util.input
-> import java.util.*
import java.uti.oututp.sort
-> import java.util.* 로 커버할수 없다.
-
같은 이름의 클래스가 하위에 있는경우 컴파일 에러. 이럴때는 패키지명을 모두 써주고 import문은 필요없으므로 지운다.
-
import 문 자동추가
- 이클립스 Ctrl+shift+O import추가, 사용하지 않는 import 정리시 사용.
- 인텔리제이는 Ctrl+alt+O 단축키없이 자동 추가되나, 사용하지 않는 import 정리시 사용.
getter setter 생성자 자동생성
alt+Insert
1. 객체 지향 프로그래밍에서는 직접적인 외부에서의 필드 접근을 막고 대신 메소드를 통해 필드에 접근하는 것을 선호 -> Setter 사용
디자인 패턴
- 책 추천: 헤드 퍼스트 디자인 패턴 -> 14가지 GoF(Gang of Four 최초 작가가 4명임) 패턴 소개
- 싱글톤 == SPA
상속
extends 와 implement
- extends <- class
-실제 상속, 한개 부모 클래스만 상속가능(java특성임), class에 실제 내용이있음
- implement <- interface
-구현체, 여러개 구현가능, interface에 선언만 해놓음
부모생성자 호출 super();
- 자식객체는 부모 객체가 먼저 생성되고 이후 생성된다.
- 부모객체의 생성자도 호출해야만 생성된다. 호출 위치는 자식 생성자 맨 첫줄에 숨겨져 있는 super()에 의해 호출된다.
- 부모클래스에 기본생성자가 없고 매개변수를 갖는 생성자만 있다면, 개발자는 super(매개값, ...) 코드를 자식 생성자에 직접 넣어야 한다.
- 매개변수 없다면 super() 생략가능(컴파일시 자동 추가됨)
메소드 재정의(메소드 오버라이딩)
- 부모 메소드가 자식이 사용하기에 적합하지 않으면 자식 클래스에서 재정의해서 사용
- 오버라이딩시 규칙 주의
- 부모 메소드의 선언부(리턴타입, 메소드이름, 매개변수) 와 동일해야 한다.
- 접근 제한을 더 강하게 오버라이딩 할수 없다.(public -> private)
- 새로운 예외를 throws 할수없다.
- 메소드를 재정의 하면, 기존 부모 메소드를 무시하므로 100줄중 한줄만 바꾸고 싶더라도 100줄 모두를 자식메소드에서 다시 작성해야 한다.
- (@Override 애너테이션 사용은 인텔리제이 alt+Insert로 자동 생성가능. 이클립스는 source 참고)
protected 접근제한자
- 제한 가능 대상: 필드 생성자, 메소드
- 같은 패키지이거나, 상속받은 자식 객체만 사용가능
자동 타입 변환
- 부모 타입으로 자식객체를 대입할 수 있다.
- Cat 객체를 생성하고 Animal 변수에 대입하면 자동 변환이 일어난다. -> 부모든 자식이든 타입만 다를뿐 동일한 객체를 참조한다. p.306 참고
- 객체지향 프로그래밍의 일환으로, 다형성을 지원하기 위해서 사용한다.
처음부터 변경에 유연한 구조로 미리 설계하는 방식이다.
1) List = ArrayList (정형 데이터)
2) Map = HashMap (비정형 데이터)
다형성
p.315
- 자동타입 변환 + 오버라이딩 = 다형성 구현(사용방법은 동일하지만 실행 결과가 다양하게 나오는 성질)
- 필드 다형성: 필드 타입은 동일(사용방법 동일) 대입되는 객체가 달라져서 실행결과가 다양하게 나올수잇는것
public class CarExample {
public static void main(String[] args) {
//Car 객체 생성
Car myCar = new Car();
//Tire 객체 생성
myCar.tire = new Tire();
myCar.run();
// HankookTire 객체를 Tire 필드인 tire에 대입할수 있다. 자동타입 변환이 되기 때문.
myCar.tire = new HankookTire();
myCar.run(); // HankookTire는 roll() 메소드를 오버라이딩(재정의) 하고 있으므로 해당 값이 나온다.
// 자동타입 변환 + 오버라이딩 = 다형성 구현(사용방법은 동일하지만 실행 결과가 다양하게 나오는 성질)
myCar.tire = new KumhoTire();
myCar.run();
}
}
- 매개변수 다형성: 메소드가 클래스 타입의 매개변수를 가지고 있을경우, 호출할때 자식객체를 제공할수도 있다.(동일한 타입의 객체를 제공 하는 것이 정석이긴 함) 여기서 다형성이 발생.
public class DriverExample {
public static void main(String[] args) {
//Driver 객체 생성
Driver driver = new Driver();
Bus bus = new Bus();
/* 매개값으로 Bus 객체를 제공하고 driver 메소드 호출
매개값은 Vehicle 타입으로 Bus 타입을 대입할 수있다. 자동타입 변환이 되기 때문.
Bus 내에는 run 오버라이드 되어있으므로 dirve() -> run() 메소드 실행시 Bus run()이 실행 */
driver.drive(bus);
//어떤 자식 객체를 제공하느냐에 따라 drive 실행결과는 달라진다. 이것이 매개변수의 다형성이다.
Taxi taxi = new Taxi();
driver.drive(taxi);
}
}
과제
- uml 하루 한개씩 정리해서 이해하기
- p.286 /315/319 코드 짜오기
- 명일 추상 -> abstract는 넘어가고, 인터페이스 학습