본문 바로가기

Computer Science/Java

(8)
Call By Value vs Call By Reference Call By Value vs Call By Reference 메소드의 인자 호출 방식에는 Call By Value(값에 의한 호출)와 Casll By Reference(참조에 의한 호출) 두 가지 방식이 있습니다. Call By Value 메소드 호출 시에 사용되는 인자의 메모리에 저장되어 있는 값을 복사하여 보내는 방식입니다. 메소드 인자로 byte, char, short, int, long, float, double, boolean 등 자바 기본 타입(Primitive Type)이 전달되는 경우에는 인자의 값(상수 값)이 복사되어 전달됩니다. 메소드 인자로 객체에 대한 레퍼런스(Reference Type)가 전달되는 경우에는 객체 자체가 복사되어 전달되는 것이 아니라, 그 객체를 가리키는 레퍼런스 ..
JAVA vs C++ JAVA vs C++ Java와 C++은 문법적으로 상당히 유사하며 같은 객체 지향 언어라는 점에서 공통점이 있습니다. 하지만, 차이점도 극명하게 존재합니다. Java와 C++의 차이점 상속 C++은 다중 상속을 지원하지만 Java는 지원하지 않습니다. 다중 상속을 지원하는 언어에서는 다이아몬드 문제(Diamond Problem)이 발생하는데, C++에서는 다이아몬드 문제를 회피할 수 있는 기능을 제공합니다. 다이아몬드 문제(Diamond Problem) 다중 상속 시, 어느 클래스의 메소드를 상속받아야 하는지 모호한 문제로, 둘 이상의 부모에 같은 메소드가 정의되어 있을 경우, 어느 것을 상속받을지 모호하게 됩니다. 인터페이스는 기능에 대한 선언만 해두면 되기 때문에, 다중 상속을 하더라도 충돌할 여지..
추상 클래스와 인터페이스 추상 클래스 클래스는 일반 클래스(concrete class)와 추상 클래스로 나뉘는데 추상 클래스는 클래스 구현부 내부에 추상 메서드가 하나 이상 포함되거나 abstract로 정의된 경우를 말합니다. 클래스를 설계도라고 한다면 추상 클래스는 미완성 설계도라고 할 수 있습니다. 미완성 설계도란 말 그대로 덜 만들어진 설계도입니다. 클래스가 미완성이라는 것은 단지 미완성 메서드(추상 메서드)를 포함하고 있다는 의미입니다. 미완성 설계도만으로 온전한 상품을 만들 수 없듯이 추상 클래스만으로 객체를 생성할 수 없습니다. 추상 클래스는 상속을 통해 자식 클래스에 의해서만 완성될 수 있습니다. (추상 클래스는 추상 메서드를 선언하여 상속을 통해 자식 클래스에서 완성하도록 유도하는 클래스입니다.) 추상 클래스 자체..
Java 메모리 - (3) Garbage Collector Garbage Collector(GC) 메모리 관리 방법 중 하나로 시스템에서 더이상 사용하지 않는 동적 할당된 메모리 블럭을 찾아 자동으로 다시 사용 가능한 자원으로 회수하는 것으로 시스템에서 가비지 컬렉션을 수행하는 부분을 가비지 컬렉터라 부릅니다. C언어의 경우, 프로그래머가 메모리를 할당한 뒤 수동으로 해제까지 직접 해줘야 합니다. 그래서 메모리를 할당해놓고 필요없어진 뒤에도 해제를 안하는 일 등이 생겨서 메모리 누수가 생기거나 거꾸로 해제했던 메모리를 다시 사용하는 실수가 생기곤 합니다. 이러한 문제들을 해결하기 위해 생겨난 것이 가비지 컬렉션이며, 가비지 컬렉션 기능을 채택한 언어의 경우에는 가비지 컬렉터가 자동으로 프로그램이 실행되며 생기는 쓸모 없는 메모리들을 알아서 수집하고 관리해줍니다...
Java 메모리 - (2) JVM JVM(Java Virtual Machine) JVM을 이해하기 위해서는 JVM, JRE, JDK, Java를 구분해서 알아야 할 필요가 있습니다. JVM (Java Virtual Machine) Java Byte Code를 OS에 맞게 해석해주는 역할을 합니다. Java Compiler는 .java 파일을 .class 라는 Java Byte Code로 변환시켜 줍니다. Byte Code는 기계어가 아니기 때문에 OS에서 바로 실행되지 않습니다. 이때, JVM은 OS가 Byte Code를 이해할 수 있도록 해석해줍니다. 이러한 JVM의 해석을 거치기 때문에 C언어 같은 네이티브 언어에 비해 속도가 느렸지만, JIT(Just In Time) 컴파일러를 구현해 이점을 극복했습니다. 따라서, Byte Code..
Java 메모리 - (1) Java 메모리 구조 Java 메모리 구조 Java 애플리케이션을 개발할 때, 메모리를 잘 아는 것은 중요합니다. 메모리에 어떻게 코드가 적재되는지 이해해야 코드를 최적화할 수 있고 코드 에러를 피할 수 있습니다. 메모리 관리가 잘 되지 않는 프로그램은 서비스 속도 저하에서부터 심하게는 서버 불능 상태에 이르기도 합니다. 한정된 자원에서 효율적으로 메모리를 사용하여 성능 향상도 가능합니다. Method Area(Static Area) JVM이 구동될 때 생성되며 모든 스레드가 공유하는 영역 JVM 구동 중 사용될 클래스 파일을 읽고 클래스 별로 runtime constant pool(런타임 상수 풀), field data(필드 데이터), method data(메서드 데이터), constructor(생성자) 등을 저장 필드 정..
객체지향 프로그래밍(OOP) 객체지향 VS 절차지향 절차지향(Procedural Programming)이란? 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시 되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법입니다. 대표적인 절차지향 언어에는 C언어가 있습니다. 절차지향 프로그래밍은 컴퓨터의 작업 처리 방식과 유사하기 때문에 객체지향 언어를 사용하는 것에 비해 더 빨리 처리되어 시간적으로 유리합니다. 장점 컴퓨터의 처리구조와 유사해 실행 속도가 빠릅니다. 단점 유지보수가 어려움 실행 순서가 정해져 있으므로 코드의 순서가 바뀌면 동일한 결과를 보장하기 어려움 디버깅이 어려움 객체지향(Object Oriented Programming)이란? 실제 세계를 모델링하여 소프트웨어를 개발하는 방법입니다. 객체지향 프로그..
JAVA Java란? 객체지향 프로그래밍 언어이다. 서버, 모바일, 임베디드, 애플리케이션 등 다양한 분야에서 쓰인다. 처음 나온 것은 1995년이다. Java의 특징 쉬운 언어이다. C와 C++언어의 문법을 기본으로 차용하여 개발된 언어 C와 C++이 가진 어려운 문법인 포인터와 다중 상속 제거 C와 C++에 비해 쉬운 언어이다. 이식성이 높은 언어이다. Java는 JVM(Java Virtual Machine) 위에서 돌아가기 때문에 운영체제 종류에 상관없이 돌아간다. Java 언어로 개발된 프로그램은 소스 파일을 다시 수정하지 않아도 자바 실행 환경(JRE : Java Runtime Environment)이 설치되어 있는 모든 운영체제에서 실행 가능하다. 따라서 Java 언어는 이식성이 높은 프로그래밍 언어라..