Java Packages & API 사용하기

패키지는 연관된 클래스들의 모임이다. 시스템 상에서는 클래스 파일을 가진 폴더로 존재한다.

패키지는 크게 두 가지로 나눌 수 있다.

  • Built-in Packages (Packages from the Java API)
  • User-defined Packages (create your own packages)

 

Built-in Packages

Java는 1996년에 처음 릴리즈 되었던 언어이다. 지금 시간이 흐른만큼 수많은 빌트인 패키지가 있다.
궁금하면 확인해보길 권장 [13 버전의 빌트인 패키지]

import package.name.Class; // import only a single class
import package.name.* // import whole packages

 

 

example : import Scanner

import java.util.Scanner
// import java.util.* // 패키지 전체를 import하는 경우

class Myclass{
    public static void main(Stirng[] args) {
        Scanner s = new Scanner(System.in);
        String userName = s.nextLine();
        System.out.println("name : " + userName);
    }
}

 

User-defined Class

  • package package_name;을 패키지 코드 첫 줄에 넣으면서 패키지가 된다.
  • 만든 패키지를 불러올 때는 import package_name.class_name이나 import package_name.*을 사용한다.

예시로 보는 사용법

아래와 같이 디렉토리가 구성이 되어있다고 가정해보자.

root
└─ Main.java
└─ mypack
  └─ MyPackageClass.java

MyPackageClass.java

package mypack;
public class MyPackageClass {
    public void msg() {
        System.out.println("hello");
    }
    public static void main(String[] args){
        System.out.println("This is my pack");
    }
}

Main.java

아래와 같은 메인문을 실행하면 hello라고 출력된다.

import mypack.MyPackageClass; // import the single class

public class Main {
    public static void main(String[] args) {
        MyPackageClass m = new MyPackageClass();
        m.msg(); // "hello"
    }
}

패키지 클래스을 실행해보고 싶다면? (테스트용)

1. 클래스 파일을 컴파일 해준다.

  • C:\Users\Your Name> javac MyPackageClass.java

2. 패키지를 컴파일 해준다.

  • C:\Users\Your Name> javac -d . MyPackageClass.java
  • 이 명령어로 컴파일러는 mypack이라는 패키지를 만들게 된다.
  • 여기서 -d 키워드는 클래스 파일이 있는 위치를 특정할 때 쓴다. 이 경우에는 . 현재 위치이다.

3. 실행

  • C:\Users\Your Name> java mypack.MyPackageClass
  • "This is my pack"이 출력된다.

Java 시작해보기

Java의 세계로~

설치

우리는 이제 OpenJDK

  • Oracle이 진행하던 JDK(java development kit) 업데이트가 3년 주기로 이뤄지고 있다.
  • 따라서 우리는 매년 업데이트 되는 OpenJDK를 설치하게 된다.
  • OpenJDK 공식 홈페이지에서 버전 업데이트 소식을 확인 할 수 있고 JDK 다운로드 페이지에서 stable 버전과 개발되고 있는 버전을 확인하고 다운 받을 수 있다.
  • 2021년 7월 1일 현재 기준 업데이트 된 stable OpenJDK는 OpenJDK 16이다.

자 이제 윈도우에 설치

  • 나의 경우 윈도우 10을 사용하므로 JDK 16에서 windows용 zip 파일을 다운 받는다.
  • 알집을 잘 풀어준 뒤 원하는 위치를 지정해서 옮겨주었다. (보통 C드라이브의 프로그램파일즈의 Java 폴더 안에 버전별로 적재해놓는다.)
  • 그 후 CMD에서 사용할 수 있게 환경 변수에 추가해준다.
  • bin 폴더 안에 java 실행 파일이 들어있으므로 bin 파일 주소까지 추가해준다. ex) C:\Java\jdk16\bin

