반응형
public class test  
{
public static void main(String[] args)  
{
java.util.Enumeration e = System.getProperties().propertyNames();

while(e.hasMoreElements()){
String obj = (String)e.nextElement();

System.out.print(obj + " ===> ");
System.out.println(System.getProperty(obj));
}
}
}


: result
java.runtime.name ===> Java(TM) 2 Runtime Environment, Standard Edition
sun.boot.library.path ===> C:\j2sdk1.4.2_03\jre\bin
java.vm.version ===> 1.4.2_03-b02
java.vm.vendor ===> Sun Microsystems Inc.
java.vendor.url ===> http://java.sun.com/
path.separator ===> ;
java.vm.name ===> Java HotSpot(TM) Client VM
file.encoding.pkg ===> sun.io
user.country ===> KR
sun.os.patch.level ===> Service Pack 4
java.vm.specification.name ===> Java Virtual Machine Specification
user.dir ===> C:\Documents and Settings\Administrator\바탕 화면
java.runtime.version ===> 1.4.2_03-b02
java.awt.graphicsenv ===> sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs ===> C:\j2sdk1.4.2_03\jre\lib\endorsed
os.arch ===> x86
java.io.tmpdir ===> C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\
line.separator ===>

java.vm.specification.vendor ===> Sun Microsystems Inc.
user.variant ===>
os.name ===> Windows 2000
sun.java2d.fontpath ===>
java.library.path ===> C:\j2sdk1.4.2_03\bin;.;C:\WINNT\system32;C:\WINNT;.;C:\j2
sdk1.4.2_03\bin;C:\oracle\ora92\bin;C:\Program Files\Oracle\jre\1.3.1\bin;C:\Pro
gram Files\Oracle\jre\1.1.8\bin;C:\WINNT\system32;C:\WINNT;C:\WINNT\System32\Wbe
m;F:\apache-ant-1.5.3-1\bin;C:\Program Files\SecureCRT\;C:\Program Files\SSH Com
munications Security\SSH Secure Shell
java.specification.name ===> Java Platform API Specification
java.class.version ===> 48.0
java.util.prefs.PreferencesFactory ===> java.util.prefs.WindowsPreferencesFactor
y
os.version ===> 5.0
user.home ===> C:\Documents and Settings\Administrator
user.timezone ===>
java.awt.printerjob ===> sun.awt.windows.WPrinterJob
file.encoding ===> MS949
java.specification.version ===> 1.4
user.name ===> Administrator
java.class.path ===> .;
java.vm.specification.version ===> 1.0
sun.arch.data.model ===> 32
java.home ===> C:\j2sdk1.4.2_03\jre
java.specification.vendor ===> Sun Microsystems Inc.
user.language ===> ko
awt.toolkit ===> sun.awt.windows.WToolkit
java.vm.info ===> mixed mode
java.version ===> 1.4.2_03
java.ext.dirs ===> C:\j2sdk1.4.2_03\jre\lib\ext
sun.boot.class.path ===> C:\j2sdk1.4.2_03\jre\lib\rt.jar;C:\j2sdk1.4.2_03\jre\li
b\i18n.jar;C:\j2sdk1.4.2_03\jre\lib\sunrsasign.jar;C:\j2sdk1.4.2_03\jre\lib\jsse
.jar;C:\j2sdk1.4.2_03\jre\lib\jce.jar;C:\j2sdk1.4.2_03\jre\lib\charsets.jar;C:\j
2sdk1.4.2_03\jre\classes
java.vendor ===> Sun Microsystems Inc.
file.separator ===> \
java.vendor.url.bug ===> http://java.sun.com/cgi-bin/bugreport.cgi
sun.cpu.endian ===> little
sun.io.unicode.encoding ===> UnicodeLittle
sun.cpu.isalist ===> pentium i486 i386


가끔 OS 및 JVM에 의존적인 환경변수들을 가져올 필요가 있습니다.
그럴때, API 레퍼런스를 찾아보면 나오지만, 그래도 정리를 해 봅니다..

