[WPF공부하기5]네임페이스

 

 

이번글은 네임페이스에 대하여 알아보겠습니다. ^-^

다들 OracleJava공부하자 티스토리 방문하시어 열공 하고 계시죠??!!!

파이팅입니다!!!! ^-^

 

using A;

usting B;

namespace A{

class Simple{

public static void Write() {

system.Console.WriteLine("name A")

}

}

}

namespace B{

class Simple{

public static void Write()  {

}

}

}

 

class Test

{

public static void

Main(string[] args)

{

simple.Write();

Console.ReadLine();

}

}

// 결과는 컴파일 에러 .... 어디서인가?

 

 

class Test

{

public static void

Main(string[] args)

{

A.Simple.Write();

System.Console

.ReadLine();

}

}

//결과를 보면

// name  A

 

네임페이스에 대한 설명입니다.

 

System.Console.WriteLine()

첫줄에 using System; 을 하는 경우 Console.WriteLine() 로만 쓸 수 있다.

using System; 을 쓰지 않는 경우 System.Console.WriteLine()과 같이 써야함

 

Simple.Write()

using A;와 using B; 가 있기 때문에 simple 클래스가 어느 네임스페이스의 클래스인지 알 수 없다.

->  error

 

A.Simple.Write()와 같이 명시적으로 알려주면 문제가 해결됨

 

네임스페이스는 다른 네임스페이스 내부에서 새로 생성될 수 있다.

 

ex]

NameA.NameAB.NameABC.ClassA.MethodA()

 

 

 

네임페이스

 

닷넷, WPF공부를 원하신다면 아래글을 클릭해 보세요 ^0^

닷넷교육과정 보러가기

 

 

[자바공부하기 10]인터페이스

 

지난글에서 여러가지 기능을 가진 유연한 클래스를 만드기 위해 다중상속만을 지원하는 자바는 또다른 방법을 고안해야한다 했다. 그리고 그것이 버로 인터페이스라고 글을 올렸는데.. 이번글은 인터페이스에 대해서 알아보도록한다.

 

인터페이스

 

- 인터페이스라는 단어는 두개의 장치 및 시스템을 결합하고 있는 소프트웨어 또는 하드웨어라는 의미이다.

- 상수와 추상메소드의 집합

- 클래스가 인터페이스를 구현하게 되면 인터페이스 내에 정의된 상수는 상속된 것 처럼 직접 사용할 수 있다.

- 인터페이스의 모든 메소드는 abstract가 생략되었다고 해도 암시적으로 abstract이다.

- 메도스의 구현을 갖지 않으며, 몸체부분은 세미콜론으로 대체된다.

- 오직 abstract 메소드만을 포함할 수 있으며 클래스 메소드는 abstract가될 수 없으므로 인터페이스의 모든 메소드는 인스턴스 메소드이다.

 

 

직원 중 운전을 할 수 있는 직원이 있으며 이 직원은 회사에서 보유하고 있는 차량을 사용할 수 있다. 만약 모든 직원이 자동차 면허를 가지고 있다면 Employee 클래스에서 자동차 면허에 대한 필드와 메소드를 만들면 되지만 모든 직원이 자동차 면허를 가지고 있을리는 없을 것이다. 때문에 다중 상속이 지원되지 않는 자바에서 자동차 면허를 가지고 있는 직원 클래스를 따로 만들고 그 클래스를 이용해 면허를 가진 영업팀 직원, 면허를 가진 Manager, 면허를 가진영업팀장 이라는 식의 클래스를 만들어야 구현이가능하다.

 

Employee 클래스와 DriverEmployee 클래스가 서로 클 연관성이 없으며 운전을 할 줄 아는 직원을 만들기 위해 DriverEmployee 클래스를 따로 만들고 각 팀 직원들도 운전하는 직원을 따로 만들어야한다면 프로그램 개발 시 일관성이 없고 복잡해 진다. 이런 문제를 해결하기 위해 운전하는 직원을 클래스로 따로 만드는 대신 운전이라는 인터페이스를 만들어 필요할 때 사용할 수 있으면 위와 같은 문제점을 해결 할 수 있을 것이다.

 

