분류 전체보기
[Java] 스트림 (Stream)
[Java] 스트림 (Stream)
2021.10.25많은 수의 데이터를 다룰 때, 컬렉션이나 배열을 활용했다. 물론 이렇게 데이터를 다루는 방법도 매우 효과적이지만, 이런 방식으로 작성된 코드는 가독성이 좋지 않고, 재사용성이 떨어지는 등 여러 가지 단점이 있다. 이런 단점들을 극복하기 위해 스트림이 만들어졌다. 스트림은 데이터 소스를 추상화하고 데이터를 다룰 때 자주 사용되는 메서드들을 정의해 뒀다. 바로 코드를 통해 알아보자. String 배열을 생성하고, 그 배열을 소스로 스트림을 생성한다. (배열 말고도 LinkedList, ArrayList 등 여러 가지가 소스가 될 수 있다) 이 다음 스트림의 여러 가지 메서드들을 읽어보자. String은 Comparable이 정의돼있기 때문에(순서가 정의돼있기 때문에) sort 메서드로 정렬이 가능하다. 위의..
[Java] 람다식 (Lambda expression)
[Java] 람다식 (Lambda expression)
2021.10.25모든 걸 객체로 생각하는 객체지향언어인 자바가 JDK1.8부터 람다식을 추가함으로써 자바는 객체지향언어인 동시에 함수형 언어가 됐다. 람다식을 어떻게 사용하는지에 초점을 맞춰 공부해보자. 함수(자바에서는 메서드)를 다룰 때 세 가지 특징이 있다. 1. 함수 자체를 변수로 저장할 수 있다. 2. 함수를 다른 함수의 매개변수로 쓸 수 있다. 3. 함수 자체를 반환할 수 있다. 위의 세 가지 특징을 만족하는 함수를 일급함수라고 한다. 함수형 언어는 일급함수를 지원하고, 지원하기 위한 다양한 특징이 있다. 자바도 일급함수를 지원하고 싶었고, 이 생각에 기반해 람다식이 등장했다. 함수 자체를 변수로 저장해야 하는데, 함수 자체에도 이름이 있다. 그렇기에 변수의 이름과 함수의 이름이 충돌이 있을 수 있다. 이를 해..
[Android] 여러 화면 간 전환
[Android] 여러 화면 간 전환
2021.10.25처음 안드로이드 프로젝트를 생성하면, XML파일(activity_main.xml)과 자바 소스 파일(MainActivity.java)이 생성된다. 자바 소스코드의 R.layout.activity_main 코드는 이 두 파일을 연결해준다. (R은 res폴더를, layout은 res폴더 안의 layout폴더를 의미함) 인플레이션은 XML 레이아웃에 정의된 내용(디자인도구를 이용해 만든 버튼, 텍스트뷰 등..)이 메모리에 객체화 되는 과정을 말한다. (버튼의 상태를 정의) 자바 코드에 정의하고, 실제로 객체가 되려면 메모리에 기억장소를 할당받아야 한다. 그 역할을 인플레이션이라고 한다. MainActivity 코드에서 setContentView가 인플레이션 과정을 수행한다. 위의 코드에서 setContentV..
Machine Leaning - Overfitting
Machine Leaning - Overfitting
2021.10.24지난 시간에 Linear Model의 Regression과 Classification을 배우고 Gradient Descent에 대해 배웠다. 그러면 배운 걸 바탕으로 딥러닝, 머신러닝에 바로 활용하면 참 좋은데.. 그냥 가져다 쓰면 여러 가지 문제점이 생긴다. 1. Overfitting (해결책). Regularization Overfitting. 무언가 굉장히 타이트하게 맞는다는거다. 어느 특정한 데이터에 대해서 딱 들어맞고, variation이 조금이라도 있으면 원하는 값을 얻을 수 없는 문제이다. 딥러닝을 할 때 발생하는 대표적인 문제인데, 이 문제를 해결하기 위해 Regularization을 활용한다. ML과 DL의 학습 과정을 살펴보자. (DL은 ML과 세부적인 부분에서는 다르지만, 전체적으로는..
Linear Model - Classification
Linear Model - Classification
2021.10.24지난 시간에 Supervised Learning에서의 Linear Model을 Regression문제에 적용했었다. Regression을 배웠으니 Classification에 적용해보자. 1. Binary Classifier / Logistic Regression 2. Softmax Classifier / Multinomial Logistic Regression Classifier기술은 Regression기술에 의존해 만들어졌기 때문에 Classifier 모델이지만 Logistic Regression처럼 Regression 용어가 쓰인다. 1. Binary Classifier / Logistic Regression Regression 모델로 접근하면 공부 시간에 따른 점수를 예측할 수 있다. 위의 그림처..
[Java] 컬렉션 프레임웍 (Collections Framework)
[Java] 컬렉션 프레임웍 (Collections Framework)
2021.10.19Collection : 데이터 그룹 Framework : 표준화된 프로그래밍 방식 다양한 데이터 타입들을 하나의 그룹으로 모아 처리할 수 있게 해 준다. List Set Map 이 세 가지가 컬렉션 프레임웍의 핵심 인터페이스이다. List와 Set를 구현한 컬렉션 클래스들은 서로 많은 공통부분이 있어 공통부분을 Collection 인터페이스로 정의하고 List와 Set는 Collection 인터페이스를 상속받도록 설계했다. 그러니까 정리하면 Collection이 맨 위에 있고 그 밑에 List와 Set, 그리고 List와 Set를 상속받는 친구들이 밑에 있는 형식이다. List로 구현한 ArrayList와 LinkedList, Stack같은 친구들은 Collection과 List의 메서드는 물론 자신의 ..
[Android] 대화상자 사용하기
[Android] 대화상자 사용하기
2021.10.18대화 상자는 사용자에게 메세지를 출력하고 사용자로부터 입력을 받아들이는 사용자 인터페이스이다. 대화 상자는 Dialog클래스를 상속받는다. 여러 가지 종류의 대화 상자가 있으니 상황에 맞게 잘 찾아쓰자. 해당하는 클래스의 객체를 만들고 메서드들을 이용해서 원하는 기능을 구현하는 큰 틀은 똑같다. (사실 이렇게 무슨 기능이 있는지 배워나가는 것보다, 만들고 싶은 프로젝트가 있으면 그 프로젝트를 진행하면서 필요한 건 강의나 책을 찾아서 배우는 방법이 훨씬 나은 방법인것 같다.) 그래도 배운건 정리해야하니까.. 계속 정리해 보면 프로그레스 바를 만들 때 setIndeterminant() 메서드에서 false를 매개변수로 받을시 언제 끝날 지 예상이 가능함을 의미하고 true를 매개변수로 받을 시 언제 끝날 지..
[Android] 간단한 계산기 만들기
[Android] 간단한 계산기 만들기
2021.10.18덧셈만 가능한 간단한 계산기를 만들어보자. 더보기 package kr.ac.cnu.computer.cp2_05; import android.view.View; import android.widget.Button; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import org.w3c.dom.Text; public class MainActivity extends AppCompatActivity { String prevstr = ""; int intresult = 0; int pluscount = 0; boolean pluscheck = false..
[Android] 이벤트 처리
[Android] 이벤트 처리
2021.10.18버튼을 눌렀을 때 목차가 열리고 숫자가 추가되는 등 다양한 기능을 수행하게 하기 위해서 버튼에 대한 이벤트 처리가 필요하다. 리스너를 구현해 특정 행동에 대한 이벤트를 처리할 수 있다. 한 버튼에 대해 이벤트가 발생하고, 오버라이딩 된 메서드를 호출해 이벤트를 처리하는 방식으로 동작한다. public class MainActivity extends AppCompatActivity { String prevstr = ""; int intresult = 0; int pluscount = 0; boolean pluscheck = false; String tempstr = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCrea..
[Java] 열거형 (enums)
[Java] 열거형 (enums)
2021.10.18순서가 있는 자료들을 나열할 때 사용한다. 여러 상수(final)들을 정의할 때 유용하게 사용된다. 자바의 열거형은 값과 타입을 모두 체크해 타입에 안전한 열거형이라고 한다. 열거형은 다음과 같은 형식으로 정의할 수 있고, 꼭대기의 클래스 / 인터페이스 / static 에만 정의될 수 있다. (메서드에서는 정의될 수 없다.) 열거형 상수간에는 "==" 로 비교할 수 있다. String을 비교할 때는 원래 equals()메서드를 통해 비교했는데, 열거형은 둘 다 가능하다. (그만큼 성능이 좋고, 빠르다.) 다만, 같은 비교 연산자는 사용할 수 없는데, 대신 compareTo()메서드를 이용해 열거형 상수들을 비교할 수 있다. 다음 코드를 작성했을 때 a b c d abcd 에는 각각 0 1 2 ..
[Java] 지네릭스 (Generics)
[Java] 지네릭스 (Generics)
2021.10.17지네릭스를 통해 타입안정성을 확보하고 코드 작성 시 형변환을 생략해 코드를 간결하게 작성할 수 있다. 지네릭스는 다양한 타입의 객체들을 다루는 메서드나 클래스 (List같은 것들) 에 컴파일 시 타입체크를 해 주는 기능을 한다. 실제로 큰 프로젝트를 진행할 때 타입 안정성때문에 쓰레기값이 나오는 경우가 있으면 안 되니까.. 런타임체크가 아니라 컴파일체크인 것도 알아놓자. 계속 봐도 모르겠으면 코드 짜면서 공부하고, 지금은 지네릭스는 타입체크를 위한 이름표구나~ 라고만 생각하자. 타입 안정성 + 형변환 생략(성능 향상) 지네릭 클래스는 클래스나 메서드에 선언할 수 있다. 왼쪽 코드를 지네릭 클래스로 변환하면 왼쪽과 같이 변한다. 여기서 T는 타입 변수로, 아무거나 써도 되고 안에는 comma를 사용해 여러..
Machine Learning - Unsupervised Learning
Machine Learning - Unsupervised Learning
2021.10.17Unsupervised Learning은 학습 데이터만 주어지고, 정답은 주어지지 않는 Machine Learning을 말한다. Unsupervised Learning의 여러 알고리즘에 대해 살펴보자. 1. K-means Clustering 2. Hierachical Clustering 1. K-means Clustring K개의 그룹으로 나눠 그룹화 한다. K = 3일때 Clustring 한 결과. 다른 색을 가진 세 가지 별을 찍고, 거리를 계산한 후 각각의 점들과 별의 거리를 계산해 가장 가까운 별의 색상으로 점의 색상을 바꾼다. 하지만, 이걸로는 제대로 그룹화 된 것 같지 않다. 별을 이동시키며 그룹화를 업데이트하자. 별을 이동시킬 때 위치는 같은 색상을 가진 점들의 평균 위치를 계산하고 그 위치..