Key Description of Associated Value
java.version Java Runtime Environment version
java.vendor Java Runtime Environment vendor
java.vendor.url Java vendor URL
java.home Java installation directory
java.vm.specification.version Java Virtual Machine specification version
java.vm.specification.vendor Java Virtual Machine specification vendor
java.vm.specification.name Java Virtual Machine specification name
java.vm.version Java Virtual Machine implementation version
java.vm.vendor Java Virtual Machine implementation vendor
java.vm.name Java Virtual Machine implementation name
java.specification.version Java Runtime Environment specification version
java.specification.vendor Java Runtime Environment specification vendor
java.specification.name Java Runtime Environment specification name
java.class.version Java class format version number
java.class.path Java class path
java.library.path List of paths to search when loading libraries
java.io.tmpdir Default temp file path
java.compiler Name of JIT compiler to use
java.ext.dirs Path of extension directory or directories
os.name Operating system name
os.arch Operating system architecture
os.version Operating system version
file.separator File separator ("/" on UNIX)
path.separator Path separator (":" on UNIX)
line.separator Line separator ("\n" on UNIX)
user.name User's account name
user.home User's home directory
user.dir User's current working directory

반응형

자바 컴파일과 실행 에 사용되어지는 javac, java 명령어의 옵션 을 다음과 같이 정리하였습니다.

javac - 자바컴파일러로써, 자바코드를 작성한 소스파일(.java)을 자바 가상머신이 인식할수 있는 바이트 코드(.class)
타입으로 변환시켜주는 명령어 입니다.

사용법: javac <options> <souce files>
예를들어, Hello.java, Greeting.java 두개의 파일이 존재한다면,
javac Hello.java Greeting.java
javac *.java (*을 사용해서, 모든 확장자가 .java인 파일을 컴파일할수 있다.)

1) 옵션:


a) -classpath:

 -classpath(cp) path(파일 절대 경로):
 컴파일러가 컴파일 하기 위해서 필요로 하는 참조할 클래스 파일들을 찾기 위해서 컴파일시 파일 경로를 지정해주는
옵션. 예를 들어,  Hello.java파일이 C:\Java 디렉터리에 존재하고, 필요한 클래스 파일들이 C:\Java\Engclasses에 위치한다면,
javac -classpath C:\Java\Engclasses C:\Java\Hello.java 로 해주면 된다. 만약 참조할 클래스 파일들이 C:\Java\Engclasses외의
다른 디렉터리에도 존재한다면, C:\Java\Korclasses 일경우,
javac -classpath C:\Java\Engclasses;C;\Java\Korclasses C:\Java\Hello.java
그리고, 현재 디렉터리역시 포함하고 싶다면,
javac -classpath .;C:\Java\Engclasses;C;\Java\Korclasses C:\Java\Hello.java
기본적으로, dos에서는 .는 현재 디렉터리를 의미하고, ..는 현재 디렉터리의 상위디렉터리를 의미한다.
또한 classpath 대신 단축어인 cp를 사용해도 된다.
javac -cp C:\Java\Engclasses C:\Java\Hello.java 

b) -d:
 -d directory
 클래스 파일을 생성할 루트 디렉터리를 지정합니다.
기본적으로 컴파일러는 -d옵션을 주지 않으면, 소스파일이 위치한 디렉터리에 클래스 파일을 생성시킵니다.
예를 들어,  Hello.java파일이 C:\Java 디렉터리에 존재하고 클래스 파일의 루트디렉터리를 C:\Java\Classfiles라고 하면,
javac -d C:\Java\Classfiles C:\Java\Hello.java 입니다.

만약 -d 옵션을 사용하려고 하는데, 루트디렉터리(위예에서는 C:\Java\Classfiles) 가 존재 하지 않는다면,
"The system cannot find the path specified"라는 에러 메시지를 보게 됩니다.
현재 작업 디렉터리가 C:\Java\Classfiles 에 위치하면,
javac -d .\Classfiles Hello.java 와 같이 상대 디렉터리로 표현할수 있습니다.

c) -encoding:
-encoding encoding name
소스 파일에 사용된 문자열 인코딩을 설정합니다.
만약 위옵션이 설정되어 있지 않으면, 플래폼의 기본적인 컨버터가 사용되어 집니다.

