inner class(내부 클래스)
2019-03-24 00:00:00 +0000Inner Class(내부 클래스)
- class 안에 class를 선언하는 것
- 내부 클래스를 감추고 싶거나 OuterClass만 InnerClass를 사용할 때 사용(코드의 복잡성 제거)
- 서로 관련있는 클래스만 묶어줌(예를 들어 같은 회사직원이지만 회사가 다를 때 사용할 수 있다)
class OuterClass{
private int value = 20;
class InnerClass{
void print() {
System.out.println("value:"+value);
}
}
}
public class Test{
public static void main(String[] args) {
OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass();
inner.print();
}
}
final 키워드
2019-03-23 00:00:00 +0000Final 정리
- 변수에 final 키워드 사용
- 변수의 값을 변경할 수 없음
public class Test{
public static void main(String[] args) {
final int value = 10; // value 값 변경 불가
}
}
- 함수에 final 키워드 사용
- 함수를 상속해서 오버라이딩 할 수 없음
class A{
final public void print() {
}
}
class B extends A{
public void print() { // error
}
}
- class에 final 키워드 사용
- class를 상속할 수 없음
final class A{
public void print() {
}
}
class B extends A{
public void print() {
}
}
~~~
file upload
2019-03-20 00:00:00 +0000파일업로드 방식
- form 태그 사용 방식 : 브라우저 제한이 없어야 하는 경우 사용. 일반적으로 페이지 이동과 동시에 첨부파일을 업로드하는 방식
- ajax를 이용하는 방식 : 첨부파일을 별도로 처리하는 방식
첨부파일 처리 방식
- cos.jar : 2002년도에 개발 종료. 이제 많이 사용 안함
- commons-fileupload : 일반적으로 많이 활용되고 서블릿 스펙 3.0 이전에도 사용 가능
- 서블릿 3.0 이상 : 3.0 이상부터는 자체적인 파일 업로드 처리가 API 상에서 지원
스프링 첨부파일을 위한 설정
- C드라이브 아래에 upload 폴더와 upload 폴더 아래 temp 폴더 생성
- Spring Legacy Project 생성
- pom.xml 버전 변경
<properties>
<java-version>1.8</java-version>
<org.springframework-version>5.0.7.RELEASE</org.springframework-version>
<org.aspectj-version>1.9.10</org.aspectj-version>
<org.slf4j-version>1.7.25</org.slf4j-version>
</properties>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.0</version>
<scope>provided</scope>
</dependency>
- web.xml 변경
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
-
태그 내에 태그 추가 - max-file-size : 특정 사이즈의 메모리 사용
- max-request-size : 업로드되는 파일의 최대 크기
- max-size-threshold : 한번에 올릴 수 있는 최대 크기
<multipart-config>
<location>C:\\upload\\temp</location>
<max-file-size>20971520</max-file-size> <!-- 1MB * 20 -->
<max-request-size>41943040</max-request-size> <!-- 40MB -->
<file-size-threshold>20981520</file-size-threshold><!-- 20MB -->
</multipart-config>
- web.xml 설정은 was 자체 설정. 스프링에서 업로드 처리는 MultipartResolver 타입의 객체를 bean으로 등록해야만 가능
- servlet-context.xml 에서 MultipartResolver bean 추가
<!-- 파일올리기 설정 -->
<beans:bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver">
</beans:bean>
- 여기까지 설정하고 실행 시 에러 발생
- web-app에서 version이 중복 설정되어있어서 하나 제거
정보: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
3월 19, 2019 9:45:43 오후 org.apache.tomcat.util.digester.Digester fatalError
심각: Parse Fatal Error at line 4 column 136: "version" 속성이 "web-app" 요소에 대해 이미 지정되었습니다.
form 방식의 업로드
- UploadController 생성
@Controller
public class UploadController {
@GetMapping("/uploadForm")
public void uploadForm() {
System.out.println("upload form");
}
}
- uploadForm.jsp 생성
<form action="uploadFormAction" method="post" enctype="multipart/form-data">
<input type='file' name='uploadFile' multiple>
<button>Submit</button>
</form>
- 스프링 MVC에는 MultipartFile 타입을 제공해서 업로드되는 파일 데이터를 쉽게 처리할 수 있음.
- 파일 처리는 MultipartFile 타입 사용
- 여러개의 첨부파일을 첨부할 수 있으므로 배열로 설정
- 파일이름이 한글일 때 처리x 영어만 할 것
@PostMapping("/uploadFormAction")
public void uploadFormPost(MultipartFile[] uploadFile, Model model) {
String uploadFolder = "C:\\upload";
for(MultipartFile multipartFile : uploadFile) {
System.out.println("----------------------------");
System.out.println("Upload File Name:"+multipartFile.getOriginalFilename());
System.out.println("Upload File Size:"+multipartFile.getSize());
File saveFile = new File(uploadFolder, multipartFile.getOriginalFilename());
try {
multipartFile.transferTo(saveFile); // 업로드 되는 파일 저장
}catch(Exception e) {
}
}
}
Ajax 방식의 업로드
- Ajax 이용 시 첨부파일 처리는 FormData 객체 사용
- FormData는 가상의 <form>태그와 같다고 생각하면 된다
- uploadAjax.jsp 생성
<h1>Upload with Ajax</h1>
<div class='uploadDiv'>
<input type='file' name='uploadFile' multiple>
</div>
<button id='uploadBtn'>Upload</button>
<script src="http://code.jquery.com/jquery-3.3.1.min.js"
integrity="sha2560FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="crossorigin="anonymous"></script>
<script>
$(document).ready(function(){
$("#uploadBtn").on("click", function(e){
var formData = new FormData();
var inputFile = $("input[name='uploadFile']");
var files = inputFile[0].files;
console.log(files);
// add filedate to formdata
for(var i = 0; i < files.length; ++i){
formData.append("uploadFile", files[i]);
}
$.ajax({
url: '/uploadAjaxAction',
processData: false,
contentType: false,
data: formData,
type: 'POST',
success: function(result){
alert("Uploaded");
}
}); // ajax
});
});
</script>
- ajaxUpload 처리 Controller에 추가
@GetMapping("/uploadAjax")
public void uploadAjax() {
System.out.println("upload ajax");
}
@PostMapping("/uploadAjaxAction")
public void uploadAjax(MultipartFile[] uploadFile) {
String uploadFolder = "C:\\upload";
for(MultipartFile multipartFile : uploadFile) {
System.out.println("----------------------------");
System.out.println("Upload File Name:"+multipartFile.getOriginalFilename());
System.out.println("Upload File Size:"+multipartFile.getSize());
File saveFile = new File(uploadFolder, multipartFile.getOriginalFilename());
try {
multipartFile.transferTo(saveFile); // 업로드 되는 파일 저장
}catch(Exception e) {
}
}
}
파이썬 빅 데이터 K-평균(K-means)
2019-03-17 00:00:00 +0000파이썬 빅 데이터 K-평균(K-means)
- 대표적인 클러스터링 알고리즘
- 클러스터링(Clustering)이란 여러 개의 데이터가 있을 때 데이터를 묶는 것
- 예를 들어 학원에서 고급반, 중급반, 초급반으로 나누면 데이터 활용 방안이 많아진다
- 비지도 학습 알고리즘
- 여러개의 데이터가 있을 때 거리가 가까운 데이터를 선택하는 것(고급반, 중급반, 초급반 중 하나)
- 그리고 데이터를 중심값으로 옮겨준다. 그리고 또 비교하고.. 완벽한 중심값을 찾을 때 까지 반복한다.
- K-means 플러시플러시는 이미 선택된 중심점들로부터 가장 멀리 있는 노드가 중심이 됨.
- 파이썬 빅 데이터 분석에서 많이 사용되는 라이브러리는 팬더스(Pandas), 넘파이(Numpy), 맷플랏라이브러리(Matplotlib)
- Numpy : 연산처리를 용이하게 함
- Pandas : 데이터 포인트를 만들기 위해 사용
- Matplotlib : 데이터 시각화를 위해 사용
from sklearn.cluster import KMeans
import numpy as np
import pandas as pd
import seaborn as sb
import matplotlib.pyplot as plt
%matplotlib inline
df = pd.DataFrame(columns=['x', 'y'])
df.loc[0] = [2,3]
df.loc[1] = [2,11]
df.loc[2] = [2,18]
df.loc[3] = [4,5]
df.loc[4] = [4,7]
df.loc[5] = [5,3]
df.loc[6] = [5,15]
df.loc[7] = [6,6]
df.loc[8] = [6,8]
df.loc[9] = [6,9]
df.loc[10] = [7,2]
df.loc[11] = [7,4]
df.loc[12] = [7,5]
df.loc[13] = [7,17]
df.loc[14] = [7,18]
df.loc[15] = [8,5]
df.loc[16] = [8,4]
df.loc[17] = [9,10]
df.loc[18] = [9,11]
df.loc[19] = [9,15]
df.loc[20] = [9,19]
df.loc[21] = [10,5]
df.loc[22] = [10,8]
df.loc[23] = [10,18]
df.loc[24] = [12,6]
df.loc[25] = [13,5]
df.loc[26] = [14,11]
df.loc[27] = [15,6]
df.loc[28] = [15,18]
df.loc[29] = [18,12]
df.head(30) # 표로 나타내기
sb.lmplot('x', 'y', data=df, fit_reg=False, scatter_kws={"s": 100}) # 데이터 시각화
plt.title('K-means Example')
plt.xlabel('x')
plt.ylabel('y')
# 클러스터링
points = df.values
kmeans = KMeans(n_clusters=4).fit(points)
kmeans.cluster_centers_
kmeans.labels_
df['cluster'] = kmeans.labels_
df.head(30)
sb.lmplot('x', 'y', data=df, fit_reg=False, scatter_kws={"s": 150}, hue="cluster")# 데이터 시각화, 색상도 변화
plt.title('K-means Example')
아나콘다(Anaconda), 주피터 개발환경 세팅
2019-03-16 00:00:00 +0000아나콘다, 주피터 개발환경 구축
선형 회귀 인공지능 구현
- x가 값이 올라갈 수록 y데이터가 상승한다
- 이것을 수식에 대입하여 x값이 8일 때 y값을 추측할 수 있다
import tensorflow as tf
xData = [1,2,3,4,5,6,7]
yData = [25000, 55000, 75000, 110000, 128000,155000, 180000]
W = tf.Variable(tf.random_uniform([1], -100, 100))
b = tf.Variable(tf.random_uniform([1], -100, 100))
X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)
H = W * X + b # 수식
cost = tf.reduce_mean(tf.square(H-Y)) # 예측값에서 실제값을 뺀 제곱
a = tf.Variable(0.01) # 경사하강 알고리즘에서 얼마만큼 점프를 하는지
optimizer = tf.train.GradientDescentOptimizer(a) # 텐서플로서에서 제공해주는 경사하강 라이브러리
train = optimizer.minimize(cost)
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
for i in range(5001):
sess.run(train, feed_dict={X: xData, Y:yData})
if i % 500 == 0 :
print(i, sess.run(cost, feed_dict = {X:xData, Y:yData}), sess.run(W), sess.run(b))
print(sess.run(H, feed_dict={X:[8]})) # x가 8일 때 결과값 출력
아나콘다(Anaconda), 주피터 개발환경
- 콘솔보다 효율적인 개발환경 구축 필요
다운로드
- https://www.anaconda.com/distribution/
- window 64bit 다운로드 및 설치
- 설치 시 한글 경로x 그 외 기본 설정으로 next만 누르면 된다
- 설치 시간은 20분 정도 걸린다
- 아래 명령어를 cmd창에 치고 만약 list가 적다면 이전에 설치한 python과 충돌나는 것일 수 있기 때문에 anaconda 설치 경로로 Path를 변경해야한다
- Path는 사용자 변수를 설정해야 하고 2개의 경로를 지정해야한다 \Anaconda3\ , Anaconda3\Scripts\
python -m pip list --format=legacy
- list 확인 후 tensorflow를 설치
pip install tensorflow
- jupyter 실행. 가상의 서버를 만들고 python을 실행시킬 수 있는 gui 툴 제공
jupyter notebook
- 텐서플로우 예제 실행. No module named ‘numpy.core._multiarray_umath’ 에러 남. 원인은 python 3.6버전이라서 텐서플로우 버전을 1.12로 맞춰줘야 한다
- 기존 텐서플로우 삭제 및 1.12.0 버전으로 실행하니 실행이 잘 되었다.
python -m pip uninstall tensorflow
python -m pip install tensorflow==1.12.0
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