오늘은 자바의 overriding, overloading 에 대해서 설명하려고 한다. 객체지향언어인 자바에서은 매우 중요한 개념이기도 하니 확실히 이해하면 좋을 것 같다. 1. overriding 오버라이딩은 말그대로 덮어쓰기를 뜻한다. 다른 말로 표현하자면 메소드를 다시 정의하는 것이라고 말할 수 있다. class Member{ void printCN() { System.out.println("Member"); } } class Member_sub extends Member { void printCN() { System.out.println("Member_sub"); } } 위와 같이 같은 이름의 메소드를 다시 정의하는걸 overriding 이라고 한다. 재정의를 했을 때는 @Override를 통해..
오늘은 javascript 에 변수선언 방법들에 대해서 알아보려고 한다. 여러가지 방법들이 있는데, 각자 다른 특성을 가지고 있었다. javascript 는 따로 타입을 지정해주지 않고 사용할 수 있어서 편한데 여러가지 방법들이 있어서 정리해보려고 한다. 1. var var name = "GG_BBANG"; var age = 22; var은 위와 같이 사용할 수 있는데 이 선언 방법에는 문제가 조금 있다. name을 선언한 후에 또 한번 같은 이름으로 name을 선언하면 무려 오류가 나지 않는다...(!) var name = "GG_BBANG"; var name = "gg_bb"; console.log(name); 이러한 구문이 오류가 나지 않고 gg_bb라는 값이 출력되게 된다. 이런 현상을 막기 ..
오늘은 접근제어자에 대해서 정리해보려고 한다. 옛날에 코딩할 때는 중요성을 못 느끼고 무분별하게 사용만을 했는데, 접근제어자를 적절히 사용하면 위험요소들을 줄일 수 있다. 자세한 예를 들어 이해와 기억에 도움이 되도록 작성해 보려고한다. 접근제어자에는 public, protected, default, private 가 존재한다. 일단 아래와 같은 test 패키지에 변수들이 있다고 가정하겠다. package test; public class Am_Member { public String pub_name = "pub_GG_BB"; protected String pro_name = "pro_GG_BB"; private String pri_name = "pri_GG_BB"; String name = "d..
오늘은 kotlin의 null 처리에 대해서 글을 써보려고 한다. 코틀린에서 !!와 ?는 null 처리에 이용되는 문구이다. ?는 null 일 수도 있다는 걸 알려줄 때 사용된다. var name:String? = null 다음과 같이 사용할 수 있다. 그렇다면 !!은 언제 사용될까? !!은 null 이 아니다라는 걸 알려줄 때 사용된다. println(name!!.value); 이런식으로 사용된다. 저번에 헷갈렸던 기억이 있어 정리하게 되었다.
오늘은 Optional에 대해서 알아보려고 한다. 그동안 개발을 해보면서 Optional이라는 걸 본 적이 없었기에, 처음 보는 만큼 자세히 이해해야겠다. Optional 이란 개발을 하면서 흔히 볼 수 있는 NullPointerException을 방지 할 수 있도록 도와주는 클래스이다. null 값이 들어올 수 있는 값을 감싸는 클래스로써, 참조하더라도 오류가 나지 않도록 도와주는 역할을 한다. 어떻게 사용이 되는지 보자면 // Member Class private final name = "GG_BB"; public void getName() { return name; } public void setName(String name) { this.name = name; } //////////////..
오늘은 클래스, 객체, 인스턴스에 대해서 설명해보려고한다. 어떤 느낌으로 사용되는지는 대충 알지만 남에게는 설명하지 못할 것 같아서 정리해보게 되었다. 밑에 코드를 보면서 이해하면 더 좋을 거 같아 넣어보았다. public class Member() { String name = "GG_BB"; public static void Mem_print() { System.out.println(""); } } 1) 클래스 (Class) 변수와 메서드의 집합이며, 객체를 만들기 위한 설계도라고 생각하면 될 것 같다. 2) 객체 (Object) 소프트웨어에 구현할 대상을 뜻한다. 좀 더 쉽게 말하자면 만들고자하는 기능이라고 생각하면 될 것 같다. 클래스의 인스턴스라고도 부른다. 3) 인스턴스 (Instan..
오늘은 Kotlin의 Companion Object 에 대해서 알아보려고 한다. 간단하게 설명하자면 Companion Object는 저번 글에서 설명했던 Java의 static 같은 역할을 한다. 하지만 정확하게 어떻게 사용되고 어떤 역할을 하는지에 대해 알아보자. Companion Object 는 다음과 같이 사용된다. class Member { companion object { val name = "BB_GG" fun method() = "BB_GG입니다." } } static 과 같은 역할을 한다고 했지만 모습은 매우 다른 모습인걸 알 수있다. 아무튼 위와 같이 companion object를 통해 name을 선언하면 다음과 같이 이용할 수 있다. fun main(args: Array) ..
이번엔 static 변수에 대해 알아보려고 한다. 아예 몰랐던 지식은 아니지만 정확히는 어떤 역할을 하는지 알지 못하는 거 같아서 정리하게 됬다. 대충 메소드나 변수를 만들 때 쓰이고 메모리는 고정되지만 값만 바뀌게 할 수 있는 키워드라 생각하고 있었다. 하지만 정확히 설명하자면 메모리에 고정적으로 할당되어, 프로그램이 종료될 때 해제되는 변수를 static 변수라고 말한다. 이해를 돕기위한 예제를 가져와보자면 public class Member { private String name = "BB_GG"; } 다음과 같은 클래스가 있을 때, 이 클래스를 통해 다른 클래스에서 n개의 Member를 생성하면 "BB_GG"라는 값을 가지는 메모리가 n개가 생겨버린다, 이는 메모리 효율에 매우 좋지않은..
volatile 변수오늘은 C언어의 volatile 변수에 대해 알아 보려고 한다.volatile은 변수를 선언할 때 변수 앞에 붙일 수 있는데, 이 키워드는 해당 변수를 최적화에서 제외하는 역할을 한다.이게 무슨 말인지 알려면 C언어의 컴파일러가 최적화하는 방식에 대해서 알아야한다. 예를 들어서, 다음과 같은 코드가 있다고 가정한다.int i = 0; while(i C언어의 컴파일러는 이 코드를 최적화 하기 위해 while문을 없애버리고 그냥 i에 10을 할당하는 최적화 방식을 가지고 있다.반복되는 구문과 같은 불필요한 연산을 최적화한다고 생각하면 된다. 일반적인 상황에서는 이러한 최적화가 큰 이득이 될 것이다.하지만 만약 저 구문이 하드웨어 레지스터에 값을 쓰는 프로그램이라던가, 필수적으로 실행했..
오늘은 Blind SQL Injection 공격에 대해서 알아 볼 것이다. 우선 전에 알아보았던 SQL Injection에 대해서 간단히 설명하자면 SQL 문으로 공격해서 한번에 정보를 얻어낼 수 있지만, Blind SQL Injection은 SQL 문으로 공격함으로써 서버에서 참과 거짓의 반응으로 정보를 얻어오는 기술이다. 예를 들어 이런 SQL을 보낸다 SELECT ascii(substring(table_name, 1, 1)) from infromation_schema.tables where table_schema=database() limit 1,1; 이 SQL은 테이블 이름을 알아낼 때 쓰인다. 아스키 숫자로 테이블 이름을 한글자씩 얻어와서 조합하는 것이다. 한마디로 노가다가 조금 필요..
오늘은 보안에 관련한 지식을 가져와 보았다. 먼저 SQL Injection이다. SQL Injection 공격은 웹해킹에서 가장 많이 쓰이는 공격 방법 중 하나이다. 한 줄로 설명하자면 SQL문을 조작하여 원하는 결과를 얻어내는 방식이다. 예를 들어서 설명하자면 보통 우리가 로그인 할 때 쓰는 입력창은 SQL문을 서버로 전송해 DB를 통해 값을 얻어올 것이다. 아래는 이해를 돕기위한 SQL 문이다. 필요한 입력 값은 ppusda, 1234이다. SELECT * from table where id = "ppusda" and pw = "1234"; 만약 로그인을 하기 위해서는 각 입력창에는 다음과 같이 ppusda와 1234를 입력해야만 한다. 정상적인 값을 넣지않으면 당연히 로그인이 되지 않을 것이다...
Iterator란 우리가 흔히 사용하는 그룹 데이터들(Set, List, Map)을 읽어오는 데 도움을 줄 수 있다. 그러면 사용법을 한 번 알아보도록 하자. Iterator 없이는 다음과 같이 코드를 짜고 읽어와야 한다. ArrayList list = new ArrayList(); list.add(1); list.add(5); list.add(9); for(int i = 0; i = 5){ System.out.println("5보다 크거나 같습니다."); }else{ System.out.println("5보다 작습니다."); } } 5보다 작습니다. 5보다 크거나 같습니다. 5보다 크거나 같습니다. 라는 결과를 얻을 수 있..