d) -g:
모든 디버깅 정보를 생성시킵니다.
만약 위옵션이 설정되어 있지 않으면, 기본적으로, 라인넘버만 생성시킵니다.
-g:none: 디버깅 정보를 전혀 생성 시키지 않습니다.
-g:{lines, vars, source}:
위처럼 명시적으로, 몇몇 디버깅 정보를 생성시킬수 있습니다.
lines은 라인정보, vars는 지역변수, sounce는 소스 파일 정보를 나타냅니다.

e) -nowarn:

경고 메시지 (warning message)를 생성시키지 않습니다.

f) -verbose:

컴파일러와 링커가 현재 어느 소스파일이 컴파일되고 있고, 어느 파일이 링크되고 있는지
그정보를 출력한다.

h) -deprecation:

소스 코드내에서, 사용되어진 deprecated API의 위치 를 출력 합니다.

ex)
C:\Java> javac World.java
Note: World.java uses a deprecated API. Recompile with "-deprecation" for details
.
1 warning
C:\Java> javac -deprecation World.java
World.java:52: Note: The method java.awt.Dimension size() in class java.awt.Compon
ent has been deprecated.
Dimension d = size();

Note: World.java uses a deprecated API. Please consult the documentation for a be
tter alternative.

i) -sourcepath:

-sourcepath 소스패스

소스파일의 위치를 지정합니다.

j) -target:

-target 자바버젼

지정된 자바버젼의 VM에서 작동 되어지도록 클래스파일을 생성 시킵니다.

1.1
jvm 1.1 버젼에서 호환되어질수 있는 클래스 파일생성
1.2
jvm 1.2 버젼에서 호환되어질수 있는 클래스 파일생성
1.3
jvm 1.3 버젼에서 호환되어질수 있는 클래스 파일 생성

ex)

javac -target 1.2 Helloworld.java

k) -bootclasspath 패스:

특정한 bootstrap또는 확장 클래스를 지정할수 있다.
기본적으로, 자바컴파일러는 javac(컴파일러명령)이 설치된 플래폼의 bootstrap과 확장클래스들을 통해서, 컴파일작업을 수행하지만,
bootclasspath 옵션을 사용하면, cross-compiling이라고 해서, 다른 자바플래폼의 bootstrap과 확장클래스들을 통해서, 컴파일 할수 있는 기능을 지원한다.
예를들어,
javac -target 1.1 -bootclasspath jdk1.1.7/lib/classes.zip -extdirs "" OldCode.java
컴파일러에게 현재 자신의 bootstrap을 사용하지 말고, jdk1.1.7/lib/classes.zip bootstrap클래스들을 사용해서 컴파일 하라고
명령하는것이다.
참고로, 모바일자바에서, 모바일폰에 설정된, jvm에 맞도록, 소스코드를 컴파일하기 위해서, 주로 사용되어지는 옵션이다.

l) -extdirs 디렉터리:
특정한, 확장 디렉토리를 지정한다.cross-compiling시 주로, 사용되어지는 옵션이면, 각디렉터리들은 콜론(:)에 의해서, 분리되어진다.
컴파일시, 기술한 디렉터리의 클래스 파일을 참조한다.

자바프로그램(Java Application)을 실행시켜 주는 명령어이다.


사용법:java <options> <classfiles> <argument> 또는
          java <options> -jar file.jar <argument>

options: 옵션
classfiles: 호출될 클래스 파일 이름
file.jar: 호출될 jar파일 이름
argument:main함수에 파라미터로 보내질 문자열


예를들어, main함수를 포함하는 Hello.class 파일이 존재할경우,
java Hello 로 프로그램을 실행시킬수 있는데, 확장자인 class는 생략할수 있지만,
대소문자는 구별하므로, 정확하게 기입해야 한다.
java Hello Greeting 처럼 Greeting을 덧붙일경우, main함수에 문자열인자로 Greeting을 보낼수 있다.

 

a) -client:
자바 HotSpot Client VM을 선택한다. (디폴트 값이다)

 

b) -server:
자바 HotSpot Server VM을 선택한다.

 

c) -classpath (-cp):
참조할 클래스 파일 패스를 지정하는데, jar파일, zip파일, 클래스파일의 디렉터리 위치를 기술한다.
각 클래스파일 패스는 콜론(:)을 통해서, 분리시켜 기술한다
자바VM은  자바프로그램을 로딩시, -classpath로 지정된 클래스 패스나, java플래폼이 설치된, 운영체제에서의
환경변수로 지정된, 클래스패스를 통해서, 클래스 파일들을 참조하게 된다.

 

