본문 바로가기

전체 글

(142)
[Java] 객체지향 프로그래밍 5 1. 추상클래스(abstract class) - 미완성 메서드(추상메서드)를 포함하고 있다. - 클래스로서의 역할을 다 못하지만, 새로운 클래스를 작성하는데 있어서 바탕이 되는 조사클래스로서 중요한 의미를 갖는다. - 키워드 'abstract'를 붙이기만 하면 된다. [참고] 추상메서드를 포함하고 있지 않은 클래스에도 키워드 'abstract'를 붙여서 추상클래스로 지정할 수도 있다. 추상메서드가 없는 완성된 클래스라 할지라도 추상클래스로 지정되면 클래스의 인스턴스를 생성할 수 없다. 1.1 추상메서드(abstract method) 메서드를 미완성 상태로 남겨 놓는 이유는 메서드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문에 조상 클래스에는 선언부만을 작성하고, 주석을 덧붙여 어떤 기능을 수행할..
[Java] 객체지향 프로그래밍 4 1. 제어자(modifier) 제어자는 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다. - 접근 제어자 : public, protected, default, private - 그 외 : static, final, abstract, native, transient, synchronized, volatile, strictfp 제어자는 클래스나 멤버변수와 메서드에 주로 사용되며, 하나의 대상에 대해서 여러 제어자를 조합하여 사용하는 것이 가능하다. 단, 접근 제어자는 한 번에 네 가지 중 하나만 선택해서 사용할 수 있다. [참고] 제어자들 간의 순서는 관계없지만 주로 접근 제어자를 제일 왼쪽에 놓는 경향이 있다. 1.1 static - 클래스의, 공통적인 인스턴스변수는 하나의 클..
[Java] 객체지향 프로그래밍 3 1. 상속(ingeritance) 1) 상속의 정의와 장점 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 상속을 통해서 클래스를 작성하면 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이하다. 이러한 특징은 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여한다. 자바에서 상속을 구현하는 방법은 새로 작성하고자 하는 클래스의 이름 뒤에 상속받고자 하는 클래스의 이름을 키워드 'extends'와 함께 써 주기만 하면 된다. [참고] 서로 상속관계에 있는 두 클래스를 아래와 같은 용어를 사용해서 표현하기도 한다. - 조상 클래스 : 부모(parent)클래스, 상위(super)클..
[Java] 객체지향 프로그래밍 2 1. JVM의 메모리 구조 응용프로그램이 실행되면, JVM은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당받고 JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다. 1) 메서드영역(method area) - 프로그램 실행 중 어떤 클래스가 사용되면, JVM은 해당 클래스의 클래스파일(*.class)을 읽어서 분석하여 클래스에 대한 정보(클래스 데이터)를 이곳에 저장한다. 이 때, 그 클래스의 클래스변수(class variable)도 이 영역에 함께 생성된다. 2) 힙(heap) - 인스턴스가 생성되는 공간, 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다. 즉, 인스턴스변수(instance variable)들이 생성되는 공간이다. 3) 호출스택(call stack 또는 ..
[Java] 객체지향 프로그래밍 1 1. 객체지향언어 1) 코드의 재사용성이 높다. - 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다. 2) 코드의 관리가 용이하다. - 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다. 3) 신뢰성이 높은 프로그래밍을 가능하게 한다. - 제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다. 객체지향의 개념을 학습할 때 재사용성과 유지보수 그리고 중복된 코드의 제거, 이 세 가지 관점에서 보면 보다 쉽게 이해할 수 있다. 너무 객체지향개념에 얽매여서 고민하기 보다는 일단 프로그램을 기능적으로 완성한 다음 어떻게 하면 보다 객체지향적으로 코드를 개선할 수 있을지를 고민하여 점..
[Java] 배열(array) 1. 배열이란? 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것 인덱스 범위는 0부터 '배열길이-1'까지 [참고] 배열의 길이는 int범위의 양의 정수(0도 포함)이어야 한다. ex. int[] arr = new int [0]; 배열이름.length 자바에서는 JVM이 모든 배열의 길이를 별도로 관리하며, '배열이름.length'를 통해서 배열의 길이에 대한 정보를 얻을 수 있다. ex. int[] arr = new int[5]; // 길이가 5인 int배열 int tmp = arr.length;// arr.length의 값은 5이고 tmp에 5가 저장된다. 2. 배열의 복사 배열은 한번 생성하면 그 길이를 변경할 수 없기 때문에 더 많은 저장공간이 필요하다면 보다 큰 배열을 새로 만들고 이전 배열로..
[Java] 형변환 1. 형변환(캐스팅, casting)이란? 변수 또는 상수의 타입을 다른 타입으로 변환하는 것 int타입의 값과 float타입의 값을 더하는 경우, 먼저 두 값을 같은 타입으로 즉, 둘 다 float타입으로 변환한 다음에 더해야 한다. 2. 형변환 방법 (타입)피연산자 ex. int score = (int)85.4; 변 환 수 식 결 과 int -> char (char)65 'A' char -> int (int)'A' 65 float -> int (int)1.6f 1 int -> float (float)10 10.0f float타입의 값을 int타입으로 변환할 때 소수점 이하의 값은 반올림이 아닌 버림으로 처리된다. 3. 정수형간의 형변환 큰 타입에서 작은 타입으로의 변환, 예를 들어서 int타입(4 b..
[Java] 기본형(Primitive type) - 정수형, 실수형 1. 정수형 - byte, short, int, long 정수형에는 모두 4개의 자료형이 있으며, 각 자료형이 저장할 수 있는 값의 범위가 서로 다르다. byte(1) < short(2) < int(4) : 기본 자료형(default type) < long(8) 정수형의 표현형식과 범위 어떤 진법의 리터럴을 변수에 저장해도 실제로는 2진수로 바뀌어 저장된다. 이 2진수가 저장되는 형식은 크게 정수형과 실수형이 있으며, 정수형은 다음과 같은 형식으로 저장된다. S n-1 비트 S : 부호 비트(양수는 0, 음수는 1) n : 타입의 크기(단위 : bit) 모든 정수형은 부호있는 정수이므로 왼쪽의 첫 번째 비트를 '부호 비트(sign bit)'로 사용하고, 나머지는 값을 표현하는데 사용한다. 그래서 n비트로..