인터페이스는 모양은 클래스와 비슷하다. 허나 다른점이 있다. 클래스는 필드와 메소드로 구성되어 있고 또 그 메소드는 자신이 할 일을 구현하고 있다. 하지만 인터페이스는 선언만을 하게 된다. 만약에 2종 운전 면허에 대한 인터페이스 SmallDriver를 작성한다면 다음과 같다.

  

  public interface SmallDriver { 
          void driveSmallCar(); // 메소드 선언 
          int maxSmall = 5; // 필드(상수) 
      } 

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

 

  int maxSmall = 5   static final int maxSmall = 5;

 

 

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

public abstract void driveSmallCar();

 앞에서 만든 SmallDriver 인터페이스를 상속한 1종 운전면허 인터페이스 BigDriver를 만든다면 다음과 같다.

 

      public interface BigDriver extends SmallDriver { 
          void driveBigCar(); 
          void driveSmallCar(); // 다시 선언하는 경우 
          int maxBig = 15; 
      } 

 

 

 

상위 인터페이스에서 선언된 메소드를 하위클래스에서 동일한 명칭으로 선언한 경우 경우에 따라 두가지로 나눌 수 있다. 
첫째는 상위 인터페이스의 메소드와 하위 인터페이스의 메소드 선언이 완전히 동일한 경우이다. 상위 인터페이스의 메소드만 유효한 것으로 인정하고 컴파일 에러는 발생하지 않는다.
둘째는 상위 인터페이스의 메소드와 하위 인터페이스의 메소드가 가지는 매개변수의 갯수가 서로 틀린 경우인데 이 경우는 각각 서로 다른 메소드가 선언된 것으로 간주한다. 즉 메소드가 오버로딩 된 것으로 인식하는 것이다.
하지만 위 두가지의 경우에 해당되지 않고 이름과 매개변수가 같은데 반환형만 다른 경우는 컴파일 에러가 발생하게 된다
예를 들어 SmallDriver에 선언되어 있는 상수 maxSmall을 BigDriver에서 다시 선언한다면? 이 경우 메소드는 하나만 인정하지만 상수의 경우는 범위 규칙에 의해서 SmallDriver의 maxSmall과 BigDriver의 maxSmall을 서로 다른 것으로 인식하여 두개의 상수가 선언된 것으로 인정한다. 사용시에는 상수의 위치에 따라 인터페이스명 상수명의 형태로 사용해야 한다.

 

인터페이스에서 선언된 메소드의 구현은 인터페이스를 구현하도록 허락된 클래스에서 구현하게 된다.

인터페이스를 상속받는 클래스는 컴파일러에게 "나는A라는 클래스인데 인터페이스 B를 완성해서 도구로 사용할꺼야" 라고 알려준다.

public class A implements B {
만약 영업팀 직원이 운전을 하는것을 구현할려고 하면 기존의 영업팀직원 클래스가 driveSmallCar()를 구현해야 하며 그렇게 하기 위해서는 interface를 implement한다고 클래스에 표시해야 한다.


 

//인터페이스 선언
interface SmallDriver { 
  void driveSmallCar(); // 메소드 선언 
  int maxSmall = 5; // 필드(상수) 
}
//직원 Class
abstract class Employee {
    String name;    String id;
  //생성자
    public Employee(String name1, String id1) {
name = name1;        id = id1;
    }
    public void gotoOffice() { System.out.println(name+"님 출근하였습니다..."); }
    public void gotoHome() {  System.out.println(name+"님 퇴근하였습니다..."); }
    public String toString() { return "직원의 이름은 " + name + "이다.";    }
    abstract public void startJob();
}

 


//직원클래스를 상속한 영업팀직원 클래스
class SalesEmployee extends Employee implements SmallDriver{
    //영업담당지역, 차종류 메소드내에서만 변수에 접근이 가능하다.