d) -D <property name>=<property value>:
시스템의 property 값을 설정한다.

ex) java -Djava.library.path=. HelloWorld

자바의 시스템 property(속성)중 "java.library.path"값을 "." (현재디렉터리)로 지정해서, HelloWorld 실행시켜라는 의미 이다.

위와같이 자바VM에 지정된 속성을 실행시 -D옵션을 사용해서, 변경, 지정할수 있다.

 

e) -jar 파일이름:

jar파일로 압축되어져 있는 자바 프로그램을 실행시킨다.

클래스 파일이름 대신 jar파일을 사용해서, 압축되어져 있는 자바 프로그램을 실행시킬수 있는데, 위프로그램이 제대로 실행되어지기 위해서, Jar파일안의 manifest라는 텍스트 파일에 Main-Class:classname 같은 형태의 텍스트 라인이 포함되어 있어야 한다.

그리고, 여기에 기술된 classname은 main함수를 포함하고 있는 클래스 이름이 되어야 한다.

 

f) -verbose:

자바프로그램 실행되어지는 정보를 화면에 출력해준다.

-verbose:class

로딩되어지는 각클래스들의 정보를 화면에 출력한다.

-verbose:gc

garbage collection 이벤트를 화면에 출력한다.

-verbose:jni

native 함수들과 다른 자바 native 인터페이스 사용에 대한 정보를 출력한다

 

g) -version:

현재 JVM의 버젼 정보만 출력한다

 

h) -showversion:

현재 JVM의 버젼정보를 출력한다.

java -showversion HelloWolrd

와 같이 자바 프로그램을 실행시키면서, 자바 버젼정보를 출력할수 있다.

 

i) -X

비표준 자바옵션 리스트를 화면에 출력해준다.

 

i-1) -Xms, -Xmx

자바를 구동시, JVM이 사용가능한 최대 메모리 사이즈를 변경합니다.

JVM이 자바프로그램을 구동하기 위해, 초기설정된 메모리사이즈는 64M입니다.

사용방법은 다음과 같습니다

java -Xms <초기힙사이즈> -Xmx <최대힙사이즈>

예를들어, Hello.class 자바 프로그램을 시작시, 256M(메가)의 힙사이즈를 할당하며, 최대 512M의 힙사이즈를 할당받고 싶다면,  다음과같이 합니다.

java -Xms256m -Xmx512m Hello

###################################################################

###################################################################

Usage: javac <options> <source files>
where possible options include:
  -g                                  Generate all debugging info
  -g:none                          Generate no debugging info
  -g:{lines,vars,source}     Generate only some debugging info
  -nowarn                         Generate no warnings
  -verbose                        Output messages about what the compiler is doing
  -deprecation                   Output source locations where deprecated APIs are used
  -classpath <path>           Specify where to find user class files and annotation processors
  -cp <path>                     Specify where to find user class files and annotation processors
  -sourcepath <path>         Specify where to find input source files
  -bootclasspath <path>      Override location of bootstrap class files
  -extdirs <dirs>                Override location of installed extensions
  -endorseddirs <dirs>       Override location of endorsed standards path
  -proc:{none,only}            Control whether annotation processing and/or compilation is done.
  -processor <class1>[,<class2>,<class3>...]

                                      Names of the annotation processors to run; bypasses default discovery process
  -processorpath <path>      Specify where to find annotation processors
  -d <directory>                 Specify where to place generated class files
  -s <directory>                 Specify where to place generated source files
  -implicit:{none,class}      Specify whether or not to generate class files for implicitly referenced files
  -encoding <encoding>       Specify character encoding used by source files
  -source <release>          Provide source compatibility with specified release
  -target <release>            Generate class files for specific VM version
  -version                         Version information
  -help                             Print a synopsis of standard options
  -Akey[=value]                Options to pass to annotation processors
  -X                                 Print a synopsis of nonstandard options
  -J<flag>                         Pass <flag> directly to the runtime system
 
 
 
 
Usage: java [-options] class [args...]
          (to execute a class)
  or  java [-options] -jar jarfile [args...]
          (to execute a jar file)

