html 페이지 로딩 순서
2019-03-31 00:00:00 +0000HTML 페이지 로딩 순서
- html, Javascript, jsp 등.. 은 인터프리터 언어이다. 그러므로 위에서부터 아래로 순서대로 실행된다
- import -> head 태그 - > <body>태그 -> body onload -> window.onload
- jsp 파일 일 때는 jsp 사용 부분부터 먼저 실행되고 html 부분이 실행된다
- 아래 예제를 실행하면 콘솔창에 head, body, 아래 스크립트, onLoad 순으로 출력되는 것을 확인할 수 있다
<script>
console.log('head');
</script>
</head>
<body>
<script>
console.log('body');
</script>
</body>
<script>
$(function(){
console.log('onLoad');
});
console.log('아래 스크립트');
</script>
CSS, JavaScript 위치
- CSS는 <head>태그 안에 있어야 한다. 왜냐하면 스타일 규칙이 있어야 랜더링을 할 수 있기 때문에 빠르게 알기 위해서이다.
- JavaScript는 <body> 태그 맨 아래에 넣는다. <head>태그 안에 있다면 랜더링을 멈추고 JavaScript를 읽기 때문에 화면 랜더링이 오래걸릴 수 있다.
소수구하기(PrimeNumber)
2019-03-31 00:00:00 +0000문제
https://www.acmicpc.net/problem/1978
풀이
- 소수와 합성수로 나뉜다.
- 소수란 1과 자기 자신의 수만 약수로 가진 자연수.(즉 1은 소수가 아니다)
- 합성수는 약수의 개수가 3개 이상인 수.
- 예를들어 2, 3, 5, 7 은 소수이다.
- 에라토스테네스의 체 알고리즘은 추후 정리
소스코드 풀이
- value를 1부터 value 까지의 자연수로 계속 나눈다. 그 중 나누어지면 복합수. 나누어지지 않으면 소수
import java.util.Scanner;
public class Main{
public static boolean isPrimeNumber(final int value) {
if(1 == value)
return false;
int val = value;
for(int i = 2; i < value; ++i) {
int mod = val%i;
if(0 == mod) {
System.out.println("value:"+value+" i:"+i);
return false;
}
}
return true;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int length = sc.nextInt();
int[] arr = new int[length];
int count = 0;
for(int i = 0; i < length; ++i) {
arr[i] = sc.nextInt();
if(true == isPrimeNumber(arr[i])) {
++count;
}
}
System.out.println(count);
}
}
최소공배수,최대공약수
2019-03-28 00:00:00 +0000문제
https://www.acmicpc.net/problem/1934 https://www.acmicpc.net/problem/2609
풀이
- 유클리드 호제법으로 풀어야 한다
- 유클리드 호제법이란 두 수 사이에 존재하는 최대공약수를 구하는 알고리즘
- a를 b로 나눈 나머지가 r이라면 GDC(a, b) = GDC(b, r) r = 0 이면 b가 최대 공약수
- 예를 들어 GCD(16, 4) = GCD(4, 0) = 최대공약수는 4
- 최소 공배수는 a * b / 최소공배수
- GDC의 공식은 작은 수가 0이 될 때 까지 큰수를 작은수로 나누고 몫을 작은 수에 넣고, 기존 작은 수는 큰수에 넣는다
최소공배수, 최대공약수 구하기
import java.util.Scanner;
public class Test{
public static int gcd(int big, int small) {
while(small != 0) {
int r = big%small;
big = small;
small = r;
}
return big;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int arr = 0; // 최소공배수
int arr2 = 0; // 최대공약수
int small = sc.nextInt();
int big = sc.nextInt();
if(big < small) {
int temp = small;
small = big;
big = temp;
}
arr = gcd(big, small);
arr2 = big*small / gcd(big, small);
System.out.println(arr);
System.out.println(arr2);
}
}
처음 작성한 소스
- 아래 소스는 2와 3으로 나누어지지 않는 정수( 7, 7 )를 대입할 시 잘못된 값 출력(49)
import java.util.Scanner;
public class Test{
public static void main(String[] args) {
// 최소공배수 구하기
Scanner sc = new Scanner(System.in);
int count = sc.nextInt();
int[] arr = new int[count];
for(int i = 0; i < count; ++i) {
int small = sc.nextInt();
int big = sc.nextInt();
int value = 1; // 나누는 수
while(true) {
if(small <= 1 || big <= 1) {
break;
}
if(0 == small%2 && 0 == big%2) {
small *= small/2;
big *= big/2;
value *= 2;
}else if(0 == small%3 && 0 == big%3){
// 홀수
small *= small/3;
big *= big/3;
value *= 3;
}else {
break;
}
}
int result = 1;
if(small != 0) result *= small;
if(big != 0) result *= big;
if(value != 0) result *= value;
//System.out.println("small:"+small+" big:"+big+" value:"+value);
arr[i] = result;
}
for(int i = 0; i < count; ++i ) {
System.out.println(arr[i]);
}
}
}
Stream
2019-03-27 00:00:00 +0000Stream
- 자바 8에서 람다와 함께 추가됨
- Collection을 for, foreach로 다루면 코드가 복잡해지므로 사용
- 함수형 프로그래밍(동작하는 코드를 간단하체 처리. 상태관리x)
- 병렬처리 가능(그러나 ThreadPool을 사용하여 성능저하를 일으킬 수 있음)
예제
- reduece 함수를 이용하여 list에 있는 모든 값을 더하고 첫번째 인자인 1을 더해준다,
- 기존 방식보다 소스코드가 줄어들었고 한눈에 코드를 파악할 수 있다.
public class Test{
public static void main(String[] args) {
{
// 기존방식
int sum = 1;
List<Integer> list = Arrays.asList(1,2,3);
for (Integer value : list) {
sum += value;
}
System.out.println("기존방식:"+sum);
}
// 스트림 방식
List<Integer> list = Arrays.asList(1,2,3);
int result = list.stream().reduce(1, (a, b) -> a+b );
System.out.println("스트림방식:"+result);
}
}
Stream 객체 생성
- array이나 Collection을 이용하여 Stream 생성
public class Test{
public static void main(String[] args) {
// Array
int[] arr = new int[]{1,2,3};
Arrays.stream(arr);
// Collection List, Set..
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
Stream stream = list.stream();
}
}
Stream builder 함수
- Stream의 값을 차례대로 넣는 함수
public class Test{
public static void main(String[] args) {
// Array
Stream<Integer> arr = Stream.<Integer>builder().add(1).add(2).add(3).build();
arr.forEach((x)->System.out.println("value="+x));
}
}
Stream Filter 함수
- b가 포함된 문자열만 Stream
에 추가하는 필터링 기능
public class Test{
public static void main(String[] args) {
// Array
List<String> list = Arrays.asList("ab", "bc", "cd", "de");
Stream<String> str = list.stream().filter(x->x.contains("b"));
str.forEach((x)->System.out.println("value="+x));
}
}
Stream generate 함수
- Stream에 값을 무한으로 생성하는 함수. 무한으로 생성하기 때문에 limit 함수로 크기를 제한 해야한다
public class Test{
public static void main(String[] args) {
// Array
Stream<String> stream = Stream.generate(() -> "test").limit(10);
stream.forEach((x)->System.out.println("value="+x));
}
}
Stream distinct 함수
- 요소의 중복값을 제거하는 함수
public class Test {
public static void main(String[] args) {
List<String> fruit = Arrays.asList("사과", "오렌지", "배", "배", "오렌지");
fruit.stream().distinct().forEach(System.out::println);
}
}
Stream sorted 함수
- 정렬을 하는 함수. 인자 없이 그냥 호출하면 오름차순이고 Comparator.reverseOrder()함수를 호출하면 내림차순이다.
public class Test {
public static void main(String[] args) {
List<Integer> fruit = Arrays.asList(40, 100, -20, 4, 10);
fruit.stream().sorted().forEach(System.out::println);
fruit.stream().sorted(Comparator.reverseOrder() ).forEach(System.out::println);
}
}
Lambda(람다식)
2019-03-26 00:00:00 +0000람다식(Lambda)
- 자바8에서 추가
- cmd 창에서 java -version 명령어를 사용하면 java 버전을 확인할 수 있다(1.8.0_66 라면 두번째 숫자가 8이므로 java 8)
- 함수를 만들지 않고 코드로 실행하는 방식
- 코드를 간단하게 만들 수 있고, 함수를 만들지 않기 때문에 빠르게 개발할 수 있다.
- 익명함수는 재사용이 불가능하고, 디버깅이 어렵다
(매개변수, ...)->{실행문...}
- 인터페이스가 하나의 함수만 가지고 있을 때, 함수형 인터페이스라고 한다.(ex Runnable interface)
- 아래 예제에서 Thread 생성 시 Runnable 객체를 매번 생성하고 함수를 정의해야한다.
- 람다표현식을 사용하면 직접 객체를 만들 필요가 없다. JVM이 Thread 생성자를 보고 Runnable을 구현하는 객체로 자동으로 만들어준다.
public class Test{
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
for(int i = 0; i < 10; ++i) {
System.out.println("hello");
}
}
}).start();
new Thread(()-> {
for(int i = 0; i < 10; ++i) {
System.out.println("hello");
}
}).start();
}
}
Posts
-
Interceptor(인터셉터)
-
Android Studio Install
-
계층형 게시판
-
VirtualBox Ubuntu 18.04.2 LTS
-
TransactionAwareDataSourceProxy Error
-
Java Coding Conventions
-
Java Long과 long의 차이
-
Mybatis 객체 안에 객체 매핑
-
JavaConfig mariadb 연결
-
DataTable
-
관리자 페이지
-
MappingJackson2JsonView
-
Spring Javaconfig
-
게시판 만들기-제품 등록
-
게시판 만들기-제품 페이지 제작
-
게시판 만들기-회원탈퇴 및 게시판 삭제 플래그 추가
-
footer 하단에 고정시키기
-
bootstrap4 사용법
-
Spring 데이터 검증 @Valid, BindingResult
-
brackets 실시간 미리보기
-
Spring 기본설정(pom.xml, web.xml, encoding)
-
Vue.js computed, methods, watch
-
javascript onkeyup
-
Maria DB Incorrect string value Error
-
javascript 암호화(md5, base64)
-
Vue.js template
-
Vue.js 소개
-
Nexacro 설명
-
ControllerAdvice
-
Batch
-
html 페이지 로딩 순서
-
소수구하기(PrimeNumber)
-
최소공배수,최대공약수
-
Stream
-
Lambda(람다식)
-
inner class(내부 클래스)
-
final 키워드
-
file upload
-
파이썬 빅 데이터 K-평균(K-means)
-
아나콘다(Anaconda), 주피터 개발환경 세팅
-
텐서플로우(TensorFlow) 아키텍쳐 및 Session
-
텐서플로우(TensorFlow)상수, 변수, 함수
-
머신러닝 기초
-
한글 리스트 오름차순, 내림차순
-
연속된 글자의 갯수 출력
-
java spring5 프로젝트 설정
-
restController
-
spring 세팅 및 기본설정
-
mybatis trim
-
jquery datepicker
-
ajax로 데이터 전달/응답 받는법
-
mybatis error
-
mybatis 게시판 만들기 순서
-
Java Jsp Mybatis Dynamic Query
-
mybatis
-
git 소개
-
node.js 개발환경 구축
-
node.js 기본 내장 모듈
-
node.js의 전역 객체
-
node.js http module
-
node.js event
-
jdbc
-
자바빈
-
jsp, servlet 정리
-
java null object pattern
-
다음지도 key 등록(kakao map)
-
공공 데이터 open api
-
facebook login api
-
sourcetree 사용법
-
JavaScript event3
-
JavaScript jquery
-
JavaScript dom
-
JavaScript ajax
-
JavaScript 이벤트2
-
JavaScript 캡슐화
-
JavaScript Array,내장객체
-
JavaScript var
-
JavaScript 객체,생성자
-
JavaScript 함수,클로저
-
JavaScript Event
-
javascript eclipse 자동완성(with tern)
-
CSS position
-
HTML5,CSS 선택자
-
자바 시간 측정
-
git,eclipse 연동
-
HTML 기초 정리
-
Eclipse Web 환경세팅
-
피보나치의 수
-
Oracle 반복문,커서,예외,저장 서브프로그램
-
Oracle PL/SQL
-
Oracle 다중쿼리(Multiple row query)
-
Oracle 인덱스, 뷰, 시퀀스, 트랜잭션, 세션 정리
-
Oracle JOIN 정리
-
Oracle DDL, DML 정리
-
Oracle 문자열 함수 정리
-
Oracle 숫자,날짜,자료형 변환 함수 정리
-
Oracle 제약조건 정리
-
Oracle 기초 쿼리 정리
-
문제2775
-
DFS
-
junit
-
json
-
algorithmus basic
-
circular queue(원형큐)
-
binary search(이진탐색)
-
port forwarding(포트포워딩)
-
kakao chatbot(카카오 챗봇)
-
java io
-
sort comparable, comparator
-
Unresolved compilation problem
-
ArrayList, HashMap
-
Regular(정규표현식)
-
Enum Class
-
String Function
-
refactoring 이란(상수,제어플래그,assert)
-
reference,abstract 정리
-
FileNotFoundException Solve
-
static
-
Thread Synchronization(스레드동기화,원자성)
-
Java Exception(예외처리)
-
Java 생성자, this, super
-
roomnum
-
BeeHouse
-
Git Reset, Revert
-
Git Log
-
Array
-
stack
-
pyramid draw
-
Star Draw(별 그리기4)
-
Star Draw(별 그리기3)
-
Star Draw(별 그리기2)
-
Star Draw(별 그리기1)
-
Loop(While, For)
-
자바 데이터 타입, 데이터 연산
-
시계방향 달팽이 그리기
-
정수값의 짝수,홀수 갯수 구하기
-
java, Scanner 정리
-
draw dog
subscribe via RSS