    private String chargeArea, carName;
    public SalesEmployee(String newName,String newID,String newArea,String carName) {
        //super는 상위클래스의 생성자를 의미
        super(newName, newID); this.chargeArea = newArea; this.carName    = carName;
    }
// SmallDrive 인터페이스의 메소드 구현 
    public void driveSmallCar() { 
System.out.println("영업팀 직원 " + name + "은 " + this.carName + "를 운전한다.");
    }
    public void startJob() {
        System.out.println(super.name + "님이 " + this.chargeArea + " 지역으로 영업업무를 나갑니다...");
    }
}
//Main Class
class InterfaceSample1 {
    public static void main(String[] args) {
        // 인터페이스가 클래스의 객체를 참조하도록...
        SmallDriver sm1 = new SalesEmployee("홍길동", "11111","서울", "아반테");       
        // 인터페이스의 메소드 사용
        sm1.driveSmallCar();
    }

 

 

 

 

[자바공부하기 10]인터페이스

 

JAVA초보에서 Web & Spring, MiPlatForm까지

과정보러가기 ↑↑ 클릭해보세요 ^^

 

 

[자바공부하기 9]자바와 다중상속

 

 

인터페이스를 공부하기전에 앞서 자바와 다중상속에 관하여 간단하게 알아보도록하겠습니다.

 

자바와 다중상속

 

- 다중상속이라는 것은 말 그대로 하나의 클래스가 여러개의 수평적 상위클래스를 갖는 것이다.

 

- 다중상속은 사용이 어렵고 오류를 범하기 쉬울 뿐 아니라 만약 사용한다고 하더라도 문법이 복잡해져 객체지향 기술 중에서도 많이 사용되지 않는 기능이다. 물론 다중상속을 이용하면 하나의 클래스가 여러가지 일을 할 수 있는 기능을 제공할 수 있고 덕분에 유연한 프로그래밍이 가능해진다는 장점이 있다.

 

- C++과 같은 언어는 이러한 다중상속을 지원하지만 Java는 다중상속을 지원하는 것을 포기했다. 자바를 만든 이유는 작고 단순하고 안전한 프로그램을 만들자는 것이었다. 다중상속은 이러한 프로그램의 안정성을 저해하는 요소가 될 수 있기에 다중상속을 포기하게 된 것이다.

 

- 여전히 여러가지 기능을 가지는 클래스의 존재는 객체지향언어인 자바에서는 자주 필요하게 된다. 여러가지 기능을 가진 유연한 클래스를 만들기 위해 다중상속만을 지원하는 자바는 또다른 방법을 고안해야했다. 이것이 바로 인터페이스이다.

 

다음글에서 인터페이스에 대해 알아보도록하겟습니다. ^^.

 

 

[자바공부하기 9]자바와 다중상속

 

초보자를 위한 JAVA,JSP 실무강좌

 

HTML 공부2.

 

HTML공부 2번째입니다. 파이팅합시다!!

 

이번글은 글자 크기에 대해서 공부를 해볼께요 ^^

메모장에다가 입력하시는거 아시죠??^^

 

 

<html>

<head>

<title> OracleJava공부하기</title>

</head>

<body>

글자크기 연습입니다.

 

<h1> h1의 글자크기입니다.</h1>

<h2> h2의 글자크기입니다.</h2>

<h3> h3의 글자크기입니다.</h3>

<h4> h4의 글자크기입니다.</h4>

<h5> h5의 글자크기입니다.</h5>

<h6> h6의 글자크기입니다.</h6>

</body>

</html>

 

저장은 html공부2.html 로 하였습니다. ^^

 

결과를 볼까요??

 

 

 

 

글씨가 제대로 보이지 않네요 ㅠㅠ 나름 최선을 다했지만 ㅠㅠ

글씨크기는 h1이 제일 크고 숫자가 커질 수록 글자크기는 작아진다는 사실!! 기억하세요 ^^

 

 

 표준웹 실무교육 - www.oraclejava.kr 로 확인해 보세요 ^^

HTML 공부2.

 

 

'웹표준' 카테고리의 다른 글

[HTML 공부하기 5] <p align="위치" >  (0) 2014.05.26
HTML 공부하기 4] <pre> 태그  (0) 2014.05.24
HTML공부하기 3 ] <br> 태그, <p> 태그  (0) 2014.05.24
HTML 공부 1.  (0) 2014.05.21
HTML개념 & 구성요소  (0) 2014.05.19

HTML 공부 1.

 

HTML을 공부해 보겠습니다.

메모장으로 연습을 할겁니다. 시작이 반이라 했으니 다들 퐈이팅하자구요 ^-^

 

실행하기.

<html>
<head>
<title>
OracleJava공부하기
</title>
</head>
<body>

html공부하기1
</body>
</html>

 

 

<html>, <head>, <title>, <body> 이 네가지는 html의 기본 요소로 지난글에서도 이야기를 했습니다.

 