where options include:
   -client   to select the "client" VM
   -server   to select the "server" VM
   -hotspot   is a synonym for the "client" VM  [deprecated]
                 The default VM is client.
                
   -cp <class search path of directories and zip/jar files>
   -classpath <class search path of directories and zip/jar files>
                 A ; separated list of directories, JAR archives, and ZIP archives to search for class files.
   -D<name>=<value>
                 set a system property
   -verbose[:class|gc|jni]
                 enable verbose output
   -version      print product version and exit
   -version:<value>
                 require the specified version to run
   -showversion  print product version and continue
   -jre-restrict-search | -jre-no-restrict-search
                 include/exclude user private JREs in the version search
   -? -help      print this help message
   -X            print help on non-standard options
   -ea[:<packagename>...|:<classname>]
   -enableassertions[:<packagename>...|:<classname>]
                 enable assertions
   -da[:<packagename>...|:<classname>]
   -disableassertions[:<packagename>...|:<classname>]
                 disable assertions
   -esa | -enablesystemassertions
                 enable system assertions
   -dsa | -disablesystemassertions
                 disable system assertions
   -agentlib:<libname>[=<options>]
                 load native agent library <libname>, e.g. -agentlib:hprof
                   see also, -agentlib:jdwp=help and -agentlib:hprof=help
   -agentpath:<pathname>[=<options>]
                 load native agent library by full pathname
   -javaagent:<jarpath>[=<options>]
                 load Java programming language agent, see java.lang.instrument
   -splash:<imagepath>
                 show splash screen with specified image
 

M) package 선언된 Java class 실행시키기

- package위치는 CLASSPATH 하위 폴더부터로 인식한다. 따라서 Package폴더의 Root가 ClassPath에 지정되든지

.(현위치)를 ClassPath에 등록 후 현 위치 아래서부터 package의 위치를 지정한다.

java package.class명 (현위치 아래에 package폴더가 존재)

java com.test.SampleMain

반응형

출처 : http://itkang.egloos.com/tb/516166


VB.NET에서의 객체지향 프로그래밍


VB.NET은 JAVA처럼 완벽한 객체지향을 지원한다.  VB.NET에서 어떠한 식으로 객체지향프로그래밍이 이루어지는지 예를 들어 살펴보기로 하자.

1-1. 네임스페이스, 클래스, 객체, 모듈

   ✱ 네임스페이스

VB.NET에서는 특정한 목적을 가진 클래스나 데이터 구조체들을 네임스페이스의 형태로 묶는다. 프로그래머는 단순하게 네임스페이스를 임포트(Import)함으로써, 네임스페이스의 클래스들을 사용할 수 있다. Imports라는 키워드를 사용하여 네임스페이스를 프로젝트에 임포트 한다. .NET프레임워크는 다양한 네임스페이스를 통하여 많은 클래스들을 지원하고 있다. 본 예제에서는 System이라는 네임스페이스를 사용한다.

Imports System


    ✱ 클래스

우리는 이미 클래스와 객체에 대하여 잘 알고 있다. 간단히 말하자면 클래스는 실생활에 존재하는 객체(Object)의 정의이다. 예를 들면 Human이라는 클래스는 인간을 표현하는 클래스이고, Dog이라는 클래스는 모든 개들을 표현하는 클래스이다. VB.NET에서는 아래의 예처럼 클래스를 정의한다. VB.NET에서의 클래스는 함수(Function), 변수, 속성(Property)등을 포함할 수 있다.


Imports System

Namespace Animals

Class Dog

   Function Bark()

      Console.Writeline ("Dog is barking")

   End Function

End Class

End Namespace


    ✱ 객체

객체는 클래스의 인스턴스(사례)이다. 예를 들면 Jimmy는 Dog의 한 개체이다. 클래스란 하나의 틀이고, 이틀을 이용하여 객체를 찍어내어 사용한다고 볼 수 있다. 다음과 같이 객체들을 생성하고 사용한다..








Public Module modMain

Sub Main()


Dim Jimmy as Animals.Dog

Jimmy = new Animals.Dog()


Dim Merry as Animals.Dog

Merry = new Animals.Dog


Jimmy.Bark()  ‘ --> Dog 클래스내의 Bark함수 호출

Merry.Bark()

End Sub

End Module


