java

    [Java] StringBuffer vs StringBuilder

    기존 String클래스는 immutable클래스입니다. 하지만 StringBuffer클래스나 StringBuilder클래스의 경우 변경이 가능한 mutable클래스 입니다. 두 클래스에서 가장 큰 차이점은 멀티쓰레드 환경에서 안전한지 안전하지 않는지로 구분할 수 있습니다. StringBuffer StringBuffer는 Buffer를 가지고 있는 변경 가능한 String 클래스입니다. StringBuffer sbSize = new StringBuffer(10); StringBuffer sbString = new StringBuffer("Hello"); 생성자 @HotSpotIntrinsicCandidate public StringBuffer() { super(16); } @HotSpotIntrinsicC..

    [Java] String

    String 문자열을 저장하기위해 사용되는 클래스입니다. immutable(불변) 클래스라고 불리지만, 문자열 끼리의 연산이 가능합니다. 무슨 말이냐? String str = "Hello"; String str2 = new String("world"); str += str2; System.out.println(str); 문자열 리터럴 첫 번째 줄의 값이 바로 리터럴로 적용됩니다. 이러한 문자열 리터럴의 경우 컴파일 시 클래스 파일에 저장됩니다. 이때 저장되는 공간이 따로 존재하며 이를 Constant Pool이라고 합니다. Constant Pool에는 중복되는 문자열이 존재하지 않는다. String str = "Hello"; String comp = "Hello"; System.out.println(st..

    [Java] 깊은 복사 vs 얕은 복사

    복사 코드를 작성하다 보면, 똑같은 값을 가지게 하고싶을 때가 있습니다. 따라서 아래와 같이 사용합니다 Integer a = 3; Integer b = a; a = 5; 모든 값이 이렇게 잘 복사되면 좋겠지만 배열이나 객체의 경우 다른 결과가 나옵니다. 배열의 복사 List origin = new ArrayList(List.of(1,2,3)); List copy = origin; origin.set(0,10); copy.add(0); 배열은 값을 복사하여 가져와도 두 값 전부 변경되는 것을 볼 수 있습니다. Copy origin = new Copy(5); Copy copy = origin; origin.a = 10; /** * 임의 클래스 */ class Copy { int a; Copy(int a) {..

    예외 처리

    Error 에러란 프로그램이 동작 중 어떤 요인으로 인해 동작을 중지하거나 비정상적인 동작을 하는 것을 말합니다. 이때 에러에는 크게 2가지가 있는데, 컴파일 에러와 런타임 에러로 나눌 수 있습니다. 컴파일 에러 : 컴파일 시에 발생하는 에러 런타임 에러 : 프로그램이 실행하는 도중에 발생하는 에러 Compile Time Error JVM을 통해 .class 파일로 변환되는 과정이다. .java파일에 대해 잘못된 문법, 오타, 자료형 문제 등의 기본적인 검사를 수행한다. Run Time Error 대표적인 예 무한루프 Null 에러 0으로 나누는 경우 잘못 접근한 경우 즉, 프로그램을 잘못 설계하면서 생기는 에러가 Run time error이다. 프로그램을 짜고 정상 동작을 확인하면서 생기는 에러는 대부..

    인터페이스

    인터페이스란? 인터페이스란 추상클래스보다 추상적인 클래스라고 생각할 수 있다. 인터페이스는 오직 클래스 메서드와 클래스 변수만 가질 수 있다. 따라서 전부 미완성인 메서드들로만 구성되어 있습니다. 인터페이스 사용법 기본 사용법 interface InterfaceClass { /** * 모든 인터페이스의 변수는 public static final이 기본이다. */ public static final int VALUE1 = 5; public final int VALUE2 = 5; public static int VALUE3 = 5; public int VALUE4 = 5; int VALUE5 = 5; /** * 인터페이스 메소드는 public abstract가 기본이다. */ public abstract v..

    상속 - 추상클래스

    추상클래스 클래스에는 추상 클래스라는 것이 있습니다. 추상클래스는 하나의 미완성 클래스입니다. 미완성 클래스 ? 완성할 필요가 있는 클래스입니다. 한마디로 일반 클래스는 '내가 가지고 있는걸 기본으로 추가해서 너가 써' 입니다. 그러나 추상클래스는 '내가 가지고 있는걸 기본으로 줄께 근데, 꼭 필요한게 있으니까 규격에만 맞게 너가 작성하고 반드시 추가해' 입니다. 즉 추상 클래스는 자식 클래스들에게 하나의 길을 알려주는 것과 같습니다. 또한 추상클래스는 추상 메서드를 가지고 있어야합니다. 추상 클래스 작성법 abstract class AbastractClass { } 여기서 꼭 추상 클래스에 추상 메서드가 없어도 됩니다. 하지만 추상 메서드가 존재한다면 추상 클래스여야만 합니다. 이것을 제외하면 일반 클..

    상속 - 다형성

    다형성 ( Polymorphism ) 하나의 작업을 다양한 형태를 가질 수 있는 형태를 의미합니다. 자바에서는 크게 2가지의 다형성을 제공합니다. 하나는 compile-time 다형성과 runtime 다형성이 있습니다. 이러한 다형성은 부모 클래스를 자식 클래스가 상속한 상태에서, 만약 부모클래스의 참조 변수가 자식 클래스의 인스턴스를 참조할 때 발생합니다. Compile Time 다형성 Java에서는 static method를 오버로딩하는 것을 통해 Compile Time 다형성을 제공할 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class Main { public static void main(String[] args) { Child..

    JAVA - 제어자

    제어자 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여 Static 공통적인 느낌이 강하다 멤버 변수: 모든 인스턴스에 공통적으로 사용되는 클래스 변수, 인스턴스 생성하지 않고도 사용 가능, 클래스가 메모리에 로드될 때 생성 메서드: 인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 된다. static메서드 내에서는 인스턴스 변수가 사용 불가능하다. 왜냐하면 메모리에 로드가 되지 않은 상태에서 사용은 불가능하기 때문이다. 초기화 블럭: 클래스 변수를 초기화할 때 사용 Fianl 변경될 수 없다는 느낌이 강하다 클래스: 변경될 수 없는 클래스, 상속 불가능하게 만든다. 메서드: 변경될 수 없는 메서드, 오버라이딩 불가능 멤버변수, 지역변수: 변경할 수 없는 변수, 상수..

    Google Java Style Guide

    우테코 프리코스를 진행하면서 기왕이면 스타일 방식까지 제대로 해보고 싶어서 정리한다. 다른 Style Guide Git Commit Style Guide 1. 소개 Java Programming 언어로 작성된 소스 코드에 대한 Google 표준 코딩입니다. 들어가기 전 앞으로 나오는 Class : 기본 class, Enum class, interface, @interface를 모두 포함한 용어이다. 클래스의 Member : Nested class, field, method, 생성자를 표괄한 내용 comment : 주석 2. 소스파일의 기본 1. 파일이름 해당 파일의 최상위 클래스의 이름과 .java 확장자로 구성된다. 2. 파일 인코딩 UTF-8 3. 특수 문자 3-1. 공백문자 : ASCII horiz..

    JUnit5

    JUnit이란? Java 단위 테스트 프레임워크이다. 테스트를 할때 한번에 많은 것을 몰아서 테스트하게 된다면 수행 과정도 복잡하고 오류 발생시 원인을 찾기도 힘들어진다. 따라서 테스트를 가능한 작은 단위로 쪼개서 확인하는 것을 단위 테스트라 한다. 다른 테스트 프레임 워크 다른 언어에도 여러 단위 테스트 프레임 워크가 있다. 이를 xUnit이라하며 켄트 벡이라는 분이 만드셨다. CppUnit, NUnit, unitest 왜 단위 테스트를 할까? 실제로 저는 Java를 최근에 접하고 Spring을 아예 모르는 상태에서 막연히 프로젝트를 하고 싶은 생각에 하게되었습니다. 프로젝트를 진행하는 도중 제가 실행한 값에 대해 제대로 동작하는지 확인을 하고자 하면 항상 화면에 보여주기 위해 데이터를 sysout으로..