Java
-
추상 클래스 vs 인터페이스 :: 마이구미Java 2017. 11. 25. 17:17
이 글은 Java 에서 사용되는 추상클래스와 인터페이스의 차이점을 다룬다.Java 를 사용하지 않더라도, 참고하면 도움이 될 것이다. Java 에서 추상 클래스와 인터페이스를 많이 헷갈려한다.그 이유는 겉으로 보기에는 똑같아 보이기 때문이다.하지만 엄연히 다른 목적을 가지고 있다.지금부터 차근차근 궁금증을 풀어보자. 인터페이스는 무엇인가? 인터페이스는 쉽게 말하면 껍데기라고 말할 수 있고, 설계도 또는 명세라고 생각하면 된다.모든 메소드가 추상 메소드이고, 일반 변수를 가질 수 없다. (추상 클래스와 비교해보자)그 의미는 인터페이스를 구현한 클래스는 모든 메소드를 강제적으로 구현해야한다.선언 시 interface 키워드를 사용한다. interface Vehicle { abstract void run ()..
-
정적 메소드는 언제 써야하는가? :: 마이구미Java 2017. 11. 17. 21:54
이 글은 정적 메소드(static method) 에 대해 다룬다.코드는 Java를 통해 진행하지만, 다른 언어라도 상관없이 볼 수 있는 글이다.정적 메소드에 대한 안 좋은 말들이 많다.편중된 글이 아닌, 단순히 정적 메소드에 대한 이해를 다뤄볼 예정이다.참고 링크 - https://stackoverflow.com/questions/2671496/java-when-to-use-static-methods 정적 메소드를 언제 써야하는지에 대한 의문이 가장 많을거라 생각한다.그에 앞서, 다음의 순서를 통해 알아본다면 훨씬 이해에 도움이 될 것이다. 정적 메소드(static Method)란 무엇인가? 정적 메소드는 2가지로 간략히 말할 수 있다. 클래스의 인스턴스 없이 호출이 가능하며, 인스턴스에서는 호출 할 수..
-
Java EOF 처리 :: 마이구미Java 2017. 10. 22. 15:11
이 글은 Java에서 EOF(End of File) 처리에 대해 다뤄본다.알고리즘 문제 풀이에 대한 기준임을 참고바란다.Java에서 사용되는 입력 클래스에 대한 기본 지식이 필요하다.Java 입력 클래스 - http://mygumi.tistory.com/78 컴퓨팅에서, 파일 끝(End of File, EOF[1])는 데이터 소스로부터 더 이상 읽을 수 있는 데이터가 없음을 나타낸다. 알고리즘 문제를 접해본 적이 있다면, 입력 부분의 기준이 없는 문제를 접해본 적이 있을 것이다.예를 들어, 다음과 같은 문제가 된다. https://www.acmicpc.net/problem/5639 입력 클래스는 2가지인 Scanner, BufferedReader로 구성된다.각각의 EOF 처리 방법은 다음과 같다. Sca..
-
Java 객체 지향 프로그래밍 개념 :: 마이구미Java 2017. 2. 14. 21:54
이번 글은 원본 글을 번역하여 객체 지향 프로그래밍(OOP) 에 대한 기본 개념을 다뤄본다. 예제들과 함께 JAVA의 OOP의 개념에 대해 이해하는 데 도움이 될 것이다.OOP의 특징들에 대해 알아보자. OOP의 작성은 클래스를 만들고, 생성된 클래스를 객체로 만들고, 이 객체를 사용하여 독립형 실행 프로그램인 응용 프로그램을 만드는 것이 포함된다. 클래스는 객체의 데이터 필드와 메소드가 무엇인지 정의하는 template, blueprint, contract 를 의미한다.객체는 클래스의 인스턴스이고, 클래스는 많은 수의 인스턴스를 생성할 수 있다. 여기서 클래스, 객체, 인스턴스를 짚고 가자. // Person 클래스 class Person {// ......} Person p; // Person 타입의..
-
JVM 어떻게 동작하는가? :: 마이구미Java 2017. 2. 2. 23:30
이번 글은 JVM(Java Virtual Machine)의 구조와 동작에 대해 다뤄본다.원본 글을 번역하였다. JVM은 자바 가상 머신으로 불리는 C언어와 가장 큰 차이점이기에 익히 들어보았으리라 생각한다. JVM이란 무엇인가?자바 프로그램을 실행시키기 위해 런타임(실행시간) 엔진의 역할을 한다.실제로 자바 코드에서 main 메소드를 호출하며, JRE(Java Run Environment)의 일부이다. 자바 프로그램은 WORA(Write Once Run Anywhere)로 표현한다."한번 쓰고 어디에서든 실행한다" 라는 의미를 가진다.아무 제약없이 어디서든 개발이 가능한 것을 강조하기 위함이다.간단한 예로 일반적인 프로그램은 os가 다르면 호환되지 않는다.하지만 자바는 JVM을 통해 호환이 가능하다. 출..
-
atomic vs volatile vs synchronized :: 마이구미Java 2017. 1. 29. 21:28
이번 글은 java에서의 동기화 방법에 대해 다뤄본다.글에 앞서 관련 글을 읽어오길 바란다. Atomic Operation private int counter; public int getNextUniqueIndex() { return counter++; } 위 코드는 관련 글에서도 다뤘다.메모리에서 counter 변수를 읽은 후 값을 증가시키고 다시 메모리에 저장하는 작업 3가지로 분리된다.싱글 스레드에서는 문제가 되지 않지만, 멀티 스레드에서는 문제가 된다. (위 관련 글에서 자세히 볼 수 있다)문제로는 경쟁 상태와 변수의 가시성 문제가 발생한다.* 경쟁 상태(race condition) - 여러 스레드 같은 시점 변수를 읽는 상태.* 변수의 가시성(visibility) - 변수들이 사용될 수 있는 영..
-
StringBuilder vs System.out.println :: 마이구미Java 2016. 12. 28. 20:16
이번 글의 제목은 "StringBuilder vs System.out.println" 이다.글의 목적은 알고리즘 문제들의 시간을 줄이는 것이다.그렇다면 어떻게 줄일 수 있는지 천천히 살펴보자. 대부분 알고 있듯이 System.out.println은 출력을 하기 위해 사용하고 있다. int a = 123;System.out.println(a);// 123System.out.println("Hello World!");// Hello World! 간단히 보면 표준 입출력 기능을 제공해준다고 봐도 된다.그렇다면 조금 더 깊게 System.out.println을 내부적으로 어떻게 되어있는지 보자. public void println(String x) { synchronized (this) { print(x); n..
-
Array.length 시간 복잡도 :: 마이구미Java 2016. 12. 26. 20:30
이번 글은 length에 대한 시간 복잡도를 알아보겠다.제목을 어떻게 해야할지.. 참 고민했다.무엇을 다룰 것인지는 소스를 통해 보면 확실히 이해할 것이다. int[] array = new int[10];// array.length -> 10 String s = "ABCD";// s.length() -> 4 위와 같이 배열이나 문자열의 경우 크기(길이)를 가져올 수 있다.가져온 크기를 통해 반복문의 루프 횟수를 정할 때 많이 이용한다. // 1번for(int i=0;i