본문 바로가기

Language/Java12

직렬화(Serialization)와 역직렬화(Deserialization) 클래스를 만들 때, 해당 특정 클래스에서 사용될 객체를 만들 수 있으며 프로그램을 실행 / 종료하면 가비지 수집기 스레드를 통해 객체가 자체적으로 수거됩니다. 객체를 다시만들지 않고 해당 클래스를 호출하려는 경우 어떻게 될까요?? 이럴때 데이터를 바이트 스트림으로 변환하여 직렬화 개념을 사용합니다. 객체 직렬화는 객체의 상태를 바이트 스트림으로 변환하는데 사용되는 프로세스로, 디스크 / 파일로 유지되거나 네트워크 통신을 통해 실행중인 다른 Java 가상머신으로 전송될 수 있습니다. 역직렬화란 이러한 바이트 스트림을 다시 객체형태로 변환하는 작업을 말합니다. 생성된 바이트는 플랫폼에 독립적입니다. 그래서 한 플랫폼에서 직렬화된 객체는 다른 플랫폼에서 역직렬화를 통해 데이터를 받아올 수 있습니다. 자바클래스.. 2022. 4. 18.
call by value vs call by reference 프로그래밍 언어들의 메소드 매개변수 호출 방식에는 여러 가지가 있으며 호출 방식은 언어마다 다르게 되어 있습니다. 대표적으로 C++ 은 call by refernce를 사용합니다. (매개변수를 넘겨주는 행위이기 때문에 pass by value, pass by reference라고도 합니다) call by value : 함수의 인자를 전달할 때 '값을 전달하는 방식' call by reference : '주소를 전달하는 방식' Java 는 call by value 방식! 더보기 Call by Value, Call by Reference 방식은 굉장히 헷갈리는 부분입니다. 하지만 자바가 탄생하던 시기의 C, C++와 비교하여 어째서 Call by Value 방식을 채택하였는지 감히 예상해 보자면 두 언어에 .. 2022. 4. 17.
자바 Generic Generic이란? 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있는 기술에 중점을 두어 재사용성을 높일 수 있는 프로그래밍 방식 파라미터 타입이나 리턴 타입에 대한 정의를 외부로 미룬다. 타입에 대해 유연성과 안정성을 확보한다. 타입 캐스팅을 하지 않기 때문에 성능상으로도 이점을 얻을 수 있다. 런타임 환경에 아무런 영향이 없는 컴파일 시점의 전처리 기술이다. Generic의 특징 클래스 혹은 메소드에 선언 할 수 있다. 동시에 여러 타입을 선언할 수 있다. 와일드카드를 이용하여 타입에 대하여 유연한 처리를 가능케 한다. 제네릭 선언 및 정의서에 타입의 상속관계를 지정할 수 있다. 출처 https://jehuipark.github.io/java/java-generic .. 2022. 4. 17.
상속(extends) vs 구현(implements) 상속(Extends) 사실 extends가 상속의 대표적인 형태다. 부모의 메소드를 그대로 사용할 수 있으며 오버라이딩 할 필요 없이 부모에 구현되있는 것을 직접 사용 가능하다. class Vehicle { protected int speed = 3; public int getSpeed(){ return speed; } public void setSpeed(int speed){ this.speed = speed; } } class Car extends Vehicle{ public void printspd(){ System.out.println(speed); } } public class ExtendsSample { public static main (String[] args){ Car A = new Ca.. 2022. 4. 17.
Interface vs Abstract Class 주제 내용을 알기전에 is-a 개념과 has-a 개념을 알고갑시다. 객체 지향적 관점 Is-a vs Has-a is-a 말 그대로 'A는 B이다'일 때의 '~이다'와 같습니다. 더보기 is-a는 추상화(형식이나 클래스와 같은)들 사이의 포함 관계를 의미하며, 한 클래스 A가 다른 클래스 B의 서브클래스(파생클래스)임을 이야기합니다. 다른 말로, 타입 A는 타입 B의 명세(specification)를 암시한다는 점에서 타입 B의 서브타입이라고도 할 수 있습니다. is-a 관계는 타입 또는 클래스 간의 has-a 관계와는 대조됩니다. has-a 및 is-a 관계들 간의 혼동은 실세계 관계 모델에 대한 설계에 있어 자주 발견되는 에러입니다. is-a 관계는 또한 객체 또는 타입 간의 instance-of 관계.. 2022. 4. 17.
객체지향(OOP)의 특징 OOP란? OOP (Object-Oriented Programming)이란 객체 지향적인 프로그래밍. 즉, C언어 같은 절차 지향적인 프로그래밍이 아닌 객체의 관점에서 프로그래밍을 한다는 것이다. OOP는 객체를 기준으로 코드를 나누어 구현한다. 자바의 경우 그 구성 부분 단위가 클래스이다. 자세히 말하자면 클래스는 설계도고 직접 일을 하는 구현체는 인스턴스다. (객체와 인스턴스는 또 자세히 말하면 다른 의미로 사용되기도 하기 때문에 여기서는 이렇게 말하겠다.) 요약하자면 OOP는 객체의 관점에서 프로그래밍 하는 것을 의미한다. C언어는 절차 지향 프로그래밍인데, 절차 지향 프로그래밍은 프로세스가 함수 단위로 순서대로 진행되는 것을 말한다. OOP는 절차지향에 비해서 사람의 사고방식과 더 가깝다. OOP.. 2022. 4. 17.