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