본문 바로가기
반응형

분류 전체보기313

[Java] 객체 직렬화(Serialization)와 역직렬화(Deserialization) 객체지향 언어인 Java는 프로그램의 모든 데이터들이 객체로 이루어져 있다고 봐도 무방하다. ​그렇다면 Java로 만든 프로그램의 데이터(객체)를 외부로 전송하려면 어떻게 해야 할까? 네트워크를 공부했다면 기본적으로 데이터인 객체 그 자체를 네트워크 상으로 전송할 수 없다는 것을 알 것이다. 이를 전송하기 위해선 객체 그 자체보단 조금 더 단순한 형태로 변환해야 할 것이다. ​ Java의 I/O 처리는 정수, 문자열, 바이트 단위의 처리만 지원하기 때문에 복잡한 객체의 내용을 저장/복원하거나 네트워크 상으로 전송하기 위해서는 객체의 내용을 I/O가 처리할 수 있는 형태로 변환해 줘야 한다. ​Java에서 말하는 객체 직렬화는 이처럼 Java의 객체를 외부로 저장/복원하거나 네트워크 상으로 전송할 수 있도.. 2021. 7. 14.
[Java] Call by Value vs Call by Reference 함수의 호출 방식에서 대표적인 방식은 Call by Value(값에 의한 호출)와 Call by Reference(참조에 의한 호출), 두 가지 방식이 존재한다. ​아마 바로 Java를 접하였으면 잘 모를 수도 있지만 C 계열의 언어를 접해봤다면 Call by Value와 Call by Reference를 한 번쯤은 들어봤을 것이다. ​우선 간단한 swap 함수(교환하는 함수)를 통해 Call by Value와 Call by Reference에 대해서 알아보자. #include using namespace std; void swapCallByValue(int A, int B) { int temp = A; A = B; B = temp; } void swapCallByReference(int* A, int*.. 2021. 7. 14.
[JAVA] 정적 바인딩(Static Binding) vs 동적 바인딩(Dynamic Binding) 이전 오버로딩(Overloading)과 오버라이딩(Overriding)을 공부할 때 오버로딩은 정적 바인딩되고 오버라이딩은 동적 바인딩된다고 하였다. 그렇다면 여기서 말하는 바인딩은 무엇일까? 이에 대해서 한번 공부 및 정리해 보려고 한다. ​ 바인딩(Binding)이란 프로그램에 사용된 구성 요소의 실제 값 또는 프로퍼티를 결정짓는 행위를 의미한다. 즉, 프로그램에서 사용되는 변수나 메서드 등 모든 것들이 결정되도록 연결해주는 것을 뜻한다. ​이러한 바인딩은 바인딩이 되는 시점에 따라 정적 바인딩과 동적 바인딩으로 구분할 수 있다. 그렇다면 왜 오버로딩은 정적 바인딩이며 오버라이딩은 동적 바인딩일까? ​오버로딩은 같은 이름의 메서드를 매개변수의 타입과 개수를 다르게 정의하여 다양한 메서드를 구현하는 것.. 2021. 7. 14.
[JAVA] Static 이란? 자바로 프로그래밍을 하다 보면 다음과 같은 Static 키워드를 접해봤을 것이다. public static void main(String[] args) { ... } 상당히 중요한 개념이기 때문에 Static에 대해서 한 번 공부 및 정리해보도록 하자 Static은 '정적', '고정된'이라는 의미를 가지며 Static 변수와 Static 메서드로 사용할 수 있다. 이를 합쳐서 정적 멤버라고 부른다. ​그렇다면 일반적인 멤버와 Static 키워드가 붙은 정적 멤버의 차이는 무엇일까? 일반적인 멤버는 자신들이 선언된 클래스의 객체를 통해서 접근할 수 있는 반면, 정적 멤버는 객체 없이 접근할 수 있다. (물론 객체를 통해서도 접근이 가능하다) ​간단한 예시로 Math 클래스의 변수나 메서드를 사용할 때 우리.. 2021. 7. 13.
[Java] 추상 클래스(Abstract Class) vs 인터페이스(Interface) 추상 클래스와 인터페이스는 비슷하면서도 다른 개념이다. 둘의 차이를 알고 있지만 이번 기회에 제대로 한 번 공부 및 정리해보려고 한다. ​ 먼저 추상 클래스이다. Java에서 클래스는 일반 클래스와 추상 클래스로 나뉘는데 추상 클래스는 추상 메서드(완전하게 구현되어 있지 않은 메서드)를 0개 이상 가지고 있는 클래스를 의미한다. 추상 클래스는 추상 메서드뿐만 아니라 멤버 변수와 일반 메서드를 가질 수 있다. 추상 클래스와 추상 메서드는 abstract 키워드를 사용하여 구현한다. ​추상 클래스는 메서드가 미완성되어 있기 때문에 객체를 생성할 수 없다. 오직 상속받은 자식 클래스에서만 객체를 생성할 수 있다. ​추상 클래스는 상속을 통해 추상 메서드를 자식 클래스가 재정의하도록 기능을 확장시키는 것이 목적.. 2021. 7. 13.
[Java] 제네릭(Generic) Java에서 컬렉션을 사용할 때 보통 다음과 같은 방식으로 '' 사이에 컬렉션에 넣을 변수의 타입을 선언할 것이다. List integer_List = new ArrayList(); List string_List = new ArrayList(); 이러한 문법을 제네릭이라고 부른다. 이번 기회에 한 번 제네릭에 대해서 공부 및 정리해보자. ​ 제네릭 프로그래밍(Generic Programming)이란 JDK 1.5부터 도입된 문법으로 일반적인 코드를 작성하고 이 코드를 다양한 타입의 객체에 대하여 재사용하는 객체 지향 기법이다. 간단하게 말해서 클래스를 정의할 때, 구체적인 타입을 적지 않고 변수 형태로 적어 놓는 것이다. ​그렇다면 먼저 제네릭을 왜 사용하는 것일까? 제네릭을 사용함으로써 잘못된 타입 변.. 2021. 7. 13.
[Java] String, StringBuilder, StringBuffer String, StringBuilder, StringBuffer 모두 Java에서 문자열을 관리하는 클래스이다. 알고리즘 문제에서 문자열 연산이 자주 발생하는 문제인 경우 String을 사용한다면 시간 초과가 발생하는 경우가 상당히 많을 것이다. 이를 해결하기 위해선 String이 아닌 StringBuilder나 StringBuffer 클래스를 사용하여 문자열 연산을 처리해야 한다. ​이들의 차이에 대해서 한번 정리해보도록 하자. 우선 문자열 연산시 String은 시간 초과가 나고 StringBuilder와 StringBuffer는 시간 초과가 나지 않는 차이점을 먼저 짚고 넘어가 보자. ​String으로 선언한 객체는 불변(immutable)하는 객체이다. 이게 무슨 뜻이냐면 new 연산을 통해 Str.. 2021. 7. 13.
[Java] 객체 지향 프로그래밍(Object-Oriented Programming) Java를 공부하면서 Java는 객체 지향 언어라고 배웠다. Java는 클래스와 객체를 기반으로 프로그래밍을 하기 때문에 객체 지향 프로그래밍이라고 불리는구나 정도로만 생각했지만 Java를 주 언어로 삼은 김에 객체 지향 프로그래밍에 대해서 공부 및 정리해보려고 한다. ​ 객체 지향 프로그래밍(Object-Oriented Programming)은 프로그램에서 필요한 데이터들을 추상화시켜 상태와 행위를 가진 객체로 나누고 이 객체들 간의 상호작용을 통해 프로그래밍하는 방법을 뜻한다. ​객체 지향 프로그래밍을 알아보기 전에 가장 중요한 클래스와 객체에 대해서 이해하고 넘어가자. ​클래스는 프로그램에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 특정 객체를 생성하기 위해 변수와 메서드를 정의하는 일종의 틀.. 2021. 7. 12.
[Java] 오버라이딩(Overriding) vs 오버로딩(Overloading) Java를 배웠다면 위의 두 용어를 한 번쯤은 들어봤을 것이다. 두 용어 모두 발음도 비슷하고 개념도 비슷해 보이지만 전혀 다른 개념이다. 당연한 소리지만 다른 개념이니 구분하여 사용하고 있지 않을까? ​솔직히 나도 오버라이딩과 오버로딩이 헷갈리기 때문에 이번 기회에 한번 개념을 공부해보고 정리해 보려고 한다. ​ 먼저 오버라이딩(Overriding)이다. 오버라이딩은 상속 관계에 있는 클래스 간에 같은 이름을 재정의하는 기술이다. 자바의 경우 오버라이딩 시 동적 바인딩 된다. 그렇다면 한번 코드를 통해 이해해 보자. 다음과 같이 이름과 나이를 가지는 Person 클래스와 학교를 가지며 Person 클래스를 상속받는 Student 클래스가 있다고 하자. class Person { String name; .. 2021. 7. 12.
반응형