java(20)
-
[HW] Java 기반의 AES 복호화 프로그램
아래의 key, IV, Ciphertext를 통해서 plaintext 구하기 "각 값들은 Base64 인코딩되어 제공된다" ## key ## 8iE3bf1se6N76HGPP8S0Xw== ## IV ## cHml3oX848/0uBwDJtChOA== ## Ciphertext ## QDr9NZNG9Bgc3TTnfRuqjjzf/kVSYwbP7F9mR4GQZ/IneIh7HTc/xnwzEeVBc H3pPlIbLFySKZruedJc9X87CGNDJ1f2Dat8BR3Ypbei5Q42xc306/AkSuGsjfqb X9/ELxmdKn7MyvY/Jbc0v0AJHV6odgNzygKRRrFJcUIF/50= ## 암호화 모드 ## AES/CBC/PKCS5PADDING Base64 인코딩? Base64 Encoding이란 Bina..
2022.03.26 -
[Java] hashCode() - equals() 재정의
hashCode() / equals() - 둘다 Java의 Object 클래스에 정의되어 있는 메소드이다 따라서, Java의 모든 객체는 equals(), hashCode()를 상속받는다 hashCode()? - 해싱기법에 사용되는 "해시함수"를 구현한 메소드이다 해시함수는 찾고자하는 값을 입력하면, 해당 값이 저장된 위치를 알려주는 해시코드를 return한다 - 일반적으로 해시코드가 동일한 두 객체가 존재하는 것은 가능하다 Object클래스에 정의된 hashCode()는 객체의 주소값으로 해시코드를 생성해서 return한다 32bit JVM : 서로 다른 두 객체는 절대로 동일한 해시코드를 가질 수 없다 64bit JVM : 객체끼리 해시코드가 중복될 수 있다 >> 따라서, 클래스의 인스턴스 변수 값으..
2022.02.20 -
[Java] File 클래스
File 클래스 - 파일이나 디렉터리에 대한 경로명, 크기, 타입, 수정 날짜,.. 등 속성 정보 제공 - 파일이나 디렉터리에 대한 파일 삭제, 디렉터리 생성, 파일 이름 변경,... 등 파일 관리 작업 지원 File(String pathname) : pathname의 완전 경로명이 나타내는 File 객체 생성 File(String parent, String child) : parent 디렉터리에 child 이름의 서브 디렉터리/파일을 나타내는 File 객체 생성 File(File parent, String child) : parent 디렉터리에 child 이름의 서브 디렉터리/파일을 나타내는 File 객체 생성 File(URI url) : file:URI를 추상 경로명으로 변환하여 File 객체 생성 ..
2021.12.17 -
[Java] 바이트 스트림
바이트 스트림 클래스 - 바이트 단위로 바이너리 데이터가 흐르는 스트림 - 텍스트 파일(문자 데이터) + 이미지 파일(바이너리 데이터) 모두 입출력 가능 InputStream/OutputStream : 추상 클래스 / 바이트 입출력 처리를 위한 기능 보유 (슈퍼 클래스) FileInputStream/FileOutputStream : 파일 입출력을 위한 클래스 / 파일로부터 바이너리 데이터를 읽기/쓰기 가능 DataInputStream/DataOutputStream : boolean, char, int, long,... 타입의 값을 바이너리 형태로 입출력 / 문자열도 바이너리 형태로 입출력 바이너리 파일 쓰기 FileOutputStream - 변수나 배열에 들어 있는 바이너리 값(이진수)들을 그대로 파일에..
2021.12.17 -
[Java] 문자 스트림
문자 스트림 클래스 - Reader/Writer 형식 FileReader/FileWriter FileInputStream(InputStreamReader)/FileOutputStram(OutputStreamWriter) - 2byte의 유니코드 문자를 단위로 입출력하는 스트림 - 이미지, mp3 같은 바이너리 바이트 값들은 처리 X - 문자 입력 스트림 : 바이트들을 전달 받음 → 해당 바이트들을 '로컬 문자 집합(MS949)'에 있는 문자인지 비교하여 문자로 변환 FileReader - 문자열 단위의 자료처리 FileReader(File file) : file로부터 읽는 FileReader 생성 FileReader(String name) : name이름의 파일로부터 읽는 FileReader 생성 Fil..
2021.12.17 -
[Java] 입출력 스트림
스트림 입출력 - 스트림 : 연속적인 데이터의 흐름 or 데이터를 전송하는 소프트웨어 모듈 스트림은 도착한 순서대로 데이터를 흘러 보낸다 - 입출력 스트림 객체와 연결해서 쉽게 데이터 입출력을 실행 - 스트림의 양끝에는 입출력장치, 자바 응용프로그램이 연결된다 자바 응용 프로그램 : 입출력 스트림과만 연결 입출력 스트림 : 입출력 장치를 제어하고 실직적 입출력 담당 - 스트림은 단방향이다 - 스트림을 통해 흘러가는 기본 단위는 byte나 문자(char)이다 - 스트림은 FIFO(First In First Out) 구조이다 문자 스트림 - only 문자만 다룬다 → ASCII (a, b, c, &, !, ....) - 문자가 아닌 정보가 입력되면 응용프로그램에 이상한 문자가 전달된다 - 문자(char) 하..
2021.12.17 -
[Java] 제네릭 만들기
제네릭 클래스 작성 - ex) 타입 매개변수 T를 가진 제네릭 클래스 Myclass - ex) 타입 매개변수 T를 가진 제네릭 클래스 stack (스택 자료구조) class Myclass{ T val; // 타입이 T인 변수 val void set(T val){ this.val = val; } T get(){ // 값 val를 타입 T로 return return val; } } class stack{ int top; // 스택의 top Object [] stack; // item을 저장할 stack 배열 public stack(){ top = -1; stack = new Object[10]; // 제네릭 매개변수로는 객체 생성, 배열 생성이 불가능 // 따라서 Object 배열을 생성해서 실제 타입 객체..
2021.12.13 -
[Java] 컬렉션과 제네릭
배열 vs 컬렉션 배열 - 고정 크기 - 배열의 중간에 삽입/삭제가 이루어지면 데이터들이 이동해야 한다 컬렉션 - 가변 크기 - 컬렉션 내에서 삽입/삭제가 이루어지면 컬렉션이 자동으로 데이터들을 이동시킨다 - '제네릭'이라는 기법으로 구현 - Vertor, ArrayList : 가변 크기의 배열 구현 - LinkedList : 노드들이 링크로 연결되는 리스트 구현 - Stack : 스택 구현 - HashSet : 집합 구현 모두 Collection를 상속받음 단일 클래스의 객체만을 요소로 다룬다 컬렉션 특징 1. '제네릭'이라는 기법으로 구현 - 컬렉션 클래스의 이름에 , , 등(타입 매개변수) 이 항상 포함 - 컬렉션을 여러 종류의 타입으로 변신할 수 있도록(일반화) 타입 매개변수를 사용 - 컬렉션을 ..
2021.12.10 -
[Java] Wrapper 클래스
Wrapper 클래스 - boolean, char, byte, short, int, long, float, double 8개의 기본타입을 객체로 다루기 위해 JDK에 만들어진 클래스 기본타입 boolean char byte short int long float double Wrapper 클래스 Boolean Character Byte Short Integer Long Float Double 객체 생성 (valueOf) - Character는 문자열로 객체 생성 X - Character를 제외한 나머지 Wrapper 클래스는 문자열로 객체 생성 가능 Integer i = Integer.valueOf(10); Integer i = Integer.valueOf("10"); Character c = Charac..
2021.12.01 -
[Java] 추상 클래스 / 인터페이스
추상 클래스 (abstract) - 선언은 되어 있으나, 코드가 구현되어 있지 않은 메소드 - 추상 메소드를 가지고 있으면, 반드시 추상 클래스로 선언 - 객체를 생성할 수 없다 - 레퍼런스 변수는 선언 가능하다 ※ Example abstract class Calculator{ public abstract int add(int a, int b); public abstract int subtract(int a, int b); public abstract double average(int[] a); } class Cal extends Calculator{ // 추상 메소드 구현 @Override public int add(int a, int b) { return a+b; } @Override public i..
2021.11.24 -
[Java] 메소드 오버라이딩
메소드 오버라이딩 (Method Overriding) - 슈퍼 클래스에 선언된 메소드와 같은 이름/리턴 타입/매개 변수 리스트를 갖는 메소드를 서브 클래스에서 재작성 - 슈퍼 클래스의 메소드를 '무시하기/덮어쓰기' - 슈퍼 클래스 메소드의 접근 지정자보다 무조건 접근 범위가 같거나 넓어야 한다 - static/private/final로 선언된 메소드는 오버라이딩 X ※ 동적 바인딩 - 실행할 메소드를 컴파일 시(Compile time)에 결정하지 않고, 실행 시(Run time)에 결정 - 슈퍼 클래스의 메소드를 무시하고, 서브 클래스에서 오버라이딩한 메소드가 무조건 실행 ※ Example class Shape{ public void draw(){ System.out.println("Shape"); } ..
2021.11.24 -
[Java] 업캐스팅 / 다운캐스팅
업캐스팅 (Upcasting) - 서브 클래스의 객체에 대한 레퍼런스 -> 슈퍼 클래스 타입으로 변환 - 슈퍼 클래스의 레퍼런스로 서브 클래스의 객체를 가리키게 한다 - But 슈퍼 클래스의 레퍼런스는 슈퍼 클래스의 멤버만 접근 가능 - 명시적 타입 변환을 하지 않아도 된다 ※ Example class Person{ String name, id; public Person(String name){ this.name = name; } } class Student extends Person{ String grade, department; public Student(String name) { super(name); } } public class test { public static void main(String..
2021.11.24