프로그래밍/Java

객체 지향 프로그래밍, 자바

Lou Park 2016. 6. 17. 22:00

한 학기 동안 학교에서 Java강의를 들으면서 정리한 내용이다.

간단히 자바에대해 파악하기 좋다.


00 Introduction

없음

01 Basic Concepts and a Sample

1. 언어의 분류
- 기계어 (machine language)
- 어셈블리어 (assembly language)
- 절차적 언어 / 비절차적 언어 (procedural / nonprocedural language)

2. 자바의 특징
- 1991년 SUN 마이크로 시스템즈의 James Gosling에 의해 탄생
- 플랫폼 독립적, 적은 메모리 사용
- Write Once, Run Everywhere
- 소형 기기, 인터넷의 발달과 함께 성장
- JVM 상에서 동작
- 객체 지향, 객체를 기본 단위로 디자인

3. 클래스
- Java에서 객체를 만들기 위한 틀
- 하나의 class는 하나의 java 파일로 구성
- 메인 class이름은 파일 이름과 같아야 함
- 멤버 변수는 객체의 특성을 표현
- 멤버 메소드는 객체의 행위를 표현

02 Values, Variables, Data Types

1. 식별자(Identifier)
클래스, 변수, 상수, 메소드 등에 붙이는 이름

03 Operators

1. 좌향 결합 연산자
- 전치, 후치 연산자
- 삼항연산자
- 대입연산자

04 Flow Control Syntax

없음

05 Method

1.Function
- 작은 프로그램
- 매개변수(parameter)를 받아서 반환 값을 내는 모듈

2. Method
- 클래스 내부 함수 (member function)
- *Java의 function은 전부 class 내부에 있으므로 method임
- 클래스 멤버 메소드는 객체의 기능(행위)를 정의

06 Class

1.절차 지향 프로그래밍
- 작업 순서를 표현하는 컴퓨터 명령 집합
- function의 집합으로 프로그램 작성

2. 객체 지향 프로그래밍
- 프로그램을 실제 세상에 가깝게 모델링
- 수행하는 작업을 객체들간의 상호작용으로 표현
- 클래스 혹은 객체들의 집합으로 프로그램 작성

3. 캡슐화
- 메소드와 데이터를 클래스 내에 선언하고 구현
- 외부에서는 공개된 메소드 형태의 인터페이스 만으로 접근 가능
- 객체 내 데이터에 대한 보안, 보호, 외부 접근 제한

4. 다형성
- 동일한 이름의 기능이 서로 다르게 작동하는 현상
- 예를들어 say()는 dog.say(), cat.say() 다르게 할 수 있음

5. 접근권한 (public / protected / default / private)

6. 생성자(constructor)
- 클래스의 이름과 동일한 메소드
- 클래스의 객체가 생성될 때에만 호출되는 메소드
- return type 없음

7. 인스턴스화(instanciation)
- 클래스를 구체화한 객체를 생성하는 것

8. 참조변수 (reference variable)
- 객체 저장공간의 주소를 저장하는 변수
- 객체의 데이터가 아니라 객체가 저장된 위치의 주소를 저장

9. static
- 한 class의 모든 객체가 공유
- 객체를 생성할 필요없이 초기화 및 접근가능

06 Method
캡슐화
메소드와 데이터를 클래스 내에 선언하고 구현하는 것.
외부에서는 공개된 메소드형태의 인터페이스만으로 접근가능하므로
객체 내 데이터에 대한 보안, 보호가 가능하다.

객체 지향 프로그래밍 특징 (Object Oriented Programming)
객체는 데이터와 메소드로 구성되고 멤버 변수에 저장된 데이터는 해당 객체의 특성을 표현함.
멤버 메소드는 해당 객체의 행위를 표현한다.

클래스 (Class)
객체를 찍어내는 틀.
클래스를 통해 개별 객체 (instance)를 만든다.

재귀함수 (Recursive Function)
메소드가 종료되기 전에 자신을 다시 호출하는 함수.
* 팩토리얼 구하기
public static long fact (int n) {
    if (n == 0) {
          return 1;
    } else {
          return n * fact(n - 1);
    }
}
* 피보나치 수열 구하기
public static long fibonacci(int n) {
    if (n == 0) {
          return 0;
    } else if (n == 1) {
          return 1;
    } else {
          return fibonacci(n - 1) + fibonacci(n - 2);
    }
}

07 Overloadding, String
생성자 (Constructor)
클래스 멤버 메소드 중 하나이며 객체를 생성한 때 단 한 번만 실행된다.
일반적으로 클래스 멤버 변수의 초기화를 수행한다.