마치 변수를 선언하듯 Dog이라는 형태의 Jimmy변수와 Merry변수를 선언한다. Animals란 네임스페이스내의 Dog이라는 클래스가 있기 때문에 Animals.Dog이라는 표현을 사용하였다.

Jimmy = new Animals.Dog와 Merry = new Animals.Dog에서 객체를 생성한다. 


   ✱ 모듈

앞의 예제에서 우리는 모듈을 이미 사용하였다. 우리는 공통 함수(Function과 Sub)을 작성하기 위하여 모듈을 사용한다. 즉 모듈은 함수들의 집합체이다. public으로 선언된 함수들은 어디서든지 사용될 수 있다. 모듈에 작성된 여러 함수들 중 Main()함수를 제일 먼저 실행한다.


1-2. 접근형식

주된 접근형식으로는 Public, Private, Friend 그리고 Protected가 있다. 앞에서 언급 했듯이 클래스는 함수와 변수 등을 포함할 수 있는데, 우리는 함수와 변수 앞에 접근형식을 선언할 수 있다. 만약 접근형식이 Public으로 선언되었다면, 객체를 생성함으로써 해당 함수나 변수를 사용할 수 있다. Private나 Protected로 선언된 함수나 변수는 클래스 내의 함수들만 사용할 수 있다. Private와 Protected의 다른점은 Protected는 클래스를 상속하면 사용할 수 있다는 것이다. Friend는 동일 프로젝트내에서는 접근이 가능하다. 아래의 예는 Public과 Private의 사용 예를 보여준다.


Imports System

Namespace Animals

Public Class Dog

   Public AgeOfDog as Integer  ‘  --> Public변수

   Public Function Bark()       '  --> Public 함수 Bark

       Console.Writeline ("Dog is barking")

   End Function


   Private Function Walk()    ' --> Private 함수 Walk

        Console.Writeline ("Dog is walking")

   End Function

End Class

End Namespace


Public Module modMain

Sub Main()

    ourFunction()
End Sub


Function ourFunction()

    Dim Jimmy as Animals.Dog

    Jimmy = new Animals.Dog()

    Jimmy.Bark   '--> Bark가 Public으로 선언되어 있기 때문에 실행된다.

    Jimmy.AgeOfDog = 10  ‘ --> AgeOfDog이 Public으로 선언되어 있으므로 실행된다.

    Jimmy.walk           ‘ --> walk가 Private로 선언되어 있으므로 오류 발생

End Function

End Module 


1-3. Shared 함수

클래스내의 Shared멤버는 객체를 생성하지 않고도 사용할 수 있다.


Imports System

Namespace Animals

Public Class Dog

   Public Shared Function Bark()       '  --> Public 함수 Bark

       Console.Writeline ("Dog is barking")

   End Function


   Private Function Walk()    ' --> Private 함수 Walk

        Console.Writeline ("Dog is walking")

   End Function

End Class

End Namespace


Public Module modMain

Sub Main()

    Animals.Dog.Bark()  ‘--> Bark함수가 Shared로 선언되었기 때문에 객체를 생성하지
                         ’않고도 함수를 실행할 수 있다.

    Dim Jimmy as Animals.Dog

   Jimmy = new Animals.Dog()

   Jimmy.walk()  ' --> walk는 shared로 선언되지 않았기 때문에 객체생성후 사용

End sub

End Module 


우리가 지금 까지 사용한 Writeline함수는 Shared함수 이기 때문에 객체를 생성하지 않고 사용할 수 있다.


1-4. 오버로딩

오버로딩이란 동일한 이름을 갖는 함수를 파라미터를 다르게 줌으로써 각각 다른 함수처럼접근할 수 있도록 해주는 기술이다.


Imports System

Class Adder

   Overloads Public Sub Add(A as Integer, B as Integer)

       Console.Writeline ("Adding Integers: " + Convert.ToString(a + b))

   End sub


   Overloads Public Sub Add(A as String, B as String)

       Console.Writeline ("Adding Strings: " + a + b)

   End sub

   Shared Sub Main()

      Dim AdderObj as Adder

      AdderObj = new Adder

      AdderObj.Add(10, 20)

      AdderObj.Add("hello", " how are you")

   End sub

End Class


