객체지향의 핵심 키워드

 

클래스(Class) : 데이터+메서드

객체(Object), 인스턴스(instanse)

메시지(Message)

캡슐화(Encapsulation)

상속(inheritance)

다형성(polymorphism)

 

클래스 : 메타 데이터 => 데이터의 데이타

다형성 : 서로 다른 객체가 동일한 메세지에 대하여 서로 다른 방법으로 응답할 수 있는 기능

 

 

 

객체지향 (3)_ 자바공부하기

 

객체지향개념의 등장 배경

 

프로그래밍 언어의 발전

- 기계어 -> 어셈블리어 -> 고급언어

 

함수 기반 프로그래밍

- 1970년대 - 1980년대

 

소프트웨어의 위기

- 생산성 향상의 한계

 

객체지향 개념의 등장

- 1980년대

 

객체지향?

 

 

 

객체지향 _ 2 <자바공부하기>

 

데이터 중심 분석과 설계

1980년대

- Peter Chen과 Ed Codd의 접근 방법

* 엔티티라 불리는 일련의 데이터 아이템을 빌딩 블록으로하여 소프트웨어 시스템을 만들고자 함

 

특징

- 데이터가 비즈니스 응용에서 가장 안정된 부분이라 생각하고 데이터 모델링 방법을 사용하여 시스템을 표현하고자 함

ex) E-R 모델

 

- 데이터 모델링 기법은 시스템의 기능을 표현하는데 도움을 주지 못하고 추가적인 방법을 필요로 함

 

객체지향 소프트웨어 방법론

 

어떠한 기존의 방법도 데이터와 함수를 함께 다루지 않는다

 

객체지향 방법론은 높은 응집도와 낮은 결합도를 제공해 주어, 기존의 방법론에서 나타났던 문제점들을 상당부분 해소시켜 줄 수 있는 방법론으로 등장하게 되었다.

 

객체지향방법론

- Object >= Data+Functions

 

 

 

 

스파게티 코딩

1960년대

- 작고 간단한 응용 시스템을 만듦

* 제한된 시스템 자원하에서 최대한의 효과를 보고자 노력함

 

- 개발자들의 창조적인 능력에 의해 소프트웨어가 개발됨

 

- 스파게티 코드 생성

 

- 수많은 GOTO 구문은 소프트웨어 시스템을 보수 / 관리하기 어렵게 함

 

 

 

구조적 설계와 분석

1970년대

- AI Constantine과 Ed Yordon의 접근 방법

* 함수(function)들을 빌딩 블록(building block)으로 하여 소프트 웨어 시스템을 만들고자 함

 

특징

- 모듈화 프로그래밍으로 발정을 가져 옴

- 함수는 언제나 변화할 수 있음

* 거의 변하지 않는 자연 법칙에 따라 작성되는 '과학 프로그램'에는 적합하나, 사용자의 요구가 계속정으로 바뀌는 현실 세계의 응용에는 부적합함

- 함수와 프로시저(procedure)는 생성되는 응용 프로그램에 대해 추상화를 제공함

* 함수는 다른 응용에서 재사용 가능함

* 프로시저는 반복적인 작업을 줄여 줌

- 높은 결합도(coupling)와 낮은 응집도(cohesion)에 의한 시스템의 복잡도 증가

* 결합도

- 특정 코드 부분의 다른 코드나 데이터 저장소에 대한 의존성 정도

- 구조적 방법론은 높은 결합도를 보여 줌

*응집도

- 서로 관련된 일련의 코드와 데이터가 얼마나 적합하게 관련을 맺고 있는가에 대한 정도

- 명령형 언어에서 변수는 공통 영역에 존재하면 모든 함수에서 공유가 가능함

- 구조적 방법론은 낮은 응집도를 보여 줌

 

 

 

 

 

클래스 구조 설명

 

Public 키워드

* 접근제한을 나타낸다.

* public으로 선언하면 클래스 내/외에서 접근하는데 제한이 없다

 

static 키워드

* static은 공유의 의미를 갖음

* 모든 객체에서 공통으로 사용하는 메모리

 

void키워드

* 모든 메서드는 리턴 타입을 선언해야 한다

* void는 리턴 값이 엢음을 나타낸다

 

String[] args

* Main()메서드의 실행 시 매개변수 지정형식

* String[]까지가 데이터 타입

* args[0], args[1]형식으로 매개변수를 입력 받음

- args: Argument String의 약자

- args: Argument Value의 약자

* String args[]

- 사용가능하나 보편적으로 쓰이는 형식은 아님

 

 

System.out.println()

* 모든 클래스는 java.lang.*을 자동으로 import함

- System클래스는 그 안에 포함된 클래스

- System클래스는 io클래스를 import하고 있음

 

* out은 printStream타입의 static변수

- println()메서드는 printStream클래스의 멤버 메서드

* 따라서 객체생성 이전에 static변수 out로 println()메서드 사용이 가능

 

"        " String

* 자바에서 문자열을 이중따옴표로 표시

* println()은 표준출력 메서드로 문자열을 매개변수로 주면 도스 창에 출력

 

 

클래스 구조 설명

 

//HelloWorld.java

class HelloWorld

{

public static void main(String[] args)

{

System.out.println("HelloWorld!")

}

}

 

클래스를 구성하는 기본 요소

- public, static, void 키워드

- main()메서드

- String배열 String[]

- main()메서드의 매개변수 args

- System.out.println();

- "      " String

 

클래스 구조 설명

- main() 메서드

* 프로그램의 첫 시작점

* 실행이 끝나면 프로그램도 종료

* main()메서드는 한 개 이상 존재할 수 없음

* 자바의 main()메서드는 형식화 되어있음

* 매개변수의 이름 이외에는 바꿀 수 있는 것이 없음

* main()메서드를 포함하는 클래스를 실행클래스라고함

 

public static void main(String[] args){

...

 

}

 

 

 

 

 

자바공부하기 24 - 자바 실행단계

 

 

 

 

 

프로그램 동작순서

 

 

자바공부하기 23]바이트코드

 

바이트코드

 

Byte-Code는 머신 코드보다 추상적인 형태를 띠는 중간 코드의 일종입니다.

 

추상

- '추상'이란 구체적인 사물들 간에 발견되는 공통적인 특징 또는 그 모양새를 뜻합니다.

- 추상화한 것은 실제 세계만큼 real하지는 못하지만 하나이상의 사물들을 포괄할 수 있다는 이점이 있다.

- 크로스플랫폼 체계의 기본 요건이기도 하다.

* 크로스플랫폼이란 것이 이질적인 기계들 간에서도 동일한 의미로서 파익될 수 있는 어떤 '텍스트'를 요구하기 때문이다.

- 바이트코드는 이같은 요구에 부응하도록 고안된 언어이다.

 

다시말해서 Byte-code(바이트코드)란

프로그래머가 작성한 원시언어가 이종의 기계들 사이에서 효율적으로 작동하기 위해서는 머신 공통의 논리로 정제되어야 하는데, 이때 머신 공통의 논리로 정제된 결과물이 바로 바이트코드인 것이다.

 

인터프리터는 바이트코드를 통해 '무엇을' '어떻게' 수행해야 하는지 습득한 후 그 내용을 자신의 기계에 맞게 구체적으로 풀어내면 된다.

 

중간 코드라고 불리는 까닭은 바이트코드가 원시코드와 기계어 사이에서 이 같은 매개 역할을 하기 때문이다.

 

 

 

+ Recent posts