레이블이 뷰만들기인 게시물을 표시합니다. 모든 게시물 표시
레이블이 뷰만들기인 게시물을 표시합니다. 모든 게시물 표시

2013년 11월 5일 화요일

[닷넷4.0,ADO.NET강좌, .NET4.X, C#4.X]ADO.NET 개요, 소개, 특징 ADO.NET 개요, 소개

[닷넷4.0,ADO.NET강좌, .NET4.X, C#4.X]ADO.NET 개요, 소개, 특징   ADO.NET 개요, 소개  
 
ADO.NET 개요, 소개
 
ADO.NET은 .NET Framework 프로그래머에게 데이터 액세스 서비스를 제공하는 클래스 집합이다.  분산된 데이터 공유 응용 프로그램을 만들기 위한 다양한 구성 요소를 제공하고 또한 관계형, XML 및 응용 프로그램 데이터에 대한 액세스를 제공하는 .NET Framework의 핵심 부분이다.
 
ADO.Net은 Microsoft Accss와 SQL Server, Oracle 과 같은 관계 형 데이터베이스 뿐 아니라 비 관계형 데이터 원본도 조작이 가능한데 ADO.Net은 .Net Framework 안에 통합 되어 있으며 .NET 언어들(특히 C#)과 같이 쓰이도록 설계 되었다.
 
 기존의 ADO와 비교해 볼 때 ADO.Net은 확장성과 상호 운영성이 개선된 ADO 인데 ADO가 연결 지향형인데 반해 ADO.Net의 경우 비 연결성 데이터 집합을 처리 하도록 설계 되었습니다. 연결이 끊어진 레코드 집합은 응용 프로그램에만 도움이 되는데 이는 데이터를 로컬 상태에서 보다 빠르게 처리하고 전송 할 수 있기 때문이다. 또한 ADO.Net은 XML을 보편적인 데이터 전송 형식으로 사용하고 있다.
 
 ADO.Net은 System.Data.dll 어셈블리 안에 들어 있는데 ADO.Net의 모든 클래스들이 System.Data.dll  안에 들어 있으므로 결국 System.Data.dll 자체가 곧 ADO.Net 이라고 할 수 있다.
 
 그럼 왜 이름을 System.Data 라고 하지 않고 ADO.Net이라고 했을까?  ADO.Net이라는 이름은 ADO(ActiveX Data Object)로부터 따온 것이다. MS는 .NET 환경에서 권장 되는 데이터 액세스 인터페이스 임을 나타내기 위해 ADO.Net 이라고 명명 한 것이다.
 
.NET Framework에서의 클래스 라이브러리(Class Library)들을 굳이 다시 크게 나누어, Base Class Library와 그 외의 클래스 라이브러리(Class Library)로 구분하자면, Base Class Library(BCL)에는 Collections나 IO등과 같은 프로그래밍에 있어서의 좀 더 근원적인 알고리즘(Algorithm)과 자료구조 및  하드웨어(Hardware)에 보다 근접한 부분에 해당한다고 볼 수 있다. 그 외의 라이브러리들에는 Directory Service, XML Support등과 같은 보다 추상적이고 다양한 종류의 라이브러리를 접할 수 있고 그 중의 하나가 ADO.NET이라고 불리는 데이터(Data) 관련 클래스 라이브러리(Class Library) 이다. 

2013년 10월 13일 일요일

[자바상속컴포지션]Java Inheritance & Composition 상속과 컴포지션

[자바상속컴포지션]Java Inheritance & Composition

상속과 컴포지션은 동전의 양면과 같이 유사하게 서로에게 관련이 있다. 
상속은 마치 양파가 여러 껍질로 이루어진 것과 같이 계층화된 객체
컴포지션은 여러 재료(객체)가 한데 뭉쳐서 만들어진 죽
컴포지션은 개체들간의 'has a' 관계, 상속은 ‘is a’관계
상속과 컴포지션은 상호 배타적이지 않으며 개발자는 이 둘을 같이 사용한다.
다음 예제는 ‘is a’와 ‘has a’의 착각에는 나오게 되는 실수이다.

1. 원은 반지름 값을 갖는 하나의 점이다(a Circle is a Point with a radius.)
   그래서 Circle은 Point를 상속

   
   
class Point {
 private double x, y;
 Point(double x, double y) {
  this.x = x;
  this.y = y;
 }
 double getX() {
  return x;
 }
 double getY() {
  return y;
 }
}
class Circle extends Point {
 private double radius;
 Circle(double x, double y, double radius) {
  super(x, y);
  this.radius = radius;
 }
 double getRadius() {
  return radius;
 }
}
 
2. 원은 한 점과 반지름을 가지고 있다(a circle has a point and a radius)
 
class Point {
 private double x, y;
 Point(double x, double y) {
  this.x = x;
  this.y = y;
 }
 //redundant code 로 인한 유지보수 어려움(코드의 재사용 실패)
 double getX() {
  return x;
 }
 double getY() {
  return y;
 }
}
 
class Circle {
 private Point p;
 private double radius;
 Circle(double x, double y, double radius) {
  p = new Point(x, y);
  this.radius = radius;
 }
 double getX() {
  return p.getX();
 }
 double getY() {
  return p.getY();
 }
 double getRadius() {
  return radius;
 }
}

오라클자바커뮤니티에서 설립한 개발자교육6년차 오엔제이프로그래밍 실무교육센터(오라클SQL,튜닝,힌트,자바프레임워크,안드로이드,아이폰,닷넷 실무개발강의)  

[개강확정강좌]오라클자바커뮤니티에서 운영하는 개발자 전문교육 ,개인80%환급(www.onjprogramming.co.kr)




2013년 8월 9일 금요일

[오라클자바커뮤니티, Java Framework]객체 지향 패러다임

객체 지향 패러다임

오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  


 
S/W개발을 기능별로 나누는 것이 아니라 객체 단위로 분리하는 것. 객체지향 기법은 data(객체)를 중심으로 system을 바라보고 이를 system 개발에 적용하겠다는 것

객체란 데이터와 그 데이터를 처리하는 여러 개의 기능들을 하나의 단위로 묶은 것으로, 외부에 블랙박스 형태로 보인다. 즉 입력과 출력 부분만이 노출이 되고 내부적인 처리 과정은 완전히 밀폐되어 있으며, 외부에서 알 필요도 없는 것

소프트웨어 공학과 프로그래밍 언어에 관한 이론 중에서 객체지향적 분석(Object-Oriented Analysis)이나 객체지향적 설계(Object-Oriented Design) 그리고 객체지향 프로그래밍 언어(Objected-Oriented Language)와 같이 객체지향에 관련된 모든 것을 통틀어 말한다

기존의 프로시저 기반의 구조적 프로그래밍(C나 Pascal과 같은 명령형 패러다임)에서는 프로그램 내에서 일어나는 모든 변화와 동작, 사건 등을 프로그래머가 직접 기술하는 형태로 프로그램을 기술했지만 객체지향 프로그래밍에서는 똑똑한 객체에게 자신이 원하는 일을 해달라는 메시지를 전달하는 형태로 프로그램을 기술한다

기존 시스템들은 절차 중심적으로 개발되어진 경우가 많아서 유지 보수 단계에서 많은 어려움을 겪고 있는 반면, 객체 지향 패러다임은 재사용성, 확장성 등의 특성을 내포하고 있어 유지 보수 단계를 용이하게 해 준다.

객체들 사이의 인터페이스를 위해 사건(또는 메시지)들을 주고받는데 기존의 방법보다 더 실행 시간을 요할 수 있다. 깊은 클래스 계층 구조가 있는 경우와 system 작동 중 객체에 대한 동적 할당과 제어시 성능에 대한 문제가 제기될 수도 있다.

객체지향 기법은 data보다는 성능을 중요시하며, 많은 계산을 요하는 system에서는 적합지 않을 수 있다. 실시간 반응을 해야하는 system의 경우 객체지향 기법을 적용하는 것이 이를 통해 얻을 수 있는 이점보다 성능 등에 대한 부담이 높아져 허용되는 한계(예: 반응시간) 를 넘을 수도 있다. 군사용 미사일 제어 system이나 병원의 환자 상태 관리 system 등이 그 예가 될 수 있다.

컴포넌트가 21세기 정보기술(IT) 산업의 지각변동을 몰고 올 새로운 패러다임으로 급부상하고 있다.

SW를 이제까지처럼 계획, 설계, 분석, 구현, 테스트하는 순차적인 개발과정으로 보는 것이 아니라 레고블록이나 자동차 부품처럼 조립하는 개념으로 간주하며 컴포넌트 SW는 레고블록을 쌓는 것처럼 일단 표준화된 프레임워크와 규칙을 기반으로 만들어진 기능별 SW를 필요한대로 조립하면 원하는 SW를 만들 수 있다. 개발이나 유지보수에도 특별한 노력이 요구되지 않으며 표준화, 규격화를 지향하기 때문에 SW 품질도 눈에 띄게 좋아진다.

현재 국내 신생업체들을 중심으로 자바 컴포넌트 기술을 이용해 상용 애플리케이션을 개발하는 사례가 늘고 있으며 특히 전사적자원관리(ERP) 시스템에서부터 개발툴, XML 솔루션, 검색엔진, 통신용 SW, 인터넷 구축툴, 언어처리 모듈, 지식관리(KM), 고객관리(CRM) 등의 분야에 이르기까지 다양한 분야에서 개발이 진행되고 있다.

컴포넌트의 특장점은 인터넷이라는 환경의 부상으로 더욱 강력한 위치를 차지하게 됐다. 인터넷은 모든 업무를 빠르게 변화시키고 있으며 표준화할 것을 요구하고 있으며 이러한 업무를 지원하는 SW 및 정보시스템도 표준에 기반해 빠른 변화를 수용해야만 하는데 이러한 요구에 가장 부합하는 것이 바로 컴포넌트 개념이다.

Object : 시스템의 관점에서 본다면 어떤 상태(state)를 나타내는 데이터의 구조와 동작을 수행하는 연산(operation)으로 이루어진 프로그램의 한 요소이다. 여기서의 연산을 객체지향에선 메소드(method)라고 한다. 이렇게 객체의 상태는 데이터에 의해 결정되고 동작은 메소드에 의해 결정된다.

Message : 홀로 존재하는 객체는 아무런 의미가 없다. 대부분의 객체는 무언가를 실행하기 위해서 다른 객체를 필요로 한다. 이러한 상호 작용은 메시지를 통해 이루어진다.

Class : 모든 객체는 반드시 클래스를 통해서만 정의될 수 있다. 클래스는 객체의 타입을 정의하는 템플릿(template)으로서, 여러 객체의 공통적인 속성(attribute)과 메소드(method)를 가지고 있는 클래스가 먼저 정의되면, 이 클래스를 통해서 다시 객체가 정의되는 것이다.한 클래스에 속하는 각각의 객체를 그 클래스의 인스턴스(instance)라고 한다.


클래스(Class)
어떤 종류의 모든 객체들에 대해 일반적으로 적용할수 있는 변수와 메소드를 정의하고 있는 설계도 또는 프로토타입 이다.
사용자 정의 자료형, 객체의 자료형
Field라는 변수와 오퍼레이션을 가하는 method 로 이루어짐
클래스의 이름은 대문자로 시작, 다음 단어의 시작은 대문자

객체(Object)
클래스의 인스턴스는 new 수식에 의해 만들어지며 이것이 객체이다.
타입이 클래스인 변수
이름은 소문자로 시작, 다음 단어의 시작은 대문자


•추상 데이타 타입(ADT;abstract data type)
–클래스를 이용하여 표현

•상속(inheritance)
–동적 바인딩(dynamic binding) cf) Static binding
–한 클래스를 확장하여 새로운 클래스를 만드는 것을 말한다. 이렇게 새로 만들어지는 클래스를 하위클래스(SubClass)라고 부른다. 그리고 원래의 클래스는 상위클래스(SuperClass)라고 부른다.
–자바의 모든 클래스는 상속의 대상이 되는 상위클래스(SuperClass)가 반드시 하나 존재한다
–프로그램의 재사용성과 확장성을 높인다.
–하위 클래스는 상속된 필드와 메쏘드 중에 private으로 선언된 것이 아닌 것에만 접근할 수 있다.



객체지향의 핵심 내용

연관(Association)
객체 또는 클래스가 다른 객체 또는 클래스와 ‘어떤 의미의’ 관계를 가질 수 있다.

집합연관(Aggregation)
순수 연관(Association)은 두 동료 클래스, 객체간의 구조적 관계
하나의 객체가 다른 객체들의 조합에 의해 만들어 짐
전체/부분 관계를 모델링 하는 경우 한 클래스는 더 큰 것을(“전체”) 대표하고 그것은 더 작은 것들(“부분”)로 이루어져 있다. Ex)회사와 부서의 관계
전체”와 “부분”의 개념적 관계(“whole-part of”)
Component는 집합체와는 별개로 독립적으로 존재 할 수 있다.(nonexclusive ownership )


복합연관(Composition)
단순한 집합연관은 전적으로 개념적이며 “전체” 와 “부분”을 구분 하는 것 이상의 어떤 것도 수행하지 않는다.
일종의 집합연관으로 전체는 강력한 소유권을 가지며  부분/전체는 동시적 일생을 산다.(“cascading delete”)
(Window : Frame, 책상 : 서랍, 책상 : 다리)
전체는 부분에 대한 책임을 진다. 바꿔 말하면 전체는 부분을 생성시키고 소멸시킨다.
“부분”은 어느 시점에 하나의 “전체”에 속한다.
Component는 집합체와는 별개로 독립적으로 존재 할 수 없다.(exclusive ownership )
전체의 다중성은 0 또는 1(0..1), 부분의 경우는  어느것이 와도 관계 없다(0..*)



상속과 Composition
상속과 컴포지션은 동전의 양면과 같이 유사하게 서로에게 관련이 있다.
상속은 마치 양파가 여러 껍질로 이루어진 것과 같이 계층화된 객체
컴포지션은 여러 재료(객체)가 한데 뭉쳐서 만들어진 죽
컴포지션은 개체들간의 'has a' 관계, 상속은 ‘is a’관계
상속과 컴포지션은 상호 배타적이지 않으며 개발자는 이 둘을 같이 사용한다.


다형성
•다형성(polymorphism)
–상속을 받은 것을 그대로 사용하지 않고 입맛에 맞게 바꾸어 줄 수 있도록 하는 것
–다형성을 위해 자바에서는 메소드 overriding 과 메소드 overloading을 제공 한다.
–상속계층 상에서 어떤 객체의 어느 메소드를 호출할 것인지를 결정하는 객체의 능력을 다형성 이라 한다.
–사인곡선을 그리는 함수가 있다고 할 때 사용자는 파라미터로 radian이나 degree값을 넣게 되지만 둘 다 처리할 수 있다. 이것은 sine(int degrees)나 sine(float Radians)와 같이 동일 이름의 함수가 다른 파라미터로 두 번 선언되었기 때문이다.


다형성(polymorphism)
Overloading : 동일한 함수의 이름 사용 가능, 같은 클래스 내에 같은 이름의 생성자나 메소드를 사용하는 행위,매개변수의 개수와 타입이 달라야 한다

Overriding : 상위 클래스에서 정의된 함수를 하위 클래스에서 재 정의, 기존 클래스의 메소드 구현 부분만 약간 변화시켜 새로운 클래스를 생성할 수 있다. 매개변수의 개수와 타입이 같아야 한다.
 
상위 클래스로부터 메소드를 상속받을 때, 서브클래스 내에 같은 이름의 메소드가 있는 경우에 Signature가 다르면 중복(overloading)이 되고 Signature가 같으면 재정의(overriding)가 된다.

Template : 타입을 인자로 하여 새로운 타입을 생성



캡슐화(encapsulation)
객체는 자신이 수행하는 모든 행동과 속성을 다른 객체와 외부 세계에는 보이지 않는다
객체 자신의 Operation을 수행하고 결과를 내놓지만 그 Operation의 동작 원리는 숨기는 것이다.
높은 모듈성과 정보은닉을 제공



추상클래스
추상클래스는 어떠한 클래스를 만들기 위해 미리 정의해 둔 클래스의 틀을 의미한다. 앞에서 작성한 Employee(직원)클래스와 직원의 하위 클래스를 예로 든다면 직원이라는 클래스는 프로그래머(Programmer), 디자이너(Designer), 프로그램팀장(ProgrammerChief)등을 만들기 위해 작성된 클래스라고 할 수 있다. 사실 직원이라는 클래스는 실제 회사의 프로그램을 개발한다고 했을 때 사용해서는 안되는 클래스라고 할 수 있다. 왜냐하면 A라는 회사에 직원 중 어느 부서에 해당되지 않고 자기 마음대로 회사를 출근하고 퇴근하는 직원은 존재하지 않을 것이기 때문이다. 하지만 Employee 라는 클래스가 존재하는 이상 일반 사용자에게 메뉴얼을 작성해 “Employee 클래스는 다른 특정직원 클래스를 만들기 위한 클래스입니다.”라고 하기 전에는 Employee의 본래의미를 모르고 Employee 의 객체를 생성하여 사용할 수 있다. 물론 이 것은 원래 개발을 한 개발자의 의도와는 상관이 없는 잘못된 사용이지만 이를 막을 수 없는 것이다. 즉 다음과 같은 소스 코딩을 막을 수 없다.
        Employee s1 = new Employee("홍길동", “12345");     
        s1.gotoTheOffice();

만약 Employee 클래스는 사용하기 보다는 다른 클래스에 상속되여 새로운 직원 클래스를 만드는 것이 바람직하다는 의미를 소스 코드에 부여한다면 개발자의 Employee 클래스 개발 의도를 사용자가 쉽게 알 수 있게 될 것이다. 이 때 사용되는 키워드가 abstract 키워드이다. 이 키워드가 클래스에 붙으면 이 클래스는 추상클래스라는 의미이다.


앞서 작성한 Emplopyee 클래스에는 없지만 이를 상속받은 모든 클래스에서 정의하고 재정의하여 사용하고 있는 startJob 이라는 메소드를 Employee에서 추상메소드로 선언하여 정의할 수 있다
       
상속의 개념으로만 본다면 이러한 추상클래스는 굳이 만들 필요가 없다. 추상클래스가 아니더라도 위와 같은 상속과 메소드의 재정의는 얼마든지 가능하기 때문이다. 하지만 수퍼타입(super type)을 이용한 다형성(Polymorphism)의 측면에서 추상클래스(Abstract Class)는 유용하게 쓰일 수 있다.
       
A라는 직원이 회사에 입사했는데 처음에는 디자인팀에 있다가 얼마 후 프로그램개발팀로 소속을 옮기게 되었다. 그러다가 경력을 쌓아 프로그램개발팀장으로 까지 진급하게 되었다. 이렇게 한 사람의 직원은 시간에 따라 때로는 상황에 따라 여러가지 모습으로, 여러가지 업무를 담당하게 된다. 바로 이런 것을 가능하도록 객체를 설계하는 것이 바로 다형성의 구현이다. 즉 실생활의 회사 직원처럼 상황과 시간에 따라 여러가지 모습을 지니는 다형성을 구현할 수 있게 되는 것이다. 모든 직원의 하위클래스들을 수퍼 타입(상위클래스)로 형변환하면 가능하다.

클래스는 필드로 기본자료형, 클래스 등이 올 수 있지만 인터페이스는 int, double 등의 기본 자료형만이 필드로 사용될 수 있다. 또한 각 필드는 반드시 초기화가 되어야 한다. 초기화가 되어야 하는 이유는 인터페이스의 필드는 암시적으로 final과 static이 설정되어 있기 때문이다.

        int maxSmall = 5  à static final int maxSmall = 5;

인터페이스는 메소드를 선언만 하고 구현하지는 않는다. 그리고 인터페이스의 모든 메소드는 접근지정이 기본적으로 public으로 설정된다. 그리고 모든 메소드는 추상메소드이다. 즉 아래의 void driveSmallCar();라는 선언은 암시적으로 설정되는 public과 abstract 키워드를 추가하면 다음과. 같이 선언되어 있는 것과 같다.

                public abstract void driveSmallCar();

인터페이스
추상메소드로 이루어진 클래스라 할 수있다.
Interface와 구현(implementation)의 분리
다중상속의 일부 기능 지원(한가지 인터페이스로 여러 구현을 실행할 수 있다)
인터페이스의 모든 메소드는 자동적으로 public abstract이다
인터페이스의 모든 변수는 자동적으로 public static final이다.
객체의 Instance를 생성할 수 없음
메소드의 구현을 갖지 않으며, 몸체부분은 세미콜론으로 대체된다.
클래스가 인터페이스를 구현하게 되면 인터페이스 내에 정의된 상수는 상속된 것 처럼 직접 사용할 수 있다.


인터페이스와 추상 클래스
추상메소드를 가지고 있고 이를 상속받거나 구현하는 클래스는 이 추상 메소드를 재정의하고 구현해야 한다는 점, 그리고 다형성을 구현하는 방법이라는 점, 메소드들이 동적으로 바인딩 된다는 점들은 비슷하다.
       
차이점
- 인터페이스는 서로 연관성이 없는 클래스들에 의해 구현될 수 있고 따라서 수평적인 구현이 가능하지만 추상클래스의 경우 단일 상속 개념 하에 수직적인 구조로 상속을 해야만 한다.

- 인터페이스에서는 메소드를 선언만 할 수 있으며 구현할 수 없다. 그리고 이 구현은 인터페이스를 구현하도록 설정된 클래스에서 가능하다. 하지만 추상클래스의 경우에는 추상 클래스 내부에서 메소드의 선언과 구현이 모두 가능하며 또한 이를 상속 받은 클래스에서도 재정의가 가능하다.

2013년 8월 8일 목요일

[ORACLEJAVA커뮤니티]자바 제어문, 반복문

이번 강좌에서는 자바의 제어문과 반복문에 대해 알아 보기로 하겠습니다.



오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  



1. 제어문(if else)

형식 :

if (boolean- 수식 ) 문장

if (boolean- 수식 ) 문장 else 문장



if문에 대해서는 별다른 설명이 필요 없을것 같습니다. (당연하죠^^)

[예제]

class IfTest {
public static void main( String args[] ) {
int i=3;
if (i%3 == 0)
System.out.println("3의 배수");
else if (i % 3 == 1)
System.out.println("3의 배수 + 1");
else
System.out.println("3의 배수 + 2 ");
}
}



[결과]

3의 배수



2. 제어문 (switch, case, break)

정수를 조건으로 해서 해당되는 실행문을 실행 하게 합니다. break 의 경우 자신을 둘러싸는 가가운 {} 를 벗어난 다음으로 실행 순서를 옮깁니다. default 는 case 로 명시하지 못한 정수 값 일때(이도 저도 아닐때)수행 되 는 겁니다.

[예제]

class SwitchTest
{
public static void main( String args[] )
{
func(1);
func(2);
}

static void func(int i)
{
switch( i % 3 )
{
case 0:
System.out.println( "3의 배수 " );
break;
case 1:
System.out.println( "3의 배수 + 1" );
default:
System.out.println( "3의 배수 + 2" );
}
}
}

[결과]
3의 배수 + 1
3의 배수 + 2
3의 배수 + 2

3. 제어문 (for, continue)

지정된 조건이 해당될 때까지 문장 ( 혹은 블록 ) 을 실행하는 반복문 입니다.For 문의 괄호 안은 3 가지 부분으로 나뉘어져 있는데 구 분 세미콜론 (;) 이며 첫번째 부분은 초기치 , 두 번째 부분은 조건 , 세번째 부분은 증감 부분 입니다.(다들 아시죠^^). 복잡한 다중 루프인 경우에는 label 을 사용하여 기존 언어의 goto문의 효과를 나타낼 수 있습니다.

continue 명령을 사용하면 그 이후부터 블록의 끝까지를 수행하지 않고(Skip해 버림) for 문이 있는 곳으로 제어를 이동 시킵니다. continue 에 label 을 기술하여 그 label 이후부터 다시 실행하게 할 수 있으며 Break 명령어의 경우도 label 을 써서 중첩된 구조를 빠져 나올 수 있으나 continue 와는 다르게 다음 반목 문을 수행하지 않습니다. For(;;) 의 경우 무한반복을 수행하며 빠져 나오기 위 해서는 별도의 조건을 이용하여 break 로 빠져 나옵니다 .

[예제]

//ForTest.java
class ForTest {
public static void main(String[] args) {
myLabel :
for(int i=0; i < 9; i++) { >
for(int j=0; j < 5; j++) { >
if (i % 2 ==0) {
System.out.println("continue myLabel");
continue myLabel;
}
else if (i == 5) {
System.out.println("break myLabel");
break myLabel;
}
System.out.println(i + " " + j);
}
}
}
}




[결과]
continue myLabel
1 0
1 1
1 2
1 3
1 4
continue myLabel
3 0
3 1
3 2
3 3
3 4
continue myLabel
break myLabel


4. 제어문 (while, do while)

‘ for ' 문과 마찬가지로 반복 수행을 가능하게 해주는 제어문 이며 지정된 조건이 참인 동안에 수행된다 .while문인 경우 만약 조건에 맞지 않다면 한번도 수행되지 않을 수 있지만 do~while문은 일단 한번 수행한 후 조건을 비교하므로 최소 한번은 수행한다는 것이 차이가 있습니다.

[예제]

//While.java
class While {
public static void main(String[] args) {
//1부터 10까지의 합을 구합니다.
int i=0, sum=0;
while(i<10) { >
i++;
sum += i;
}
System.out.println("while문으로 구한 합 : " + sum);

i=0; sum=0;
do
{
i++;
sum += i;
}while (i<10); >
System.out.println("do~while문으로 구한 합 : " + sum);
}

[결과]
while문으로 구한 합 : 55
do~while문으로 구한 합 : 55 

[오라클자바커뮤니티, JAVAORACLE교육]자바 JVM의 메모리 구죠, 자바교육

JAVA JVM의 메모리 구조


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  




JVM 의 실행 메모리 영역

메쏘드(method) 영역 : 클래스의 메소드에 대한 바이트코드, 전역변수(클래스 변수)
힙(heap) 영역 : 객체를 저장할때 사용하는 메모리
스택(stack) 영역 : 지역변수,함수의 인자,함수의 리턴값,리턴 번지
레지스터(registers) : 가상 머신의 현재 상태를 보여줌, 현재 실행되고 있는 메소드의 실행 포인터를 저장
실행 풀(Runtime Constant Pool) : 숫자 리터럴과 상수 필드 포함, 메소드 영역으로 부터 할당 받는다.


JVM 의 실행 메모리 영역 ]


메소드 내에서 객체 참조형으로 선언된 변수인 경우(String s = new String("abc") 일때의 s) 지역변수로서 스택에 위치하며 힙에 저장되어 있는 객체에 대한 참조값을 가지게 됩니다.
객체 참조형 변수의 값이 null 이라는 의미는 아무것도 참조하고 있지 않다는 의미 입니다.
New 연산자는 힙(heap) 메모리에 객체를 만들고 그 객체의 참조값을 반환 합니다.(Hello h = new Hello()) ---> Memory Heap에 Hello 클래스의 인스턴스(객체)를 만들고 그것을 스택에 있는 h라는 변수가 참조하도록 합니다. C에서의 포인터 변수와 유사 합니다.)
객체 참조 변수의 경우 대입, 메소드 호출시의 인자, 반환형 등으로 사용 될 때 참조 값만 전달 될 뿐, 객체 자체가 복제되어 전달되는 것은 아닙니다.
아래의 예제를 참고하세요

class C
{
public static void
main(String[] args)
{
int i = 3;
f(i);
}
static void f(int arg)
{
int i = 10;
double f = 3.14
}
}


이상 JVN의 메모리 영역에 대해 살펴 보았습니다.







2013년 8월 4일 일요일

Oracle View...(오라클 뷰)

A. . 정의
- View는 하나 이상의 Table또는 다른 View에 포함된 데이터를 원하는대로 나타낸 것
- View는 내장질의또는 가상 Table등으로 표현할수 있다.
- View는 Table에서 파생되므로 둘사이에는 많은 유사성이 있다. 예를들어 Table과 같이 최대
254개의 Column이 있는 View를 정의할수 있고 뷰를 질의하고 몇가지 제한 사항을 사용하여 뷰를
갱신,삽입,삭제를 할수있다.  뷰에대해 수행되는 모든 작업은 뷰의 기본 Table에 있는 Data에
실제 영향을 주며 기본 Table의 무결성 제약조건과 트리거를 따른다.
- 뷰에는 저장영역이 할당되지 않으며 실제로 Data를 포함하지도 않는다.
B. 처리방법
- Oracle은 View를 정의하는 질의 Text를 Data Dictionary(user_views)에 저장한다,
- Oracle은 기존공유 SQL영역에 동일한 멸령이 들어있지 않을때만 새로운 공유 SQL영역에 뷰를
참조하는 명령문을 Parsing합니다. 따라서 뷰를 사용시 공유 SQL영역과 관련하여 메모리 사용이
감소하는 이익이 있다.
- Oracle은 원래 질의를 뷰정의 질의와 병합할 때 원래 뷰를 변형하여 뷰에 대한 질의에 인덱스를
사용할지를 결정한다.

Create view emp_view as
    Select emp_no, ename, sal, loc
    From emp
    Where emp.deptno = dept.deptno
    And dept.deptno = 10;

<사용자 Query>
select ename from emp_view
where empno = 9876;


select ename
from emp, dept
where emp.deptno = dept.deptno
and  dept.deptno = 10
and  emp.empno = 9876;

Oracle은 가능한 모든 경우에 뷰에대한 질의를 뷰정의 질의 및 기본뷰 질의와 병합한다. 또한 뷰를
참조하지않고 질의를 발생하는 것 처럼 병합된 질의를 최적화한다.
따라서 Column이 뷰 정의 또는 뷰에대한 사용자정의에서 참조되는지의 여부에 관계없이 모든 참조된
기본 Table의 Column에 대한 Index를 사용한다.
만약 뷰에대한 정의와 사용자 질의를 병합할수 없다면 Index를 사용하지 않을수 있다.

C. 갱신가능한 Join View
- Join View란 From절에 하나이상의 Table또는 View를 가지며, Distinct, group by, start with,
connect by, rownum, union all, intersect, for update등의 절에서는 사용하지 않는다.

- 갱신가능한 Join View는 둘이상의 기본 Table 및 View를 포함하며 Update/Insert/Delete등의
작업이 가능하다.

- Dictionary View인 all_updatable_columns,윰_updatable_columns, user_updatable_colums
에는 갱신가능한 View의 Column을 나타낸다.

- Join View에 대한 Insert/Update/Delete등의 작업은 한번에 하나의 기본 Table에서만 가능하며,
With Check Option을 사용하여 View를 정의하는 경우에는 반복된 Table의 모든 Join Column과 모
든 Column은 갱신할수 없으며, Insert명령문은 허용되지 않는다.또한 with Check Option을
사용하여 뷰를 정의하고 키예약 Table이 반복되는 경우에는 뷰에서 행을 삭제할수 없다.

D. View생성
 - Create View명령을 사용한다.
예] create view sales_staff as
      select empno, ename, deptno
      from emp
      where deptno =10
      with check option constraint sales_staff_cnst;

    위에서 check option은 뷰가 선택할수 없는 행에 대해서는 Insert와 Update명령문이
    실행되지 않는다는 제약 조건을 갖는다.
    만약 위의 View에 deptno가 30인 행을 Insert하려고 하면 RollBack되고 오류가 발
    생한다.
E. View수정하기
위에서 만든 staff View를 재정의 하는경우
create or replace view sales_staff_view as
      select empno, ename, deptno
      from emp
      where deptno =30
      with check option constraint sales_staff_cnst;
F. View의 삭제
 - drop view sales_staff_view; 

[출처] 오라클자바커뮤니티, 오엔제이프로그래밍