저장은 html공부1.html로 저장을 했습다.

 

결과.

 

 

 

간단하게 html 공부 1 의 작성하였습니다.

차근차근 다음글에서 만나요..

 

 

 

잠깐만요!! 웹퍼블리싱 초급과정 보고가실까요?? ^^

과정명

초보자를위한웹퍼블리싱 기초부터 실무과정

[평일단기]

강좌일정

6/23 ~ 6/27

09:30 ~ 18:30

내용을 자세하게 보시려면 클릭을 눌러주세요 ^^

 

'웹표준' 카테고리의 다른 글

[HTML 공부하기 5] <p align="위치" >  (0) 2014.05.26
HTML 공부하기 4] <pre> 태그  (0) 2014.05.24
HTML공부하기 3 ] <br> 태그, <p> 태그  (0) 2014.05.24
HTML 공부2.  (0) 2014.05.22
HTML개념 & 구성요소  (0) 2014.05.19

[WPF공부하기4]Simple C# Program

 


 

// A simple C# Program

using System;

namespace FirstCS

{

class simpleClass

{

public static void Main(string[] args)

{

Console.writeLine("First C# Program")

Console.ReadLine();

}

}

}

 

이름을 쓰는 법

 

* Namespace.class.method

 

ex) System.Console.WriteLine();

 

이름 짓기

namespace

* 되도록 유일한 이름을 포함할것.

 

클래스

* 문제를 해결하는 객체의 이름을 사용

 

좋은예) Console, ShoppingCart

나쁜예) write

 

메소드

* 동작을 나타내기 때문에 주로 동사로 시작.

 

좋은예) WriteLine, IsValid

나쁜예) Console

 

-공통-

* 관습적으로 첫 글자는 대문자를 사용한다.

 

ex) SimpleClass

* 이름이 두 개 이상의 단어로 구성된 경우, 각 단어의 첫 문자는 대문자를 쓴다.

 

 

 

Simple C# Program

 

★ 잠깐만요!!! WPF 교육과정 알아보고 가실께요 ^^

5/28 ~ 6/3  평일주간 단기

수강료

 670,000원

환급액

대기업 16만원, 중소기업 20만원 환급 (전후입니다.)

과정을 자세하게 보고싶으시다면

클릭을 눌러주세요!!

 

 

[자바공부하기 8]

추상클래스

 

간단하게 말해서는 클래스를 만들기 위해 미리 정의해 둔 클래스의 틀을 추상클래스라 말한다.

 

앞글에서 Employee 클래스와 직원의 하위 클래스를 예로 들어보자.

직원이라는 클래스는 일반관리자(Manager), 영업팀직원(SaleEmployee), 영업팀장(SaleChief)등을 만들기 위해 작성된 클래스라고 할 수있다. 사실 직원이라는 클래스는 실제 회사의 프로그램을 개발한다고 했을 때 사용해서는 안되는 클래스라고 할 수있다. 왜냐하면 A라는 회사에 직원 중 어느 부서에 해당되지 않고 자기 마음대로 회사를 출근하고 퇴근하는 직원은 존재하지 않을 것이다.

하지만 Employee 라는 클래스가 존재하는 이상 일반 사용자에게 메뉴얼을 작성해 "Employee 클래스는 다른 특정직원 클래스를 만들기 위한 클래스입니다." 라고 하기 전에는 Employee의 본래의미를 모르고 Employee의 객체를 생성하여 하용할 수 있다.

물론 이 것은 원래 개발을 한 개발자의 의도와는 상관이 없는 잘못된 사용이지만 이를 막을 수 없는 것이다.

즉 다음과 같은 소스 코딩을 막을 수 없다.

 

