항해99 Pre-onboarding 1주차 항해일지 <6day - TIL>
📌 같은 타입의 데이터를 연속된 공간에 나열하고, 각 데이터에 인덱스(번호)를 부여해놓은 자료구조
(1.1) 배열
(1.2) 배열의 선언
1. 타입[] 변수;
int[] intArray;
double[] doubleArray;
2. 타입 변수[];
int intArray[];
double doubleArray[];
(1.3) 배열 생성
int[] intArray = { 0, 1, 2, 3};
String[] names = { "신용권", "홍길동", "김자바"};
ㄴ 변경 : names[1] = "홍동길";
*/ 배열 변수를 미리 선언하고, 값 목록이 나중에 결정된다면 new 연산자를 사용하여 값 목록을 지정하면 된다
String[] names = null;
names = new String[]{"신용권", "홍길동", "김자바"
*/ 배열의 크기를 알고있고, 향후 값들을 저장할 배열을 미리 만들고 싶으면 아래와 같이 만들 수 있다.
int[] intArray = new int[5];
String[] names = new String[30];
(1.4) 다차원 배열
(1.5) 참조 타입의 배열
(1.6) 배열 복사
1. for문
public class exam_coding_5_4 {
public static void main(String[] args){
int[] ordArray = {1,2,3};
int[] newArray = new int[5];
for (int i=0; i< ordArray.length; i++){ //ordArray배열의 크기만큼 반복
newArray[i] = ordArray[i]; // // newarray에 ordArray값을 넣는다
}
for (int i=0; i< newArray.length; i++){
System.out.print(newArray[i]+",");
}
}
}
2. System.arraycopy()메소드
public class Exam_code_5_5 {
public static void main(String[] args){
String[] oldStrArray = {"Java", "Array", "copy"};
String[] newStrArray = new String[5];
System.arraycopy(oldStrArray,0,newStrArray,0,oldStrArray.length);
ㄴ System.arraycopy(기존배열,시작인덱스번호,새로운배열,시작인덱스번호,복사할갯수)
for (int i=0; i< newStrArray.length; i++){
System.out.print(newStrArray[i]+",");
}
}
}
결과값 : Java,Array,copy,null,null,
ㄴ 복사되지 않은 항목은 String[] 배열의 초기값인 null으로 유지된다
📍 5-2 Chapter 예제
import java.util.Scanner;
public class exam_5_8 {
public static void main(String[] args) {
boolean run = true;
int studentNum = 0;
int[] Score = null;
Scanner scanner = new Scanner(System.in);
while (run) {
System.out.println("===========================================");
System.out.println(" 1. 학생수 | 2. 점수입력 | 3. 점수리스트 | 4.분석 | 5. 종료");
System.out.println("===========================================");
System.out.println(" 선택 > ");
int selectNo = Integer.parseInt(scanner.nextLine());
if (selectNo == 1) {
System.out.print(" 학생수 >");
studentNum = Integer.parseInt(scanner.nextLine());
Score = new int[studentNum];
} else if (selectNo == 2) {
for (int i=0; i<Score.length; i++){
System.out.println("Score[" + i + "]>");
Score[i] = Integer.parseInt(scanner.nextLine());
}
} else if (selectNo == 3) {
for (int i=0; i<Score.length; i++){
System.out.println("Score[" + i + "]>" + Score[i]);
}
} else if (selectNo == 4) {
int max = 0;
double avg = 0.0;
int sum = 0;
int count = 0;
for (int i=0; i< Score.length; i++){
if ( max < Score[i]){
max = Score[i];
}
sum += Score[i];
count ++;
}
avg = (double)sum / count;
System.out.println("max : " + max);
System.out.println("avg : " + avg);
} else if (selectNo == 5) {
run = false;
}
System.out.println("프로그램 종료");
}
}
}
public static void main(String[] args){
public은 제한자 부분으로, 모든 함수의 앞에는 이 함수를 어디에서 접근할 수 있는지 범위를 지정
(제한자는 public, private, protected 종류를 지정할 수 있지만 main 함수는 public을 지정해야함)
static: static / heap 중 어디에 선언할것인지 지정
( Main 메소드는 프로그램에 없어서는 안되는 기본함수로 GC에 의해 정리되지않도록 static에 선언해야함)
main: 디버깅시 Entry Point (제일 먼저 시작하는 코드)
String[] args : String 배열의 args 변수
( 프로그램의 실행 순간에 외부의 값을 가져와서 프로그램 내 사용하고자 할 때 메모리에 저장할 공간을 미리 선언해 두는 것)
📌 요일, 계절처럼 한정된 값(=열거상수)만을 갖는 타입을 열거 타입이라 함
열거타입 코드
#Week.java(enum)
public enum Week {
MONDAY,
TUESDAY,
WEDENSEDAY,
THIRDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
#exam_test.java
import java.util.Calendar;
// 캘린더 클래스를 import
public class exam_5_9 {
public static void main(String[] args) {
Week today = null;
Calendar cal = Calendar.getInstance();
int week = cal.get(Calendar.DAY_OF_WEEK);
/week 변수에 일(1)~토(7)까지의 숫자를 리턴 받음
switch (week) {
case 1:
today = Week.SUNDAY; // 열거 상수 대입
break;
case 2:
today = Week.MONDAY;
break;
case 3:
today = Week.TUESDAY;
break;
case 4:
today = Week.WEDENSEDAY;
break;
case 5:
today = Week.THIRDAY;
break;
case 6:
today = Week.FRIDAY;
break;
case 7:
today = Week.SATURDAY;
break;
}
System.out.println("오늘 요일:" + today);
}
}
🔍 실행 결과
오늘은 토요일 룰룰루
유저가 공격자가 만든 피싱 사이트에 접속 할 것
공격자가 유저 권한을 통해 요청을 보낼 사이트에 로그인 되어 있을 것
*) CSRF공격은 서버에 직접적으로 공격을 가하지 않기 때문에 위와 같은 조건이 만족해야함
CSRF 공격이 이루어지는 과정
(1) 위조요청을 보낼 사이트에 유저가 로그인 되어 있는 상태로 피싱 사이트에 접속
(2) 피싱 사이트에서 유저로 가장하여 요청을 위조해서 위조요청을 보냄
(3) 위조 요청을 받은 사이트는 해당 요청에 대한 응답을 하게되고, 의도하지않은 행동이 실행됨
CSRF 방어 방법
여러가지의 대응 방법 중 CSRF 토큰에 대해서 알아보았다.
🔍 CSRF Token?
1. SOP(Same-origin policy, 동일 출처 정책)
자바스크립트 엔진 표준 스펙의 보안 규칙으로, 동일한 출처 사이에서만 리소스를 공유 할 수 있다는 정책이다.
ㄴ *) 동일 출처란 [프로토콜, 호스트명, 포트]가 같은 것을 말한다.
하지만 최근 서비스중인 어플리케이션의 프론트단에서 다른 도메인의 제 3자가 제공하는 API를 호출하는 등, 다른 출처로 요청을하고 응답을 받는 수요가 증가함에 따라 SOP정책의 해결 방법이 필요해졌고 CORS가 등장하게 되었다.
2. CORS