(Optional) 새로운 IDE InteliJ를 모십니다.

  • InteliJ는 Jetbrain에서 만든 똑똑한 IDE이다.
  • 난 Java를 공부해 장차 Spring boot를 사용할 것이므로 InteliJ 정식버전을 설치하였다.
  • 저처럼 학생 라이센스를 이용하실 거라면 여기로 가서 인증하서 설치하세요
  • 설치가 다 되었다면 InteliJ 프로젝트 만들어준다.
  • 나의 경우에는 프로젝트 경로는 기본으로 두고 Java라는 프로젝트 이름으로 설치했던 JDK16을 사용하도록 빈 프로젝트를 만들었다.
  • 빈 프로젝트에 src 폴더 안에 Main.java를 만들고 Hello World를 만들어 보자.

Java 기본 문법

  1. 참고하기 좋도록 코드 위주로 적는다.
  2. 궁금할만한 것들은 짧게 정리해둔다.

Hello World

  • Java의 print 메소드는 System.out.println이다.
  • Main이 static method로 정의된 이유
    • static method의 성질
      • Static으로 선언한 함수나 변수는 객체의 생성 없이 메모리에 할당시켜 호출 가능한 형태가 된다.
      • static 메소드이기 때문에 new classname().main() 할 필요가 없다.
    • 그래서 main은 어디에 할당 되어 있을까?
      • static으로 선언한 메서드는 자바 가상머신(JVM)에서 객체 생성 없이 메모리에 할당시켜 호출 가능한 형태로 존재한다.
      • 실제로 cmd창에 java "메인 클래스"를 입력하면 JVM은 메인 클래스의 객체를 생성하는 것이 아니라, 클래스의 static으로 선언된 메서드를 객체 생성 없이 메모리에 할당시키고 할당된 메서드 중 "main"으로 네이밍된 메서드가 있는지 찾아 호출하게 된다.
      • 즉 "(메인 클래스).main()"이 JVM 상에서 실행되는 것이다.
      • static 멤버 호출 순서 : 정적 변수 -> 정적 초기화문 -> 정적 메서드
  • static 멤버 호출 순서 : 정적 변수 -> 정적 초기화문 -> 정적 메서드
public class Main {
    public static void main(String[] args) {

        System.out.println("hello world");
    }
}

 

Declare default type variables

기본형 변수 선언

public class Main {
    public static void main(String[] args) {

        # 문자
        String name = "lsh";
        char myLetter = 'L';

        # 숫자
        int myNum = 5;
        long myNum = 150000000L;

        # 실수
        float myFloatNum = 5.99f;
        double myD = 19.99D;

        # Boolean (참/거짓)
        boolean myBool = true;

        # 열거형 방식
        int a = 2, b = 3, c; 

        System.out.println(name);
    }
}

 

Manual type Casting

타입 캐스팅

public static void main(String[] args) {
    double myDouble = 9.78d;
    int myInt = (int) myDouble; // Manual casting: double to int

    System.out.println(myDouble);   // Outputs 9.78
    System.out.println(myInt);      // Outputs 9
  }

 

If - Else if - Else statement

If 구문

int time = 28;
if (time < 23) {
  System.out.println("20대 초반");
} else if (time < 27) {
  System.out.println("20대 중반");
} else {
  System.out.println("Not human");
}

 

short-hand if else

짧은 버전

int score = 90
char pass_fail = (score >= 88)? 'p':'f'
System.out.println(pass_fail); // pass

 

Switch statements

스위치 구문

