반복문 - While 문
while 반복문
- 반복횟수가 명확하지 않을 때 사용하는 반복문
while
- 선 조건체크, 후 수행
- 반복 횟수 : 0 ~ 多
do while
- 선 수행, 후 조건체크
- 반복 횟수 : 1 ~ 多
반복문 - for 문
for 반복문
- 반복횟수가 명확한 경우에 사용
for
- 선 조건체크, 후 수행 구조
- 반복횟수 : 0 ~ 多
for each
- 반복 가능한 집합의 원소들을 꺼내어 처리하는 경우에 사용
- 자료구조 사용에 대한 추상화를 제공한다.
(List, Set 등 자료구조가 달라도 동일한 형태로 반복문 수행)
- 값의 수정이 불가능하다. (조회의 목적)
for each문의 사용과 값의 변화
크기가 2의 Person 타입 p 배열을 선언하고 2개의 Person 객체를 생성, 할당한다.
p 배열에는 그림과 같이 2개의 객체를 가리키는 0x1000, 0x2000 레퍼런스가 할당되어있다.
for each문을 통해 p 배열을 탐색하고, ps에 새로운 Person 객체를 생성하고 할당한다.
하지만 for each문의 ps는 실제 p 배열이 아닌 0x1000 이라는 레퍼런스와 같은 값을 지닌 별도의 참조변수이다. 따라서 new Person() 구문을 사용해서 대입하여도 원본 p 배열에는 변화가 없다.
* 값의 수정이 불가능하다? (ps.age++ 부분)
Reference type을 사용하는 경우 ps로 복사된 값은 단순 value가 아닌 원본 p배열의 Person 객체를 가리키는 레퍼런스와 동일하므로 실제 객체를 가르키게 된다. 따라서 ps.age++ 구문을 사용하면 for each를 사용하는 경우에도 data를 수정할 수 있다. 하지만 이것은 값이 아닌 레퍼런스를 따라가서 원본 객체를 수정하는 것이지 레퍼런스 자체를 수정하는 것은 아니다.
배열 (Array)
배열
- 동형집합의 성격을 가진다.
- Reference type의 객체
배열의 장점
- 데이터 관리의 용이함
ㄴ 반복문과 결합하여 일괄처리가 가능하다
ㄴ 리턴값, 매개변수 전달 시 활용 가능하다. (한 번에 여러개 값 전달)
- 처리성능이 효율적이다
배열의 단점
- 크기가 고정이다. (크기 변경 시 배열을 새로 생성하고 기존 내용을 복사해야 함)
1차원 배열의 활용
1차원 배열의 생성
<Data Type> A = new <Data Type>[size] 의 형태로 생성한다.
Java의 데이터 타입 & 배열
C언어에서 배열의 data type은 곧 배열의 시작주소를 의미한다. 따라서 배열 선언 시 구체적인 size를 지정해주어야 배열의 길이를 알 수 있다.
하지만 자바에서 배열은 Reference Type의 객체이고, length 속성을 가지고 있다. 따라서 원소의 개수를 통해 자동으로 size를 구할 수 있고, 데이터 타입에 size를 명시하지 않는다.
ex) C - int arr[] = {1,2,3,4,5}; ⇒ error! // Java - int arr[] = {1,2,3,4,5}; ⇒ ok!
Java에서의 다차원 배열의 생성
Java에서는 C와 다르게 배열 선언 시 []의 위치를 자유롭게 사용할 수 있다. (int[] arr, int arr[])
이 때 <Data Type> A 형태를 맞추기 위해 int[] arr 형태로 선언을 하고 Data Type이 int형 배열 객체라는것을 명시적으로 표현해주는것이 직관적이다.
또한 이러한 성질을 통해 int[] arr[] 형태의 2차원 배열 선언도 가능하다.
* int[] a, b[], c[][]; 와 같이 한번에 다차원 배열 생성도 가능!
1차원 배열의 사용
- 1차원 배열은 index를 통해 바로 접근하여 사용할 수 있다.
- index는 첫번째 원소로부터 몇칸 떨어져있는가를 나타내고, 0에서 시작한다.
1차원 배열의 초기화
<Data Type> A = new <Data Type>[size] {값1, 값2,,,,}가 기본 형태이지만,
<Data Type> A = {값1, 값2,,,,} 형태로 생략하여 사용할 수 있다.
ex) int[] arr = {1,2,3,4,5};
MarkUp Language
<tag> <!-- 시작 태그 -->
<content>
<body>
</tag> <!-- 종료 tag -->
HTML
복사
MarkUp Language
- tag를 통해 내용을 감싸는 형태의 언어
XML
- Content를 서술하는(의미 전달) Mark Up
HTML
- Content를 꾸미는, 표현하는 Mark Up
CSS의 활용 방식 (1) in-line
In-line 방식
- tag 안에 Style 속성을 정의한다.
- Style 적용에서 가장 높은 우선순위를 지닌다.
- 아주 간단한 Style 지정을 하거나, Selector가 불필요한 특정 대상에게만 Style을 지정하는 경우에 사용한다. (평소에는 지양해야함)
CSS의 활용 방식 (2) Internal Stylesheet
HTML 파일 안에서 <style> 태그를 활용하여 css를 활용한다.
in-line 방식은 동일한 내용의 코드를 여러번 작성해야 하고, 이는 스타일의 재사용성을 줄여 중복, 수정의 어려움을 야기한다. 따라서 internal, external stylesheet 방식을 통해 Selector를 지정하고, 재사용성을 늘린다.
선택자 (Selector)
- 스타일의 Naming이다.
- 스타일을 미리 정의해두고, 선택자를 통해 대상을 지정할 수 있다.
tag 선택자
- 자동으로 모든 tag에 적용되는 스타일
- 아무런 기호를 붙이지 않고 tag명을 그대로 사용한다
ex) div , body { }
Class 선택자
- 본문 tag에서 클래스<class = " ">로 지정한 tag에 적용되는 스타일
- . 기호와 Naming을 사용한다.
ex) .myBody{ background-color : skyblue }; // <body class = "myBody">
id 선택자
- 본문 tag에서 id <id = "">로 지정한 tag에 적용되는 스타일
- # 기호와 Naming을 사용한다.
ex) #d1{ background-color : pink }; // <body id = "d1">
CSS의 활용 방식 (3) External Stylesheet
별도의 css 파일을 사용하여 참조하여 사용한다.
여러 page에서 사용할 공통된 스타일을 정의할 때 사용한다.
CSS 우선순위
동일한 속성이 여러 Style에 의해 정의된 경우 가장 높은 우선순위의 속성 하나만이 적용된다.
이 때 우선순위가 동일하다면 나중에 정의된 속성이 적용된다.
tag < class < id
일반적으로 우선순위는 좁은 적용범위를 가지는 것일수록 우선순위가 높다.
tag - 모든 tag에 적용되므로 가장 넓은 적용범위
class - 지정된 일부 class에만 적용, but 여러 tag가 동일한 class 가능
id - 모든 tag는 고유 id밖에 가지지 못함
CSS 활용 방식에 따른 우선순위
internal == external < in-line
in , external 스타일시트 방식은 우선순위의 차이가 없다. 따라서 정의된 순서에 따라서 우선순위가 결정된다.
내가 개발하는 경우 다른곳에서 가져온 CSS보다 내가 개발한 CSS를 우선적으로 적용시켜야 하기 때문에 external을 먼저, internal을 나중에 선언하여 내 CSS의 우선순위가 높도록 만든다. (내 꺼로 덮어쓰게)