위의 예제를 보면 Add라는 이름을 갖는 두개의 함수가 존재하나 각각의 인자(Parameter)가 서로 다르기 때문에 별개의 함수로 인식된다. 오버로딩을 사용하기 위해서는 함수 앞에 Overloads라는 키워드를 사용하여야 한다. Main함수를 클래스 내부에 작성할 때는 Shared키워드를 사용하여 객체를 생성하지 않고 실행될 수 있도록 해 주어야 한다.


1-5 상속

상속이란 프로그램의 재사용성을 높이기 위한 객체지향프로그래밍의 핵심적 기술이다. 다시 말하면 이미 만들어진 클래스를 다시 이용하는 방법을 말한다. 클래스를 상속받은 클래스(Derived Class)는 부모클래스(Base Class)의 속성을 그대로 물려받는다.


Imports System

Class Human

   Public sub Walk()

       Console.Writeline ("Walking")

    end Sub

End Class


Class Programmer

   Inherits Human

   Public sub Programming()
       Console.Writeline ("Programming")

   End Sub

End Class


Class MainClass

   Shared Sub Main()

      Dim Tom as Programmer

      Tom = new Programmer

      Tom.walk()   '--> Programmer클래스가 Human클래스를 상속했으므로 Human클래스의

                  ‘-->  함수를 이용할 수 있음

      Tom.Programming()

   End Sub

End Class       

1-6. 오버라이딩

기본적으로 상속받은 클래스는 부모클래스(Base Class)의 함수를 상속 받는다. 상속받은 함수를 재정의 하여 사용할 수도 있는데 이를 오버로딩이라고 한다.


Imports System

Class Human

   Overridable Public Sub Speak()

      Console.Writeline ("Speaking")

   End Sub

End Class


Class Korean

    Inherits Human

    Overrides Public Sub Speak()

       Console.Writeline ("Speaking Korean")

    End Sub

End Class


Class MainClass

   Shared Sub Main()

      Dim Lee as Human

      Lee = new Human

      Dim Kim as Korean

      Kim = new Korean

      Lee.Speak()

      Kim.Speak()

   End Sub

End Class


1-7. 생성자(Constructor)와 소멸자(Destructor)


생성자는 객체가 생성될때 자동으로 실행되는 특별한 함수의 하나이다. 생성자도 오버로딩하여 사용할 수 있는데 생성자에서는 Overloads란 키워드를 사용하지 않는다. 소멸자는 객체가 소멸될 때 자동으로 실행되는 특별한 함수이다.



Class Dog

   Private Age as Integer

   Public Sub New()   ' --> 생성자

      Console.Writeline ("Dog is created with age zero")

      Age = 0

   End Sub


   Public Sub New (Val as Integer)

      Console.Writeline("Dog is Created with age " + Convert.ToString(Val))

      Age = Val

   End Sub


   Overrides Protected Sub Finalize()  ' --> 소멸자

      Console.Writeline("Dog is destroyed")

   End Sub


   Shared Sub Main()
      Dim Jimmy, Jacky as Dog

      Jimmy = new Dog      '--> 디폴트 생성자를 실행

      Jacky = new Dog(10) ‘--> 인수를 갖고있는 생성자를 실행

   End Sub

   ‘ --> 프로그램 끝날 때 소멸자 실행

End Class


1-8. 속성(Property)

객체에 정보를 저장하기 위해 속성과 필드를 사용한다. 필드는 단순한 Public변수를 의미하나, 속성은 Get/Set키워드를 사용한다.


Imports System

Public Class Dog

   Private AgeOfDog as Integer

   Public Property Age() As Integer

     Get

        Console.Writeline("Getting Property")

        Return AgeOfDog

     End Get


     Set(ByVal Val As Integer)

        Console.Writeline("Setting Property")

        AgeOfDog = Val

     End Set

   End Property

End Class 


Class MainClass

   Shared Sub Main()
      Dim Jimmy as Dog

      Jimmy = new Dog

      Jimmy.Age = 30    '--> AgeOfDog변수를 직접 핸들링할 수 없다(Private) 그래서

                       ‘--> Age() Property루틴을 사용한다.

      Dim curAge = Jimmy.Age() ‘--> Age Get루틴이 실행된다.

   End Sub

End Class

+ Recent posts