int day = 4
switch(expression){
    case 1:
        System.out.println("시작하는 날");
        break;
    case 2:
        System.out.println("시스템 확립!");
        break;
    case 3:
        System.out.println("내가 변화하는 날");
        break;
    default:
        System.out.println("작심삼일 탈출!");

 

while statement

int i = 0;
while (i < 5) {
  System.out.println(i);
  i++;
}

 

do / while statement

int i = 0;
do {
  System.out.println(i);
  i++;
}
while (i < 5);

 

for statement

For loop

for (int i = 0; i < 5; i++) {
  System.out.println(i);
}

 

For-Each loop

String[] cars = {"Volvo", "BMW", "Ford", "Mazda"};
for (String i : cars) {
  System.out.println(i);
}

 

break / continue statements

break, continue 구문

break

for (int i = 0; i < 10; i++) {
  if (i == 4) {
    break;
  }
  System.out.println(i);
}

 

continue

for (int i = 0; i < 10; i++) {
  if (i == 4) {
    continue;
  }
  System.out.println(i);
}

 

Declare Method

함수 선언

public class Main{
    static void myMethod(String name, int count) {
        System.out.println("I just got executed! " + name + count);
    }

    public static void main(String[] args) {
        myMethod("Theo", 10);
    }

}

 

Declare a Class

클래스 선언

  • Modifier
    • static : 클래스 영역에 저장됨
    • final : 오버라이드나 수정 불가
    • public : 다른 클래스에서 접근 가능
    • abstract : 추상 클래스, 메소드 선언 
public class Main {
    int x = 5; 
    public void myMethod(){ 
        this.x = 2; 
    } 
    public static void main(String[] args){ 
        Main myObj = new Main(); 
        System.out.println(myObj.x); 
        myObj.myMethod(); 
        System.out.println(myObj.x); 
    }
}

Constructors

생성자 선언

public class Main {
    int x;
    public Main(int y) {
        x = y;
    }
    public static void main(String[] args) {
        Main myObj = new Main(5);
        System.out.println(myObj.x);
    }
}

 

Final

public class Main {
    final int x = 10;
    public final static void check() {
        System.out.println("ok");
    }
    public static void main(String[] args) {
        Main myObj = new Main();
        myObj.x = 50; // will generate an error: cannot assign a value to a final variable
        System.out.println(myObj.x);
        check();
    }
}

 

Abstract / Override

추상 클래스, 오버라이드 예제

// abstract class
abstract class Student {
    public String fname = "";
    public abstract void study(); // abstract method
}

// Subclass (inherit from Main)
class Lsmman extends Student {
    public String fname = "lsh";
    public void study() { // the body of the abstract method is provided here
        System.out.println("Studying all day long");
    }
}

class Main {
    public static void main(String[] args) {
        // create an object of the Student class (which inherits attributes and methods from Main)
        Lsmman myObj = new Lsmman();

        System.out.println("Name: " + myObj.fname);
        myObj.study(); // call abstract method
    }
}

 

따로 다룰 시리즈

  • println 시리즈 (출력 형식)
  • 연산자 모음집
  • String methods
  • Math lib
  • Get and Set

실제로 재밌는 일은 없다


👩인트로

일을 할 때 재밌을 때도 있지만, 재미 없을 때도 있는데요. 재미 없는 일을 억지로 재미있게 하는 것은 쉽지 않습니다. 그렇다면, 일은 재미있게 하려면 어떻게 해야할까요?
이번에 인상깊게 본 아티클에서는 재밌는 일은 오류투성이이며, 일 하는 내가 재밌어야 한다고 말합니다.
일 하는 내가 재밌는 부분을 알기 위해서는 내가(나만) 느끼는 재미의 구간과 순간을 파악해 집중하고 몰입하려는 노력하는데 도움이 될 만한 10가지 방법을 소개합니다.

일 속에 재밌는 갖가지 순간 및 구간 10가지


1️⃣일 하는 순간순간에 최대한 의미를 부여
일 하는 모든 순간에 의미 부여할 수 없음. 그러나, 자신에게 도움이 되거나 뜻 깊다고 생각한 포인트에 대해 대수롭지 않게 생각할 것. 그리고 감사함을 표현하고 최대한 재현하려고 노력할 것.

2️⃣일 중에 스스로 제어할 수 있는 범위를 점차 확장
어떤 일이든 완벽하게 통제 불가능함. 대신 각 부분별 '제어의 범주'가 정해져 있음.
이런 부분이나 전체를 개인적 노력과 타인의 협조를 통해 더욱 높은 수준으로 제어할 수 있도록 하는 것.

3️⃣거쳐온 과정에 대하여 수시로 리뷰
그 동안 해온 과정이 앞으로 진행하는 데 어떤 영향을 줄 수 있는지 고려할 것.
그리고 유사한 일을 나중에 똑같이 할 가능성이 있기 때문에 '기록'을 추천.

4️⃣과정 속 발생 가능한 변수들을 예측 및 대응
일은 변수 투성이기 때문에 늘 예측한 변수들을 기획과 계획 속에 포함시켜 진행할 것.
그러나 예측 밖 변수가 생길 시 '다음 기획에 반영'하거나 역이용하는 방법을 통해 제어력을 높이고 긍정적인 요령을 익힐 것.

5️⃣최적의 목표를 세워보는 것
일에서의 목표 = 일의 시작과 끝.
목표에 의해 일의 대부분이 정해지고, 그 목표 달성 여부와 내용에 따라 일의 성과가 결정됨.
그리고 나 또는 우리가 가진 역량과 경험을 통해 할 수 있고, 있다면 얼마나 할 수 있을 지 파악하는 것이 목표이기도 함. 따라서, 이를 '정확하게 파악하고 약간의 상향 설정' 해보는 것도 좋은 접근임. 이를 통해 '향상된 성과'를 갖기 위해 노력하게 될 것이기 때문.

6️⃣더욱 성장한 일을 해보는 것(수준을 높이는 것)
일 하는 사람 위치 = 그 사람 수준.  계속 한 자리에서 자신의 일을 하는 것도 좋지만 좀 더 높은 단계에서 같은 일을 다른 위치에서 해보는 것도 재미를 불러올 수 있음.

7️⃣같은 목표에 새로운 과정을 기획해보는 것
검증된 것은 안정감을 주지만, 막혔을 때 또 다른 선택을 한다는 것은 이전에 얼마나 다양한 경험을 해봤는가에 달려있음. 따라서, 같은 일에 대한 다른 과정을 기획(시뮬레이션)해보고, 실제로 실행하여 일에 대한 정교함을 더해가는 것.

8️⃣기존의 일을 다른 사람과 해보는 것
같은 일을 다른 사람과 해봄으로서 리스크는 있겠지만 그 리스크를 얼마나 보완할 수 있으며, 이전과 얼마나 유사한 결과를 기대할 수 있고 실제 구현할 수 있는지 살피는 것.

9️⃣ 매번 함께 하는 일을 서로 바꿔서 해 보는 것
완전히 바꾸는 것은 불가능. 대신 협업 및 협조를 통해서는 가능. 서로의 책임은 바꿀 수 없어도 일부의 역할은 바꿔봄으로써 역지사지 체험 가능.

🔟 시스템을 구성하고 관리하는 것
업무 시스템을 스스로 만든다고 생각할 것. "어떻게 하면 우리 모두가 더욱 편하게 일하며, 고객으로부터 같은 효과를 가져올 수 있을까?" 에 대해 고민한 결과를 자신의 업무와 직간접적으로 연결된 부분에 전이하여 보여주면 됨.

❗️유의사항
위의 10가지는 모든 조직과 일에 적용 불가한 내용임. 본인의 상황에 맞게 선별적으로 적용해보는 것을 추천


일은 원래 재미없어요 by이직스쿨 김영학
https://brunch.co.kr/@vigorous21/898

카카오 알아보기

  카카오가 네이버의 주가를 뛰어 넘었다는 소식이 들려오고 있다. 그간 카카오의 행보가 지금 보상을 거두고 있고 앞으로도 발전 가능성이 충분하다는 말이다. 내가 궁금해서 분석하려고 찾아보니 이유미 기자님과 류지인 디자이너님, 보이지 않는 곳에서 일하시는 TTimes분들이 너무나 훌륭히 정리해주셔서 글을 남긴다.

 

조직도로 알아보는 카카오의 저력

  • 이는 영상에서 확인할 수 있는 카카오의 조직도이다. 카카오는 플랫폼과 컨텐츠 모두를 잘해내고 있는 조직이라는 점을 한 눈에 알 수가 있다.
  • 초기 카카오의 발전은 카카오톡에 서비스를 추가하는 다양한 시도로 이루어졌는데, 현재 카카오의 성공 또한, 같은 방식을 가지고 있다. 카카오가 키워냈던 서비스들이 다시 카카오가 새로운 시도를 할 수 있는 추춧돌이 되어주고 있다.
  • 현재 네이버와 다르게 카카오 커머스라 불리었던 쇼핑 플랫폼은 점유율이 5% 정도이다. 대신 카카오는 카카오톡 원앱 전략으로 성장시킨 Kakao Pay, Kakao bank에서 업계 1위의 성과를 내고 있다. 카카오는 저번 분기에도 안정된 성과를 가지고 와주었던 카카오 Ads와 더불어 핀테크의 힘으로 쇼핑 플랫폼을 키우려하는 거 같다.

TTimes 카카오 분석 영상 중 카카오 조직도

 

 

지금 이루어지는 카카오와 네이버의 행보들이 쇼핑, 마이데이터를 활용한 핀테크 서비스들이 안정되었을 때 승자를 결정할 것이기에, 더욱 두 기업의 경영 전략과 서비스 내의 과감한 시도들을 찾아보게 되는 듯하다.

 

본 링크 : 무형자산의 위력을 보여준 ‘카카오’ 해부 by TTimes

프로그래밍에서 내가 이루고 싶은 것 (21.06.24 ver)

 

실력을 늘리고 싶다면 양질전환의 법칙에 따라라.
양이 갖추어졌을 때 질은 자연스레 늘어난다.

 

난 내가 꿈꿔왔던 좋은 코드와 멋진 프로그래밍 설계를 내 능력으로 만드는 중이다.
내 손에 닿는 건 다 만들어보자.


내가 만들어 보고 싶은 것

  • 기본적인 백엔드 서버
  • 기본적인 채팅 앱
  • AML 준비 anomaly detection
  • AWS로 간단한 서비스 구축

실력 업을 위해서

  • 오픈소스 분석
  • 꾸준히 1시간 이상 운동
  • 일주일에 7문제 이상 프로그래밍 문제 풀기
  • 해커톤 눈에 보이면 다 지원하기

 

언제든 하고 싶은 거 생기면 적습니다.

AML 자료 모음

AML 분석 모델

  • 자금세탁 의심거래 탐지 방안 - 소셜 네트워크 분석 기법을 중심으로 : link
  • AML model risk management and validation: Introduction to Best Pratices : link
  • Flushing out the money launderers with better customer risk-rating models : link

이론과 메뉴얼

  • How does money laundering work? Youtube : link
  • Korea: Anti-Money Laundering Laws and Regulations 2021 : link
  • [책] 쉽게 이해하는 블록체인 : 암호화폐 자금세탁 방지 : link
  • 차세대 AML - SAS 분석 자료 : link

AML solutions

  • SAS anti-money laundering : link
  • SAS support - learning course : link
  • FICO : FICO: Fraud Detection and Anti-Money Laundering with AWS Lambda and AWS Step Functions : link

AML learning

  • ACAMS - AML 교육의 명가 : link
  • Anti-Money Laundering & Counter-Terrorist Financing Course : link
  • AML eLearning Course : link

현업 데이터 사이언티스트들의 업무

  1. NetBoost (XgBoost+Network) for Suspicious Transaction Report
    • Designed and implemented XgBoost model with network-based features to improve Transaction Monitoring System
    • Utilized the relationships between neighbors in the graph to discover potential suspicious transactions and succeed to report unprecedented types of suspicious transactions to Korea Financial Intelligence Unit (KoFIU)
  2. Risk Assessment System (RA)
    • Developed real-time Risk Assessment System to define customer’s risk level and provide appropriate KYC procedure.
    • Leveraged tree-based M/L algorithm to select appropriate features for RA, and defined accuracy evaluation for different risk level
  3. Paper Company Detection Model
    • Implemented automated paper company detection process using web crawling(w/python), and reduced monitoring time by 90%
    • Designed a quantified detection model using crawling source and internal transaction data. Utilized point biserial correlation to define feature’s weight

국제 기준 및 정부 기관

  • 금융정보분석원 : link
  • 2021.02에 발표된 금융정보분석원(FIU)의 자금세탁방지 역량 강화 방안 및 2021년 중점 추진과제 : link
  • 자금세탁방지 국제기구(FATF) : link

저의 알고리즘 레포지터리를 소개합니다.


github screenshot
github screenshot

'알고리즘' 카테고리의 다른 글

[프로그래머스 Lv 3] 상담원 인원  (1) 2023.07.29
[이코테] 구현 - 게임 개발  (0) 2021.06.13
[stack] 2504번 괄호의 합  (0) 2019.06.03

+ Recent posts