메소드 오버로딩 (Method Overloadding)
동일한 이름의 메소드를 둘 이상 정의하는 것을 말한다.
메소드의 매개변수 개수 또는 자료형이 다르면 오버로딩이 가능하다.

* 복소수를 표현하기 위한 Complex Class구현, 연속적인 add method call이 가능하도록 구현
C.add(1, 2).add(3).add(3,4);

Useful Methods with String
str.length()
str.concat(String str2) 
str.compareTo(String str2)
str.charAt(int index);
String.valueOf('30');

08 Array
배열
같은 자료형의 자료 여러개를 하나로 묶어서 표현하는 방법이다.

* 배열 선언법
int[] array = new int[5];
int[] array = new int[] {1, 2, 3, 4, 5};
int[] array = {1, 2, 3, 4, 5};

* 2차원 배열 선언법
int[][] array = new int[2][3];
int[][] array = {{1,2,3}, {1,2,3}};

* Rectangle 배열 생성후 3개의 사각형 데이터 입력,
Rectangle 배열 내 모든 사각형의 면적 합을 구하는 sumOfAreas() 구현

09 JAVA API


패키지 (Package)
서로 관련된 클래스와 인터페이스의 컴파일된 클래스 파일들을 하나의 디렉토리에ㄱ 묶어 놓은 것이다.
하나의 응용 프로그램은 여러개의 패키지로 작성가능하다.
패키지는 jar 파일로 압축할 수 있다.
서로 다른 패키지에 이름이 같은 클래스와 인터페이스 존재가능하다.
소프트웨어 재사용성을 높인다.

박싱과 언박싱 (Boxing and Unboxing)
박싱 : Integer ten = new Integer(10);
기본 타입의 값을 Wrapper 객체로 변환하는 것
언박싱 : int i = ten.intValue();
Wrapper 객체에 들어있는 기본 타입의 값을 빼내는 것

String Buffer (java.lang.StringBuffer)
StringBuffer sb = new StringBuffer("java")l
sb.append(" is easy."); -> java is easy
sb.delete(4, 11); -> java
sb.insert(1, "elly "); -> jelly ava
sb.replace(1, 5, ""); -> java
sb.reverse(); -> avaj
sb.setLength(3) -> ava

String Tokenizer (java.util.StringTokenizer)
String str = "name=kitae&addr=seoul&age=21";
StringTokenizer st = new StringTokenizer(str, "&");
st.countTokens(); -> 3
st.nextToken(); -> name=kitae
st.nextToken(); -> addr=seoul

Math (java.lang.Math)
Math.random() : 0.0 보다 크거나 같고 1.0 보다 작은 임의의 실수 리턴

* 난수 발생 코드
Math.random() * 100 : 0.0~99.9999의 실수 발생
int n = (int)(Math.round(d));

10 Inheritance
상속 (Inheritance)
기존에 정의된 클래스에 멤버 변수/메소드를 추가하여 새로운 클래스를 정의
상속되는 클래스를 Super Class, 상속 받는 클래스를 SubClass라고 한다.

메소드 오버라이딩 (Method Overriding)
SuperClass에 정의된 메소드를 SubClass에서 재정의 하는 것
메소드 오버로딩과는 달리 메소드의 이름, 인자의 타입, 인자의 개수, 인자의 리턴 타입 등이 모두 동일하여야 성립하다.

instanceof
상속관계를 바탕으로 형 변환이 가능한지 묻는 연산자.
Person p;
p instanceof Person

final
클래스에 final을 붙이면, 클래스의 상속을 허용하지 않는다.
멤버 메소드에 final 키워드를 붙이면 해당 메소드의 overriding을 허용하지 않는다.

abstract class
객체의 생성을 허용하지 않는 추상 클래스.
인스턴스 생성이 불가능하다.
abstract class Vehicle {};
class Truct extends Vehicle {};

Interface
완벽한 abstract class를 말한다.
interface를 이용하여 다중상속을 구현할 수 있다.

* 다중상속 예제
interface USBMouseInterface {
    void mouseMove();
    void mouseClick();
}
interface RollMouseInterface {
    void roll();
}

public class MouseDriver implements RollMouseInterface, USBMouseInterface {};

모든 method가 abstract인 class는 interface로 정의 가능하다.
interface내 선언된 변수는 무조건 public static final
interface내 선언된 메소드는 무조건 public abstract
interface도 참조변수 선언 및 method overriding 가능