Language/Java

    [Java] 추상 클래스 VS 인터페이스

    추상 클래스 (Abstract Class) 추상 클래스는 일반 클래스와 비교해서 크게 다른 점은 없다. 단지 추상 클래스에 추상 메서드를 작성하여 상속받는 자식 클래스에서 메서드를 완성하도록 유도하는 클래스이다. 그래서 추상 클래스를 '미완성 클래스'라고 한다. 추상 클래스를 선언하는 방법은 class 앞에 abstract라는 키워드를 붙여주면 된다. Ex) public abstract class abstractClassEx 인터페이스 (Interface) 인터페이스는 일반 클래스와 비슷한 구조를 보여준다. 추상 클래스는 '미완성 설계도'라고 한다면 인터페이스는 '기본 설계도'라고 할 수 있다. 인터페이스를 선언하는 방법은 class 대신 interface를 작성해주면 된다. Ex) public inte..

    [Java] static 키워드에 대해 알아보자 !

    Java는 어떻게 동작하지?( + 메모리 영역) Java란? Java는 프로그램을 만드는 프로그래밍 언어 중 하나이자 대표적인 객체지향 언어이다. 운영체제와 상관없이 JVM(Java Virtual Machine)만 있으면 코드를 실행할 수 있다. 가비지 컬렉션이 존재하 gwamssoju.tistory.com 우리가 코드를 짜면서 사용하는 static에 대해 알아보려고 한다. 먼저 메모리 구조에 대해 아는 것이 static을 이해하는 데 도움이 될 것이다. 그러니 메모리 구조를 간략하게 설명하고서 static에 대해 알아보도록 하자! static의 의미 자바의 메모리 구조에는 Method Area와 Heap Area(그밖에 더 있음)가 존재한다. 각각의 역할을 아래와 같다. 우리가 만든 클래스는 Metho..

    [Java] 오버로딩 VS 오버라이딩

    자바를 처음 접했을 때, 오버로딩과 오버라이딩을 구분하기가 매우 힘들었다. 그래서 혹시 필자와 같은 어려움을 가진 분들에게 조금이나마 도움이 됐으면 하는 마음으로 포스팅을 진행했다. 오버로딩(Overloading) 오버 로딩은 같은 메서드지만 매개 변수만 다르게 한다면 얼마든지 다른 기능을 하도록 할 수 있다. 조건 메소드의 이름은 같아야 한다. 매개 변수의 개수가 달라야한다. 만약 매개 변수의 개수가 같다면 데이터 타입이 달라야한다. 리턴형은 같아도 되고 달라도 된다. 오버로딩의 예를 예제를 보면 '아 ~ 이거구나'할 것이다. 예제 public class OverloadingEx { public static void main(String[] args) { Practice practice = new Pr..

    [Java]스트림(stream)(3/3)

    최종 연산 - forEach() Stream stream = Stream.of("하나","둘","셋","넷"); stream.forEach(System.out::println); - 조건 검사 findFirst(), findAny() IntStream intStream1 = IntStream.of(9,7,8,6,5,3,4); IntStream intStream2 = IntStream.of(9,7,8,6,5,3,4); OptionalInt result1 = intStream1.sorted().findFirst(); // 정렬 후 첫 번째 요소 반환 System.out.println(result1.getAsInt()); // 3 OptionalInt result2 = intStream2.sorted().fi..

    [Java]스트림(stream)(2/3)

    ▷ 스트림의 연산 중간 연산 : 연산 결과가 스트림인 연산. 스트림에 연속해서 중간 연산할 수 있다. 최종 연산 : 연산 결과가 스트림이 아닌 연산. 스트림의 요소를 소모하므로 단 한 번만 가능하다. 중간 연산 1. 스트림 자르기 - skip(), limit() 2. 스트림의 요소 걸러내기 - filter(), distinct() 3. 정렬 - sorted() 4. 변환 - map(), flatMap() 5. 조회 - peek() - 스트림 자르기 - skip(), limit() * skip()은 요소를 건너뛰고, limit()는 요소를 제한한다. IntStream intStream = IntStream.rangeClosed(1,10); intStream.skip(3).limit(5).forEach(Sy..

    [Java]스트림(stream)(1/3)

    많은 수의 데이터를 다룰 때, 컬렉션이나 배열에 데이터를 담고 원하는 결과를 얻기 위해 for문과 Iterator를 이용해서 코드를 작성해왔다. 이런 방법은 코드도 길고 알아보기도 어렵다. 또한 재사용성도 떨어진다. 이러한 문제점들을 해결하기 위해 만들어진 '스트림'에 대해 알아보자! ▷ 스트림의 특징 ○ 스트림은 데이터 소스를 변경하지 않는다. → 스트림은 데이터 소스로부터 데이터를 읽기만 할 뿐, 데이터 소스를 변경하지 않는다는 차이가 있다. 필요하다면 정렬된 결과를 컬렉션이나 배열에 담아서 반환할 수 있다. ○ 스트림은 일회용이다. → 스트림은 Iterator처럼 일회용이다. 그렇기 때문에 한 번 사용하면 다시 사용할 수 없다. 필요하다면 스트림을 재생성해야 한다. ○ 스트림은 작업을 내부 반복으로..

    [Java] 람다식

    람다식이란? 메서드를 하나의 식으로 표현한 것이다. 람다식은 함수를 간략하고 명확하게 표현하게 해준다. 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로, '익명 함수'라고도 한다. 람다식 작성하기 // 두 값 중에서 큰 값을 반환하는 메서드 int max(int a, int b){ return a > b ? a : b; } // 아래와 같이 표현할 수 있다. (int a, int b){ return a > b ? a : b; } 반환값이 있는 메서드의 경우, return문 대신 식으로 대신 할 수 있다. 식의 연산 결과가 자동적으로 반환값이 된다. 이때는 문장이 아닌 식이므로 끝에 ';'을 붙이지 않는다. (int a, int b) -> {return a > b ? a : b;} -----> (i..

    예외처리(Exception Handling)

    예외처리(Exception Handling)

    프로그램이 어떤 원인에 의해 오작동하거나 비정상적으로 종료되는 경우가 있다. 이 결과를 초래하는 원인을 프로그램 에러 또는 오류라고 한다. 이를 발생 시점에 따라 '컴파일 에러'와 '런타임 에러'로 나눌 수 있다. 컴파일 에러 : 컴파일할 때 발생하는 에러. 런타임 에러 : 실행 시에 발생하는 에러. 컴파일러가 .java에 대해 오류가 없다면 .class파일을 생성하고 생성된 .class파일을 실행할 수 있게 되는 것이다. 하지만 컴파일을 마쳤다고 해서 실행 시에도 에러가 발생하지 않는 것은 아니다. 컴파일러는 실행 시 발생할 수 있는 잠재적인 오류까지 검사할 수 없다. 그래서 이런 런타임 에러를 방지하기 위해 모든 경우의 수를 고려하에 대비하는 것이 필요하다. 자바에서 실행 시 발생할 수 있는 오류를 ..

    객체 지향 프로그래밍에 대해 묻는다면 ?

    이전 포스팅에서 Java의 동작 순서에 포스팅을 하면서 Java의 대표적인 특징인 객체 지향 언어라는 점을 생각해보게 되었다. 과연 나는 누군가가 '객체 지향 언어가 뭐죠?'라는 묻는 질문에 어떻게 대답을 해야 할지 고민해봤다. 명확하게 이런 것이라고 말은 못 해도 대충 두리뭉실하게 설명은 할 수 있을 것 같다. 하지만 면접장에서는 다르다. 면접관의 질문에 명확하게 대답을 해야 한다라고 생각하는 바 포스팅하게 되었다. 서론이 너무 길었으니 바로 본론으로 들어가자! 객체 지향 프로그래밍(OOP : Object Oriented Programming) 객체 지향 프로그래밍이라는 숲을 보기 전에 객체라는 나무를 먼저 보도록 하자. 객체는 클래스(class)가 실제로 구현된 인스턴스(instance)를 말한다. ..

    Java는 어떻게 동작하지?( + 메모리 영역)

    Java는 어떻게 동작하지?( + 메모리 영역)

    Java란? Java는 프로그램을 만드는 프로그래밍 언어 중 하나이자 대표적인 객체지향 언어이다. 운영체제와 상관없이 JVM(Java Virtual Machine)만 있으면 코드를 실행할 수 있다. 가비지 컬렉션이 존재하기 때문에 사용자가 일일이 메모리를 관리해주지 않아도 자동으로 사용하지 않는 메모리를 해체해준다. JVM(Java Virtual Machine)이란? JVM은 자바의 Byte 코드를 OS에 맞게 실행해주는 역할을 수행한다.( 그래서 CPU나 OS에 상관없이 실행할 수 있게 해 준다.) 우리가 Java로 코드를 작성하면 이건 인간끼리만 알아볼 수 있지 컴퓨터는 하나도 읽을 수 없다. 그래서 Java 코드를 컴퓨터가 읽을 수 있게 기계어로 변환하는 작업을 '컴파일'이라고 한다. Java 동작..