목록Java (8)
거누의 개발노트
문제 설명 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요. 문제 설명 공백은 아무리 밀어도 공백입니다. s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다. s의 길이는 8000이하입니다. n은 1 이상, 25이하인 자연수입니다. 내풀이 public String solution(String s, int n) { String answer = ""; for (int i = 0; i < s.length() ; i++)..
단일 책임 원칙(Single responsibility priciple, SRP) 하나의 클래스는 하나의 책임만 가져야한다. 책임이란 기준이 모호하기 때문에 변경 을 책임의 기준으로 삼으면 설계에 용이할 수 있다. 어떠한 역할에 대해 변경사항이 발생했을때, 영향을 받는 기능만 모아둔 클래스라면 동일한 책임을 지닌 기능이 모인 집합으로써 SRP 원칙이 적용된 설계로 볼 수 있을것 같다. 이처럼 변경사항이 있을때, 애플리케이션의 파급 효과가 적으면 SRP 원칙을 잘 따른것으로 볼 수 있다. 개방/폐쇄 원칙(Open/Closed Principle, OCP) 방폐쇄 원칙은 클래스, 모듈 함수 등의 소프트웨어 개체는 확장에 대해 열려있어야 하고, 수정에 대해서는 닫혀 있어야 한다는 프로그래밍 원칙이다. 수정이 일..
객체 지향 프로그래밍 하는 이유? 유지보수성! + 재사용성! OOP의 4대 기본원칙 1. 추상화(Abstraction) 객체들의 공통적인 특징(속성, 기능)을 뽑아 이름을 붙이는 것 클래스 VS 객체 클래스 : 분류에 대한 개념 -> 같은 특성을 지닌 여러 객체를 총칭하는 집합의 개념 (ex.사람) 객체 : 실체 -> 유일무이한 사물 (ex. 모모) 추상화 : 구체적인 것을 분해해서 관심 영역 (애플리케이션 경계) 에 있는 특성만 가지고 재조합하는 것 (= 모델링 2. 캡슐화(Encapsulation) 특정 객체가 독립적으로 역할을 제대로 수행하기 위해 필요한 데이터와 기능을 하나로 묶은 것 (모듈화의 의미) 정보를 객체 안에 포함시키고, 그 정보에 대한 직접 접근은 허용하지 않는 대신, 필요에 따라 확..
접근제어자 같은 클래스 멤버 같은 패키지 멤버 자식 클래스 멤버 그 외의 영역 public O O O O protected O O O X default O O X X private O X X X 접근제어자를 사용하는 이유? 접근 제어자를 사용하는 이유는 보안 때문이라고 할 수 있습니다. 만약에 웹사이트에서 아이디와 비밀번호 같은 중요한 정보를 public 변수에 저장을 한다면 아무데서나 직접적으로 접근하여 그 값을 변경할 수 있기 때문에 노출되기 쉽습니다. 이런 중요한 변수들은 대부분 private를 붙여줍니다. 또한 여러 사람들과 함께 프로그램을 만들다 보면 다른 사람이 내가 만든 중요한 변수나 메서드를 무분별하게 사용하여 값을 변경할 수 있는데, 이를 막기 위해 상황에 맞는 접근 제어자를 사용합니다...
String String은 불변 객체이다. String str = "hello"; str = str + " Java"; 1. 처음에 hello 라는 문자열을 변수에 초기화 했다. 2. hello Java를 새로 초기화 했고, 원래 있던 hello 라는 문자열은 가비지 컬렉터(garbage collection)에 의해 사라지게 된다. 결국 String은 기존에 있던 문자열에 추가하는 형태가 아니라 새로운 인스턴스를 생성해서 문자열이 수정된 것 처럼 보이는것이다. StringBuffer / StringBuilder StringBuffer / StringBuilder은 가변 객체이다. StringBuffer sb = new StringBuffer("hello"); sb.append(" Java"); 1. St..
간단히 말하자면 IDE에서 .java 파일에 코드를 작성해서 저장하면 컴파일러가 컴파일 후 컴파일된 코드를 .class 파일에 저장한다. 그럼 우리는 run() 을 하여 코드를 실행 시킬 것이고, run()을 하면 JVM에 적재되고 프로그램이 실행된다. 여기서 다시 의문이 생긴다. JVM이 뭐지? JavaVirtual Machine의 줄임말인건 알고 있고, 하드웨어의 기종에 상관없이 운영체제에 JVM만 설치되어있으면 Java 프로그램을 실행 할 수 있다고 한다. ( 플랫폼에 종속되지 않는다 ) 그럼 JVM안에 요소 하나하나 어떤 역할을 하는지 살펴보자. Class Loader .class(바이트 코드)를 읽어서 Runtime Data Area에 맞춰서 적재하는 기능을 수행한다. [로딩 절차] 1. 어떤 ..
AES128은 양방향 암호화로 대칭키를 가지고 암호화, 복호화하는 방식이다. 1. JAVA에서 암/복호화할 때 2. MySQL에서 AES128 암/복호화한 것을 JAVA에서 비교해야할 때(동기화) 두가지 버전으로 설명해 보겠슴다. 👉 1번 JAVA에서 암/복호화 package com.common; import java.security.Key; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; public class AES128 { private String ips; privat..
MD5와 SHA256 암호화 방식은 단방향 암호화 방식이다. 따라서 암호화한 값을 복호화하는 것은 일반적으로는 불가능 하다. 오늘은 JAVA에서 MD5와 SHA256을 암호화하는 방법! 👉 JAVA - MD5 암호화 package com.common; import java.security.MessageDigest; public class Encryption { public static void main(String[] args) throws Exception{ String txt = "Hello World"; System.out.println("txt : " + txt); System.out.println("MD5 : " + testMD5(txt)); } public static String testMD..