Employee e1 = new Employee("홍길동", “12345"); 
      e1.gotoTheOffice(); 

 

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

이 때 사용되는 키워드가 abstract 키워드이다. 이 키워드가 클래스에 붙으면 이 클래스는 추상클래스라는 의미이다. 
앞서 작성한 Emplopyee 클래스에는 없지만 이를 상속받은 모든 클래스에서 정의하고 재정의하여 사용하고 있는 startJob 이라는 메소드를 Employee에서 추상메소드로 선언하여 정의할 수 있다.

 

 

//직원 Class
abstract class Employee {
    String name;
    String id;
  //생성자
    public Employee(String name1, String id1) {
        name = name1;
        id = id1;
    }
    public void gotoOffice() {
        System.out.println(name+"님 출근하였습니다...");
    }
    public void gotoHome() {
        System.out.println(name+"님 퇴근하였습니다...");
    }
    abstract public void startJob();  //추상메소드, 상속받은 하위클래스에서 구현
}

 

상속의 개념으로만 본다면 이러한 추상클래스는 굳이 만들 필요가 없다. 추상클래스가 아니더라도 위와 같은 상속과 메소드의 재정의는 얼마든지 가능하기 때문이다. 하지만 수퍼타입을 이용한 다형성의 측면에서 추상클래스는 유용하게 쓰일 수 있다.

A라는 직원이 회사에 입사했는데 처음에는 인사팀에 직원으로 있다가 얼마 후 영업팀으로 소속을 옮기게 되었다. 그러다가 경력을 쌓아 영업팀장으로 까지 진급하게 되었다. 이렇게 한 사람의 직원은 시간에 따라 때로는 상황에 따라 여러가지 모습으로 여라가지 업무를 담당하게 된다. 바로 이런 것을 가능하도록 객체를 설계하는 것이 바로 다형성의 구현이다.

 

여기서 문제?!

Employee 클래스의 객체가 때에 따라서는 Manager가 되고 또는 SalesCmployee가 되기도 하고 SalesChief가 되기도 할 수는 없을까..?

 

그렇게 할 수 있다면 실생활의 회사 직원처럼 상황과 시간에 따라 여러가지 모습을 지니는 다형성을 구현할 수 있게 되는 것이다.

 

답 : 가능하다.

모든 직원의 하위클래스들은 상위클래스(지난글에서 다뤘음 ^^)로 형변환하면 가능하다.

 

class Example2 {

public static void main(String[] args) {

Employee e1, e2, e3;

e1 = new Manager("피구", "33333", "개발팀")

e2 = new SalesEmployee("호나우두", "22222", "서울")

e3 = new SalesChief("히딩크", "11111", "전국", 5000)

e1.startJob();

e2.startJob();

e3.startJob();

}

}

 

 

[자바공부하기 8] 추상클래스

HTML개념 & 구성요소

 

HTML을 공부하기 앞서 HTML의 개념과 구성요소에대해 알고 가는 시간을 갖도록 하겠습니다.

 

HTML

HTML은 Hyper Text Markup Language의 약자로 웹을 통해 볼 수 있는 문서를 만들기 위한 표준언어이다.

또한 HTML로 만들어진 문서는 웹 프라우저를 통해 해석이 가능하다.

HTML의 구성 요소를 보면 <html>문서표시, <title>제목, <head>머리말, <body>본문 

이 4가지는 기본중의 기본요소입니다.

 

HTML을 시작할 때는 항상 <html>로 문서의 시작을 알려야합니다.

Head 사이에 들어가는 내용은 실제로 웹브라우저 내에 출력되지 않는 정보들이 주를 이룹니다. 다만, 이 안에 들어가는 문서의 제목이 브라우저 창의 제목표시줄에 나타나게 됩니다.

Title 사이에 들어가는 문자열은 웹프라우저 창의 제목표시줄에 웹문서의 제목을 표시합니다.

Body웹문서에 나타나는 일반적인 내용은 대부분의 경우 와 태그 안에 놓이게 됩니다.

그러므로 대부분의 문서를 디자인하는 방대한 분량의 태그와 내용들이 이 안에 놓여지게 됩니다.

 

 

HTML개념 & 구성요소

 

잠시만요!!! HTML과정 알아보고 가실께요~~

1. 초보자를위한 웹퍼블리싱 기초부터 실무과정

2. 표준웹 & HTML5&jQueyr&Ajax 실무과정

 

과정을 더 자세하게 보시길 원한다면 클릭눌러주세요~~

 

더 열심히 it공부합시다!!>ㅡ<

'웹표준' 카테고리의 다른 글

[HTML 공부하기 5] <p align="위치" >  (0) 2014.05.26
HTML 공부하기 4] <pre> 태그  (0) 2014.05.24
HTML공부하기 3 ] <br> 태그, <p> 태그  (0) 2014.05.24
HTML 공부2.  (0) 2014.05.22
HTML 공부 1.  (0) 2014.05.21

+ Recent posts