- �바 언어� 특징.
- ìž�ë°”(Java)를 ì�´ì•¼ê¸°í• 때 í�¬ê²Œ ë‘� 가지로 나누어 ì�´ì•¼ê¸° í• ìˆ˜ 있습니다. ë¨¼ì €, 기계어, 어셈블리어(Assembly), í�¬íŠ¸ëž€(FORTRAN), 코볼(COBOL), 파스칼(PASCAL), ë˜�는 C 등과 ê°™ì�´ 프로그래ë°�ì�„ 하기 위해 사용하는 ìž�ë°” 언어가 ìžˆê³ , 다른 하나는 ìž�ë°” 언어를 ì�´ìš©í•˜ì—¬ 프로그래ë°� 하기 위해 ì‚¬ìš©í• ìˆ˜ 있는 ìž�ë°” API(Application Programming Interface)와 ìž�ë°” 프로그램ì�„ 실행시켜 주기 위한 ìž�ë°” ê°€ìƒ�ë¨¸ì‹ (Java Virtual Machine) 등ì�„ 가리키는 ìž�ë°” 플랫í�¼(Platform)ì�´ 있습니다. 다시 ë§�해서, ìž�ë°” 언어는 Visual C++와 ë¹„ìœ ë� 수 ìžˆê³ , ìž�ë°” 플랫í�¼ì�€ 윈ë�„ìš° 95/98/NT ë°� 윈ë�„ìš° 95/98/NT API와 ë¹„ìœ ë� 수 있습니다.
ìž�ë°” 언어(Java Language)를 ì�´ìš©í•˜ì—¬ 작성한 ìž�ë°” 프로그램(Java Program)ì�€ ìž�ë°” 컴파ì�¼ëŸ¬(Java Compiler)를 ì�´ìš©í•˜ì—¬ ìž�ë°” ë°”ì�´íŠ¸ì½”ë“œ(Java Byte code)로 컴파ì�¼ ë�˜ê³ , ì�´ ìž�ë°” ë°”ì�´íŠ¸ì½”ë“œëŠ” ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì—� ì�˜í•´ í•´ì„�ë�˜ì–´ 실행ë�˜ëŠ”ë�°, ì�´ë•Œ ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì�€ ìž�ë°” ë°”ì�´íŠ¸ì½”ë“œì—� 대한 í•´ì„�기 즉 ì�¸í„°í”„리터(interpreter)로 ë�™ìž‘하게 ë�©ë‹ˆë‹¤. ì�´ë ‡ê²Œ ìž�ë°” 프로그램ì�€ 컴파ì�¼ ë°©ì‹� ë°� ì�¸í„°í”„리터 ë°©ì‹�ì�´ 모ë‘� ì �ìš©ë�œë‹¤ëŠ” 것입니다.
�바 컴파�러(Java Compiler):
�바 바�트코드(Java Byte code):
컴퓨터는 ê°� CPUì—� ë”°ë�¼ 서로 다른 기계어를 갖습니다. ì�´ëŸ¬í•œ ì�´ìœ 때문ì—� ë�„스 ë˜�는 윈ë�„ìš° 95/98/NT 등ì�´ 설치ë�˜ì–´ 있는 컴퓨터ì—�서 실행ë�˜ëŠ” 프로그램ì�´ ìœ ë‹‰ìŠ¤ê°€ 설치ë�˜ì–´ 있는 컴퓨터ì—�서는 실행ë�˜ì§€ 않는 것입니다. 그러나, ìž�ë°” ë°”ì�´íŠ¸ì½”ë“œëŠ” ì�´ëŸ¬í•œ 플랫í�¼ì—� ìƒ�관없ì�´ ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì—� ì�˜í•´ 실행ë� 수 있ë�„ë¡� ì •ì�˜ë�œ 중간코드입니다. ë”°ë�¼ì„œ, ìž�ë°” ë°”ì�´íŠ¸ì½”ë“œë¡œ 컴파ì�¼ ë�˜ê¸°ë§Œ 하면, ìž�ë°” ì�¸í„°í”„리터ì�¸ ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì�´ 설치ë�˜ì–´ 있는 ê³³ì�´ë©´ ì–´ë””ì—�ì„œë“ ì‹¤í–‰ì‹œì¼œ 줄 수 있습니다. ì�´ëŠ” ìž�ë°” 개발ìž� ë˜�는 사용ìž�로 하여금 ìž�ë°” 프로그램ì�„ 개발하거나 ì‚¬ìš©í• ë•Œ ê·¸ 플랫í�¼ì�´ 윈ë�„ìš° 95/98/NT, ìœ ë‹‰ìŠ¤, ë˜�는 ë§¤í‚¨í† ì‹œì�¸ì§€ ì „í˜€ ì‹ ê²½ ì“°ì§€ 않아ë�„ ë�˜ë�„ë¡� 합니다.
ìž�ë°” ì�¸í„°í”„리터(Java Interpreter) ë˜�는 ìž�ë°” ê°€ìƒ�ë¨¸ì‹ (Java Virtual Machine):
ìž�ë°” ë°”ì�´íŠ¸ì½”ë“œ ëª…ë ¹ì–´ë¥¼ í•´ì„�í•˜ê³ , ì�´ë¥¼ ìž�ë°” ì�¸í„°í”„리터가 설치ë�˜ì–´ 있는 플랫í�¼(윈ë�„ìš° 95/98/NT, ìœ ë‹‰ìŠ¤, ë§¤í‚¨í† ì‹œ 등)ì—� 맞게 실행시켜 ì¤�니다. ìž�ë°” ì�¸í„°í”„리터는 ìž�ë°” ë°”ì�´íŠ¸ì½”ë“œë¥¼ 실행시켜 주기 위한 기능ì�„ ëª…ì„¸í•˜ê³ ìžˆëŠ” ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì�„ 구현해 놓ì�€ 것으로서 ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ê³¼ ê°™ì�€ ì�˜ë¯¸ë¡œ 사용ë�˜ë©°, 주로 ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ìœ¼ë¡œ ë§Žì�´ 사용ë�©ë‹ˆë‹¤.
ìž�ë°” ë°”ì�´íŠ¸ì½”ë“œëŠ” ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì—�서 실행ë�˜ëŠ” 기계어ë�¼ê³ ìƒ�ê°�하면 ë�©ë‹ˆë‹¤. ê·¸ë¦¬ê³ , ëª¨ë“ ìž�ë°” ì�¸í„°í”„리터는 ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì�„ 구현해 놓ì�€ 것으로, ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ê³¼ ìž�ë°” ì�¸í„°í”„리터를 ê°™ì�€ 것으로 ìƒ�ê°�í• ìˆ˜ 있습니다. . ì�´ëŸ¬í•œ ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì�€ JDK(Java Development Kit)ì—� í�¬í•¨ë�˜ì–´ 있ì�„ 수ë�„ ìžˆê³ , ìž�ë°” 호환 웹 브ë�¼ìš°ì € ë‚´ì—� 내장ë�˜ì–´ 있ì�„ 수ë�„ 있습니다. ë˜�는, ìž�ë°” 칩과 ê°™ì�´ 하드웨어ì—� ì§�ì ‘ 구현ë� 수ë�„ 있습니다. ìž�ë°” ë°”ì�´íŠ¸ì½”ë“œëŠ” “write once, run anywhereâ€�ë�¼ëŠ” ë§�ì�„ 가능하게 í•´ ì¤�니다. 다시 ë§�해서, ìž�ë°” 언어를 ì�´ìš©í•˜ì—¬ 작성한 ìž�ë°” 프로그램ì�„ ê°� 플랫í�¼(윈ë�„ìš° 95/98/NT, 리눅스, ìœ ë‹‰ìŠ¤, ë§¤í‚¨í† ì‹œ 등)ì—� 맞게 ì œê³µë�˜ëŠ” ìž�ë°” 컴파ì�¼ëŸ¬ë¥¼ 통해서 ë°”ì�´íŠ¸ì½”ë“œë¡œ 컴파ì�¼ í• ìˆ˜ 있습니다. ê·¸ë¦¬ê³ , ì�´ ë°”ì�´íŠ¸ì½”ë“œëŠ” ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì�´ 있는 ì–´ë–¤ ê³³ì—�서ë�„ 실행ë� 수 있습니다.
그림 2. 플랫í�¼ ë�…립ì �ì�¸ ìž�ë°”
플랫í�¼ì�´ëž€ 프로그램ì�´ 실행ë�˜ëŠ” 하드웨어 ë˜�는 ìš´ì˜�ì²´ì œì™€ ê°™ì�€ 소프트웨어ì �ì�¸ 환경ì�„ ë§�합니다. 대부분ì�˜ 플랫í�¼ì�€ 하드웨어와 ìš´ì˜�ì²´ì œë¥¼ 함께 ì�¼ì»¬ì–´ ë§�합니다. 그러나 ìž�ë°” 플랫í�¼ì�€ 하드웨어와 무관하게 ë�™ìž‘하는 오ì§� 소프트웨어ì �ì�¸ 플랫í�¼ì�´ëž€ ì �ì—�서 다른 플랫í�¼ê³¼ 다릅니다. ì�´ë¥¼ 위해 ìž�ë°” 플랫í�¼ì�€ 다ì�Œê³¼ ê°™ì�€ ë‘� 가지ì�˜ 구성요소를 갖습니다.
ìž�ë°” ê°€ìƒ�ë¨¸ì‹ (Java Virtual Machine; Java VM):
ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì�€ ìž�ë°” 플랫í�¼ì�˜ê¸°ë°˜ì�„ ì�´ë£¨ë©°, 다양한 하드웨어기반 플랫í�¼ì—� í�¬íŒ…(poring) ë�©ë‹ˆë‹¤. 다시 ë§�해서, ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì�€ 윈ë�„ìš° 95/98/NT, ìœ ë‹‰ìŠ¤, ë˜�는 ë§¤í‚¨í† ì‹œ 등과 ê°™ì�€ 기존ì�˜ ìš´ì˜�ì²´ì œ ë˜�는 ì�¸í„°ë„· ì�µìŠ¤í”Œë¡œëŸ¬ì™€ 넷스케ì�´í”„ 등과 ê°™ì�€ 웹 브ë�¼ìš°ì € 등, 여러 가지 플랫í�¼ì—� 설치ë�˜ì–´ 사용ë� 수 있으며, 사용ìž�는 ìž�ë°” ë°”ì�´íŠ¸ì½”ë“œë¡œ 컴파ì�¼ë�œ ìž�ë°” 프로그램ì�„ 실행시키기 위해서 ì�´ ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì�„ ì�´ìš©í•˜ë©´ ë�©ë‹ˆë‹¤.
�바 API(Java Application Programming Interface):
ìž�ë°” API는 윈ë�„ìš° API와 ê°™ì�´ ìš´ì˜�ì²´ì œì—�서 ì œê³µí•´ 주는 ë�¼ì�´ë¸ŒëŸ¬ë¦¬ì™€ ê°™ì�€ 것입니다. 다시 ë§�해서, ìž�ë°” 프로그램ì�„ 개발하기 위해 ì‚¬ìš©í• ìˆ˜ 있는 ë�¼ì�´ë¸ŒëŸ¬ë¦¬ ë˜�는 í�´ëž˜ìŠ¤ë“¤ì�´ë�¼ í• ìˆ˜ 있습니다. ì�´ëŸ¬í•œ ìž�ë°” API는 서로 ê´€ë ¨ë�œ í�´ëž˜ìŠ¤ë“¤ì�„ 묶어서 패키지 단위로 ì œê³µë�˜ê³ 있습니다.
ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì�€ ìž�ë°” 플랫í�¼ì�˜ê¸°ë°˜ì�„ ì�´ë£¨ë©°, 다양한 하드웨어기반 플랫í�¼ì—� í�¬íŒ…(poring) ë�©ë‹ˆë‹¤. 다시 ë§�해서, ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì�€ 윈ë�„ìš° 95/98/NT, ìœ ë‹‰ìŠ¤, ë˜�는 ë§¤í‚¨í† ì‹œ 등과 ê°™ì�€ 기존ì�˜ ìš´ì˜�ì²´ì œ ë˜�는 ì�¸í„°ë„· ì�µìŠ¤í”Œë¡œëŸ¬ì™€ 넷스케ì�´í”„ 등과 ê°™ì�€ 웹 브ë�¼ìš°ì € 등, 여러 가지 플랫í�¼ì—� 설치ë�˜ì–´ 사용ë� 수 있으며, 사용ìž�는 ìž�ë°” ë°”ì�´íŠ¸ì½”ë“œë¡œ 컴파ì�¼ë�œ ìž�ë°” 프로그램ì�„ 실행시키기 위해서 ì�´ ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì�„ ì�´ìš©í•˜ë©´ ë�©ë‹ˆë‹¤.
�바 API(Java Application Programming Interface):
ìž�ë°” API는 윈ë�„ìš° API와 ê°™ì�´ ìš´ì˜�ì²´ì œì—�서 ì œê³µí•´ 주는 ë�¼ì�´ë¸ŒëŸ¬ë¦¬ì™€ ê°™ì�€ 것입니다. 다시 ë§�해서, ìž�ë°” 프로그램ì�„ 개발하기 위해 ì‚¬ìš©í• ìˆ˜ 있는 ë�¼ì�´ë¸ŒëŸ¬ë¦¬ ë˜�는 í�´ëž˜ìŠ¤ë“¤ì�´ë�¼ í• ìˆ˜ 있습니다. ì�´ëŸ¬í•œ ìž�ë°” API는 서로 ê´€ë ¨ë�œ í�´ëž˜ìŠ¤ë“¤ì�„ 묶어서 패키지 단위로 ì œê³µë�˜ê³ 있습니다.
- ìž�ë°”ì�˜ 장ì � ë°� ì�´ì�µ
간단하다(Simple):
ìž�ë°”ì�˜ 주ë�œ 특징ì�€ 기존ì�˜ C/C++ 언어ì�˜ 문법ì�„ 기본ì �으로 ë”°ë¥´ê³ , C/C++ 언어가 갖는 ì „ì²˜ë¦¬ê¸°, í�¬ì�¸í„°, í�¬ì�¸í„° ì—°ì‚°, 다중 ìƒ�ì†�, ì—°ì‚°ìž� 중첩(overloading) 등 ë³µìž¡í•˜ê³ ì�´í•´í•˜ê¸° 난해한 특성들ì�„ ì œê±°í•¨ìœ¼ë¡œì�¨ 기존ì�˜ 프로그램 개발ìž�들ì�´ ì‰½ê³ ê°„ë‹¨í•˜ê²Œ 프로그램ì�„ ê°œë°œí• ìˆ˜ 있ë�„ë¡� 합니다.
ê°�체지향ì �ì�´ë‹¤(Object-Oriented):
ìž�바는 C++와는 달리 처ì�Œë¶€í„° ê°�체지향 ê°œë…�ì�„ 기반으로 하여 설계ë�˜ì—ˆê³ , ê°�체지향 언어가 ì œê³µí•´ 주어야 하는 ì¶”ìƒ�í™”(Abstraction), ìƒ�ì†�(Inheritance), ê·¸ë¦¬ê³ ë‹¤í˜•ì„±(Polymorphism) 등과 ê°™ì�€ 특성들ì�„ 모ë‘� 완벽하게 ì œê³µí•´ ì£¼ê³ ìžˆìŠµë‹ˆë‹¤. ë˜�한, ìž�ë°”ì�˜ ì�´ëŸ¬í•œ ê°�체지향ì � 특성ì�€ ë¶„ì‚° 환경, í�´ë�¼ì�´ì–¸íЏ/서버 기반 시스템ì�´ 갖는 요구사í•ë�„ 만족시켜 줄 수 있습니다.
높ì�€ ì‹ ë¢°ì„±(Reliability)ì�„ 갖는다:
ìž�바는 컴파ì�¼ 시ì—� ì—�러 검사를 ì² ì €í•˜ê²Œ í•˜ê³ , 실행 시ì—� ë°œìƒ�í• ìˆ˜ 있는 ì—�러ì—� 대해서ë�„ 실행 시ì—� ì² ì €í•˜ê²Œ 검사를 수행함으로ì�¨ ì‹ ë¢°ë�„ê°€ 높ì�€ 프로그램ì�„ ìž‘ì„±í• ìˆ˜ 있ë�„ë¡� í•´ ì¤�니다. ë˜�한, C/C++ 프로그램 개발ìž�들ì�„ 가장 혼란스럽게 í•˜ê³ , 프로그램ì�˜ 치명ì �ì�¸ 오류를 ë°œìƒ�시킬 수 있는 í�¬ì�¸í„° ë°� í�¬ì�¸í„° ì—°ì‚°ì�„ ìž�ë°”ì—�서는 사용하지 않게 함으로ì�¨, í�¬ì�¸í„°ë¥¼ 사용함으로ì�¨ 프로그래머가 ë²”í• ìˆ˜ 있는 오류를 없앴다는 것입니다.
보안성(Security)� 갖는다:
ìž�바는 분산환경ì—�서 ìž‘ë�™í•˜ë�„ë¡� 설계 ë�˜ì—ˆìŠµë‹ˆë‹¤. 그러나, ìž�바는 ìž�ë°” 언어와 ìž�ë°” 런타임 시스템 ë‚´ì—� 보안 기능ì�´ 내재ë�˜ì–´ 있기 때문ì—� 보안성ì�´ 있는 프로그램ì�„ ê°œë°œí• ìˆ˜ 있ë�„ë¡� í•´ ì¤�니다. ì�´ëŸ¬í•œ 특성ì�€ ìž�ë°” 프로그램ì�´ 네트ì›� 환경ì—�서 ë°”ì�´ëŸ¬ìФ 등과 ê°™ì�€ 프로그램ì�´ 파ì�¼ 시스템ì�„ íŒŒê´´í•˜ë ¤ëŠ” 것ì�„ 막ì�„ 수 있ë�„ë¡� í•´ ì¤�니다.
아키í…�ì³� 중립ì �(Architecture-neutral)ì�´ê³ ì�´ì‹�성(Portable)ì�´ 높다:
ìž�바는 서로 다른 ì�´ì¢…(Heterogeneous)ì�˜ 네트워í�¬ 환경ì—�서 ë¶„ì‚° ë�˜ì–´ 실행ë� 수 있ë�„ë¡� 설계ë�˜ì—ˆìŠµë‹ˆë‹¤. ì�´ì™€ ê°™ì�€ 환경ì—�서는 ì�‘ìš© 프로그램들ì�´ 다양한 하드웨어 아키í…�ì³� 위ì—�서 실행ë� 수 있어야만 합니다. ì�´ë¥¼ 위해 ìž�ë°” 컴파ì�¼ëŸ¬ëŠ” ì�´ì¢…ì�˜ 하드웨어 ë°� 소프트웨어 플랫í�¼ì—�서 효율ì �으로 코드를 ì „ì†¡í•˜ê¸° 위해 설계ë�œ 아키í…�ì³� 중립ì �ì�¸ 중간 코드ì�¸ ë°”ì�´íŠ¸ì½”ë“œë¥¼ ìƒ�성합니다. ì�´ëŠ” ë�™ì�¼í•œ ìž�ë°” 프로그램ì�˜ ìž�ë°” ë°”ì�´íŠ¸ì½”ë“œê°€ ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì�´ 설치ë�˜ì–´ 있는 ì–´ë–¤ 플랫í�¼ì—�서ë�„ 실행ë� 수 있ë�„ë¡� 하는 것입니다. ë˜�한, ìž�바는 기본 언어 ì •ì�˜ë¥¼ 엄격하게 함으로ì�¨ 효율ì �ì�¸ ì�´ì‹�성ì�„ ì œê³µí•´ ì£¼ê³ ìžˆìŠµë‹ˆë‹¤. 예를 들어, int 형과 ê°™ì�€ 기본 ë�°ì�´í„°í˜•ì�˜ í�¬ê¸°ë¥¼ 플랫í�¼ê³¼ 무관하게 ì�¼ì •하게 í•˜ê³ , ì—°ì‚°ìž�ì�˜ 기능ì�„ 확실하게 ê·œì •í•˜ê³ ìžˆìŠµë‹ˆë‹¤. C 언어를 ì�´ìš©í•˜ì—¬ int 형ì�„ ì„ ì–¸í• ë•Œ, ë�„스ì—�서는 16비트, 윈ë�„ìš° 95/98/NT 등 32비트 ìš´ì˜� ì²´ì œ 환경ì—�서는 32비트, ìœ ë‹‰ìŠ¤ì—�서는 32비트 등 ê·¸ 플랫í�¼ì—� ë”°ë�¼ í�¬ê¸°ê°€ 다르지만, ìž�ë°”ì—�서는 플랫í�¼ì—� ìƒ�관없ì�´ 32비트로 ê³ ì •ë�˜ë�„ë¡� 하였습니다. ì�´ëŠ” ìž�ë°” 프로그램ì�´ 실행ë�˜ëŠ” 환경ì�´ ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ìœ¼ë¡œ ë�™ì�¼í•˜ê¸° 때문입니다.
높ì�€ 수행성능(High-performance)ì�„ ì œê³µí•œë‹¤:
ìž�ë°”ì—�서는 ì�¸í„°í”„-리터가 런타임 환경ì�„ ê²€ì‚¬í• í•„ìš” ì—†ì�´ 실행ë� 수 있ë�„ë¡� 구성하였기 때문ì—� 뛰어난 성능ì�„ ì œê³µí•´ ì¤�니다. ì“°ë ˆê¸° 수집기(garbage collector) 즉 메모리 관리ìž�는 ìž�ë�™ìœ¼ë¡œ ë‚®ì�€ ìš°ì„ ìˆœìœ„ì�˜ 백그ë�¼ìš´ë“œ ìŠ¤ë ˆë“œë¡œ 실행ë�˜ì–´ 메모리가 í•„ìš”í• ë•Œì—�ë§Œ ë�™ìž‘하ë�„ë¡� 함으로ì�¨, ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì—�게 무리를 주지 않으면서 보다 나ì�€ 수행 성능ì�„ ì œê³µí• ìˆ˜ 있ë�„ë¡� í•´ ì¤�니다. ë˜�한, 방대한 ì–‘ì�˜ 계산ì�„ 수행하는 프로그램ì�€ 계산ì�´ ë§Žì�€ 부분ì�„ 본래ì�˜ 플랫í�¼ì—� 해당하는 기계어 코드로 재작성하여 ìž�ë°” 프로그램과 ì�¸í„°íŽ˜ì�´ìФ í• ìˆ˜ 있ë�„ë¡� 하였습니다.
�터프리터(Interpreter) 방��다:
ìž�ë°” 언어로 작성ë�œ ìž�ë°” 프로그램ì�„ 중간언어 형태ì�¸ ìž�ë°” ë°”ì�´íŠ¸ì½”ë“œë¡œ 컴파ì�¼í•˜ê³ , ì�´ë ‡ê²Œ ìƒ�성ë�œ ìž�ë°” ë°”ì�´íŠ¸ì½”ë“œë¥¼ ìž�ë°” ì�¸í„°í”„리터가 í•´ì„�함으로ì�¨, ìž�ë°” ì�¸í„°í”„리터와 런타임 시스템ì�´ ì�´ì‹�(porting)ë�œ ëª¨ë“ í”Œëž«í�¼ì—�서 ìž�ë°” ë°”ì�´íŠ¸ì½”ë“œë¥¼ ì§�ì ‘ ì‹¤í–‰í• ìˆ˜ 있습니다.
다중 ìŠ¤ë ˆë“œ(Multi-thread)를 ì§€ì›�한다:
ìž�ë°”ì�˜ 다중 ìŠ¤ë ˆë“œ 기능ì�€ ë�™ì‹œì—� ë§Žì�€ ìŠ¤ë ˆë“œë¥¼ 실행시킬 수 있는 프로그램ì�„ 만들 수 있ë�„ë¡� í•´ ì¤�니다. ìž�바는 ë�™ê¸°í™” 메소드들ì�„ 기본ì �으로 키워드로 ì œê³µí•¨ìœ¼ë¡œì�¨, ìž�ë°” 언어 수준ì—�서 다중 ìŠ¤ë ˆë“œë¥¼ ì§€ì›�í•´ ì¤�니다. ìž�ë°” APIì—�는 ìŠ¤ë ˆë“œë¥¼ ì§€ì›�í•´ 주기 위한 Thread í�´ëž˜ìŠ¤ê°€ 있으며, ìž�ë°” 런타임 시스템ì—�서는 모니터와 ì¡°ê±´ ìž ê¸ˆ 함수를 ì œê³µí•´ ì¤�니다.
ìž�ë°”ì�˜ 주ë�œ 특징ì�€ 기존ì�˜ C/C++ 언어ì�˜ 문법ì�„ 기본ì �으로 ë”°ë¥´ê³ , C/C++ 언어가 갖는 ì „ì²˜ë¦¬ê¸°, í�¬ì�¸í„°, í�¬ì�¸í„° ì—°ì‚°, 다중 ìƒ�ì†�, ì—°ì‚°ìž� 중첩(overloading) 등 ë³µìž¡í•˜ê³ ì�´í•´í•˜ê¸° 난해한 특성들ì�„ ì œê±°í•¨ìœ¼ë¡œì�¨ 기존ì�˜ 프로그램 개발ìž�들ì�´ ì‰½ê³ ê°„ë‹¨í•˜ê²Œ 프로그램ì�„ ê°œë°œí• ìˆ˜ 있ë�„ë¡� 합니다.
ê°�체지향ì �ì�´ë‹¤(Object-Oriented):
ìž�바는 C++와는 달리 처ì�Œë¶€í„° ê°�체지향 ê°œë…�ì�„ 기반으로 하여 설계ë�˜ì—ˆê³ , ê°�체지향 언어가 ì œê³µí•´ 주어야 하는 ì¶”ìƒ�í™”(Abstraction), ìƒ�ì†�(Inheritance), ê·¸ë¦¬ê³ ë‹¤í˜•ì„±(Polymorphism) 등과 ê°™ì�€ 특성들ì�„ 모ë‘� 완벽하게 ì œê³µí•´ ì£¼ê³ ìžˆìŠµë‹ˆë‹¤. ë˜�한, ìž�ë°”ì�˜ ì�´ëŸ¬í•œ ê°�체지향ì � 특성ì�€ ë¶„ì‚° 환경, í�´ë�¼ì�´ì–¸íЏ/서버 기반 시스템ì�´ 갖는 요구사í•ë�„ 만족시켜 줄 수 있습니다.
높ì�€ ì‹ ë¢°ì„±(Reliability)ì�„ 갖는다:
ìž�바는 컴파ì�¼ 시ì—� ì—�러 검사를 ì² ì €í•˜ê²Œ í•˜ê³ , 실행 시ì—� ë°œìƒ�í• ìˆ˜ 있는 ì—�러ì—� 대해서ë�„ 실행 시ì—� ì² ì €í•˜ê²Œ 검사를 수행함으로ì�¨ ì‹ ë¢°ë�„ê°€ 높ì�€ 프로그램ì�„ ìž‘ì„±í• ìˆ˜ 있ë�„ë¡� í•´ ì¤�니다. ë˜�한, C/C++ 프로그램 개발ìž�들ì�„ 가장 혼란스럽게 í•˜ê³ , 프로그램ì�˜ 치명ì �ì�¸ 오류를 ë°œìƒ�시킬 수 있는 í�¬ì�¸í„° ë°� í�¬ì�¸í„° ì—°ì‚°ì�„ ìž�ë°”ì—�서는 사용하지 않게 함으로ì�¨, í�¬ì�¸í„°ë¥¼ 사용함으로ì�¨ 프로그래머가 ë²”í• ìˆ˜ 있는 오류를 없앴다는 것입니다.
보안성(Security)� 갖는다:
ìž�바는 분산환경ì—�서 ìž‘ë�™í•˜ë�„ë¡� 설계 ë�˜ì—ˆìŠµë‹ˆë‹¤. 그러나, ìž�바는 ìž�ë°” 언어와 ìž�ë°” 런타임 시스템 ë‚´ì—� 보안 기능ì�´ 내재ë�˜ì–´ 있기 때문ì—� 보안성ì�´ 있는 프로그램ì�„ ê°œë°œí• ìˆ˜ 있ë�„ë¡� í•´ ì¤�니다. ì�´ëŸ¬í•œ 특성ì�€ ìž�ë°” 프로그램ì�´ 네트ì›� 환경ì—�서 ë°”ì�´ëŸ¬ìФ 등과 ê°™ì�€ 프로그램ì�´ 파ì�¼ 시스템ì�„ íŒŒê´´í•˜ë ¤ëŠ” 것ì�„ 막ì�„ 수 있ë�„ë¡� í•´ ì¤�니다.
아키í…�ì³� 중립ì �(Architecture-neutral)ì�´ê³ ì�´ì‹�성(Portable)ì�´ 높다:
ìž�바는 서로 다른 ì�´ì¢…(Heterogeneous)ì�˜ 네트워í�¬ 환경ì—�서 ë¶„ì‚° ë�˜ì–´ 실행ë� 수 있ë�„ë¡� 설계ë�˜ì—ˆìŠµë‹ˆë‹¤. ì�´ì™€ ê°™ì�€ 환경ì—�서는 ì�‘ìš© 프로그램들ì�´ 다양한 하드웨어 아키í…�ì³� 위ì—�서 실행ë� 수 있어야만 합니다. ì�´ë¥¼ 위해 ìž�ë°” 컴파ì�¼ëŸ¬ëŠ” ì�´ì¢…ì�˜ 하드웨어 ë°� 소프트웨어 플랫í�¼ì—�서 효율ì �으로 코드를 ì „ì†¡í•˜ê¸° 위해 설계ë�œ 아키í…�ì³� 중립ì �ì�¸ 중간 코드ì�¸ ë°”ì�´íŠ¸ì½”ë“œë¥¼ ìƒ�성합니다. ì�´ëŠ” ë�™ì�¼í•œ ìž�ë°” 프로그램ì�˜ ìž�ë°” ë°”ì�´íŠ¸ì½”ë“œê°€ ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì�´ 설치ë�˜ì–´ 있는 ì–´ë–¤ 플랫í�¼ì—�서ë�„ 실행ë� 수 있ë�„ë¡� 하는 것입니다. ë˜�한, ìž�바는 기본 언어 ì •ì�˜ë¥¼ 엄격하게 함으로ì�¨ 효율ì �ì�¸ ì�´ì‹�성ì�„ ì œê³µí•´ ì£¼ê³ ìžˆìŠµë‹ˆë‹¤. 예를 들어, int 형과 ê°™ì�€ 기본 ë�°ì�´í„°í˜•ì�˜ í�¬ê¸°ë¥¼ 플랫í�¼ê³¼ 무관하게 ì�¼ì •하게 í•˜ê³ , ì—°ì‚°ìž�ì�˜ 기능ì�„ 확실하게 ê·œì •í•˜ê³ ìžˆìŠµë‹ˆë‹¤. C 언어를 ì�´ìš©í•˜ì—¬ int 형ì�„ ì„ ì–¸í• ë•Œ, ë�„스ì—�서는 16비트, 윈ë�„ìš° 95/98/NT 등 32비트 ìš´ì˜� ì²´ì œ 환경ì—�서는 32비트, ìœ ë‹‰ìŠ¤ì—�서는 32비트 등 ê·¸ 플랫í�¼ì—� ë”°ë�¼ í�¬ê¸°ê°€ 다르지만, ìž�ë°”ì—�서는 플랫í�¼ì—� ìƒ�관없ì�´ 32비트로 ê³ ì •ë�˜ë�„ë¡� 하였습니다. ì�´ëŠ” ìž�ë°” 프로그램ì�´ 실행ë�˜ëŠ” 환경ì�´ ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ìœ¼ë¡œ ë�™ì�¼í•˜ê¸° 때문입니다.
높ì�€ 수행성능(High-performance)ì�„ ì œê³µí•œë‹¤:
ìž�ë°”ì—�서는 ì�¸í„°í”„-리터가 런타임 환경ì�„ ê²€ì‚¬í• í•„ìš” ì—†ì�´ 실행ë� 수 있ë�„ë¡� 구성하였기 때문ì—� 뛰어난 성능ì�„ ì œê³µí•´ ì¤�니다. ì“°ë ˆê¸° 수집기(garbage collector) 즉 메모리 관리ìž�는 ìž�ë�™ìœ¼ë¡œ ë‚®ì�€ ìš°ì„ ìˆœìœ„ì�˜ 백그ë�¼ìš´ë“œ ìŠ¤ë ˆë“œë¡œ 실행ë�˜ì–´ 메모리가 í•„ìš”í• ë•Œì—�ë§Œ ë�™ìž‘하ë�„ë¡� 함으로ì�¨, ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì—�게 무리를 주지 않으면서 보다 나ì�€ 수행 성능ì�„ ì œê³µí• ìˆ˜ 있ë�„ë¡� í•´ ì¤�니다. ë˜�한, 방대한 ì–‘ì�˜ 계산ì�„ 수행하는 프로그램ì�€ 계산ì�´ ë§Žì�€ 부분ì�„ 본래ì�˜ 플랫í�¼ì—� 해당하는 기계어 코드로 재작성하여 ìž�ë°” 프로그램과 ì�¸í„°íŽ˜ì�´ìФ í• ìˆ˜ 있ë�„ë¡� 하였습니다.
�터프리터(Interpreter) 방��다:
ìž�ë°” 언어로 작성ë�œ ìž�ë°” 프로그램ì�„ 중간언어 형태ì�¸ ìž�ë°” ë°”ì�´íŠ¸ì½”ë“œë¡œ 컴파ì�¼í•˜ê³ , ì�´ë ‡ê²Œ ìƒ�성ë�œ ìž�ë°” ë°”ì�´íŠ¸ì½”ë“œë¥¼ ìž�ë°” ì�¸í„°í”„리터가 í•´ì„�함으로ì�¨, ìž�ë°” ì�¸í„°í”„리터와 런타임 시스템ì�´ ì�´ì‹�(porting)ë�œ ëª¨ë“ í”Œëž«í�¼ì—�서 ìž�ë°” ë°”ì�´íŠ¸ì½”ë“œë¥¼ ì§�ì ‘ ì‹¤í–‰í• ìˆ˜ 있습니다.
다중 ìŠ¤ë ˆë“œ(Multi-thread)를 ì§€ì›�한다:
ìž�ë°”ì�˜ 다중 ìŠ¤ë ˆë“œ 기능ì�€ ë�™ì‹œì—� ë§Žì�€ ìŠ¤ë ˆë“œë¥¼ 실행시킬 수 있는 프로그램ì�„ 만들 수 있ë�„ë¡� í•´ ì¤�니다. ìž�바는 ë�™ê¸°í™” 메소드들ì�„ 기본ì �으로 키워드로 ì œê³µí•¨ìœ¼ë¡œì�¨, ìž�ë°” 언어 수준ì—�서 다중 ìŠ¤ë ˆë“œë¥¼ ì§€ì›�í•´ ì¤�니다. ìž�ë°” APIì—�는 ìŠ¤ë ˆë“œë¥¼ ì§€ì›�í•´ 주기 위한 Thread í�´ëž˜ìŠ¤ê°€ 있으며, ìž�ë°” 런타임 시스템ì—�서는 모니터와 ì¡°ê±´ ìž ê¸ˆ 함수를 ì œê³µí•´ ì¤�니다.
- ìž�ë°”ì�˜ 단ì �ê³¼ í•´ê²°ì±…
ë¨¼ì €, ìž�바는 기계어 코드를 ì§�ì ‘ 실행시키는 것ì�´ ì•„ë‹ˆê³ , 플랫í�¼ ë�…립ì �ì�¸ 중간 코드 형태ì�¸ ë°”ì�´íŠ¸ì½”ë“œë¥¼ ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì�´ í•´ì„�하여 실행시키는 ì�¸í„°í”„리터 ë°©ì‹�ì�„ ì·¨í•˜ê³ ìžˆìœ¼ë¯€ë¡œ ëŠ�린 수행 시간ì�„ 갖습니다. ì�¼ë°˜ì �으로 C보다 í�‰ê· 8ë°° ì •ë�„ ëŠ�ë¦¬ê³ , 최대 20배까지 ëŠ�립니다. ì�´ë ‡ê²Œ ëŠ�린 수행 시간ì�„ 해결하기 위해 다ì�Œê³¼ ê°™ì�€ ê¸°ìˆ ì�„ ì‚¬ìš©í• ìˆ˜ 있습니다.
JIT(Just-In-Time): 네ì�´í‹°ë¸Œ 코드 ìƒ�성기를 ì�´ìš©í•˜ì—¬ ì�¸í„°í”„리트 하는 ë�„중ì—� 기계어로 ë�™ì �으로 번ì—합니다.
HotSpot:
프로그램ì�„ 실행하는 중ì—� ê·¸ 실행 형태를 ë¶„ì„�하여 병목ì�´ ë°œìƒ�하는 부분ì�„ 찾아내어 최ì �í™” 시켜 ì¤�니다.
ìž�ë°”-기계어 번ì—기:
ìž�ë°” ì• í”Œë¦¬ì¼€ì�´ì…˜ì—� 대해 ë°”ì�´íŠ¸ì½”ë“œ ëŒ€ì‹ ê¸°ê³„ì–´ 코드를 ì§�ì ‘ ìƒ�성해 ì¤�니다.
컴파ì�¼ì‹œ 최ì �í™”:
ìž�ë°” 컴파ì�¼ëŸ¬ë¥¼ ì�´ìš©í•˜ì—¬ 컴파ì�¼ í• ë•Œ '-O' 옵션ì�„ 줌으로ì�¨ 최ì �í™” 시켜ì¤�니다.
네�티브 메소드:
C와 ê°™ì�´ 다른 언어로 작성ë�œ 함수를 ì§�ì ‘ 호출합니다.
ìž�ë°” ì „ìš© 환경:
ìž�ë°” ìš´ì˜�ì²´ì œ ë˜�는 ìž�ë°” 프로세서와 ê°™ì�´ ìž�바를 위한 ì „ìš©í™˜ê²½ì�„ 만들어 ì¤�니다.
ë‘� 번째, ìž�ë°” ì• í”Œë¦¿ì�„ 웹 서버로부터 웹 í�´ë�¼ì�´ì–¸íŠ¸ê°€ 다운로드하여 실행시켜 주게 ë�˜ëŠ”ë�°, ì�´ 때 네트워í�¬ ì†�ë�„ê°€ ëŠ�리다는 ë¬¸ì œê°€ 있습니다. ì�´ëŸ° ë¬¸ì œì �ì—� 대해서는 다ì�Œê³¼ ê°™ì�€ ê¸°ìˆ ì�„ 사용하여 í•´ê²°í•˜ë ¤ í•˜ê³ ìžˆìŠµë‹ˆë‹¤.
압축 파�(JAR �는 ZIP):
ìž�ë°” ì• í”Œë¦¿ì�„ 실행시키기 위해 ì• í”Œë¦¿ì�„ 다운로드해야 하는ë�°, ì�´ 때 ì• í”Œë¦¿ì—�서 사용하는 ë�°ì�´í„°ë“¤ë�„ ì¡´ìž¬í• ìˆ˜ 있습니다. 예를 들어, ì• ë‹ˆë©”ì�´ì…˜ì�„ 수행하는 ì• í”Œë¦¿ì�´ 있는 HTML 페ì�´ì§€ì—� ì ‘ì†�하여 ê·¸ ì• í”Œë¦¿ì�„ 실행시켜야 í• ê²½ìš°, 해당 ì• í”Œë¦¿ 파ì�¼ê³¼ ì• í”Œë¦¿ì—�서 ì• ë‹ˆë©”ì�´ì…˜ì�„ 위해 사용하는 ê°� í”„ë ˆìž„ ì�´ë¯¸ì§€ë�„ ì¡´ìž¬í• ê²ƒìž…ë‹ˆë‹¤. ë”°ë�¼ì„œ, ì• í”Œë¦¿ 파ì�¼ì�€ ë¬¼ë¡ ì• í”Œë¦¿ì—�서 사용하는 ì�´ë¯¸ì§€ 파ì�¼ë�„ 다운로드해야 ì• í”Œë¦¿ì—�서 ì œëŒ€ë¡œ ì• ë‹ˆë©”ì�´ì…˜ì�„ ìˆ˜í–‰í• ìˆ˜ ìžˆê² ì§€ìš”. ì�´ 때, ì• í”Œë¦¿ 실행과 ê´€ë ¨ë�œ ëª¨ë“ íŒŒì�¼ì�„ JAR ë˜�는 ZIP 형태ì�˜ ì••ì¶• 파ì�¼ë¡œ 묶어 ì „ì†¡í•˜ê²Œ ë�©ë‹ˆë‹¤. ì�´ë ‡ê²Œ 함으로ì�¨, ëŠ�린 네트워í�¬ë¥¼ ì�´ìš©í•˜ì—¬ ì• í”Œë¦¿ê³¼ ê´€ë ¨ë�œ 파ì�¼ë“¤ì�„ 다운로드 하는ë�° 드는 시간ì�„ 줄ì�¼ 수 있습니다.
�싱(Caching):
다운로드 ë°›ì�€ ì• í”Œë¦¿ê³¼ ì• í”Œë¦¿ ê´€ë ¨ 파ì�¼ë“¤ì�€ 웹 í�´ë�¼ì�´ì–¸íЏì�˜ 디스í�¬ì—� ìº�싱합니다. 예를 들어, 웹 í�´ë�¼ì�´ì–¸íŠ¸ê°€ ì• í”Œë¦¿ì�´ í�¬í•¨ë�œ 페ì�´ì§€ë¥¼ 보다가 다른 페ì�´ì§€ì—� ìž ê¹� ë“¤ë €ë‹¤ê°€ ì• í”Œë¦¿ì�´ í�¬í•¨ë�œ 페ì�´ì§€ë¡œ 다시 ë�Œì•„올 경우, ì• í”Œë¦¿ê³¼ ê´€ë ¨ë�œ ëª¨ë“ íŒŒì�¼ë“¤ì�„ 다시 다운로드하는 것ì�´ ì•„ë‹ˆê³ ì›¹ í�´ë�¼ì�´ì–¸íЏì�˜ 디스í�¬ì—� ìº�싱 ë�˜ì–´ 있는 ì• í”Œë¦¿ ê´€ë ¨ 파ì�¼ë“¤ì�„ 사용하게 ë�©ë‹ˆë‹¤. ì�´ë ‡ê²Œ 함으로ì�¨, ëŠ�린 네트워í�¬ë¥¼ ì�´ìš©í•˜ì—¬ ì• í”Œë¦¿ê³¼ ê´€ë ¨ë�œ 파ì�¼ë“¤ì�„ 다시 다운로드 하는ë�° 걸리는 시간ì�„ 없앨 수 있습니다.
�린(lazy) �래스 로딩:
하나ì�˜ HTML 페ì�´ì§€ ë‚´ì—� 있는 ì• í”Œë¦¿ì�€ 하나ì�˜ í�´ëž˜ìŠ¤ë§Œì�„ ì‚¬ìš©í• ê²½ìš°ë�„ ìžˆê² ì§€ë§Œ, 대부분ì�˜ 경우 여러 ê°œì�˜ í�´ëž˜ìŠ¤ë¥¼ í•„ìš”ì—� ë”°ë�¼ 사용하게 ë�©ë‹ˆë‹¤. 여러 ê°œì�˜ í�´ëž˜ìŠ¤ë¥¼ ì‚¬ìš©í• ê²½ìš°, ëª¨ë“ í�´ëž˜ìŠ¤ê°€ ë�™ì‹œì—� 사용ë�˜ì§€ëŠ” ì•Šê² ì§€ìš”. ë˜�한 ì–´ë–¤ í�´ëž˜ìŠ¤ëŠ” ì •ì�˜ëŠ” ë�˜ì–´ìžˆì§€ë§Œ, í•„ìš”ì—� ë”°ë�¼ ì „í˜€ 사용ë�˜ì§€ 않ì�„ 수ë�„ ìžˆê² ì§€ìš”. ë”°ë�¼ì„œ, ìž�ë°”ì—�서는 í•„ìš”í• ê²½ìš°ì—�ë§Œ í�´ëž˜ìŠ¤ë¥¼ 로딩하여 사용하게 ë�©ë‹ˆë‹¤. ì�´ëŸ¬í•œ ê¸°ìˆ ì�„ ëŠ�린(lazy) í�´ëž˜ìФ 로딩 ì�´ë�¼ 합니다.
세 번째, 모호한 언어ì � 특성, ë¹„ê²°ì •ì � ìž�ë°” ê°€ìƒ�ë¨¸ì‹ , 표준화ë�œ 실시간 APIê°€ 없는 ë¬¸ì œ 때문ì—� 실시간 ì�‘ìš©ì�´ ì–´ë µìŠµë‹ˆë‹¤. ì�´ë¥¼ 위해, ìž�ë°”ì—�서는 다ì�Œê³¼ ê°™ì�€ ê¸°ìˆ ì�„ ê°œë°œí•˜ê³ ì �용함으로ì�¨ 실시간 ì�‘ìš©ì�„ 가능하게 í• ìˆ˜ 있습니다.
ìž�ë°” ì• í”Œë¦¿ì�„ 실행시키기 위해 ì• í”Œë¦¿ì�„ 다운로드해야 하는ë�°, ì�´ 때 ì• í”Œë¦¿ì—�서 사용하는 ë�°ì�´í„°ë“¤ë�„ ì¡´ìž¬í• ìˆ˜ 있습니다. 예를 들어, ì• ë‹ˆë©”ì�´ì…˜ì�„ 수행하는 ì• í”Œë¦¿ì�´ 있는 HTML 페ì�´ì§€ì—� ì ‘ì†�하여 ê·¸ ì• í”Œë¦¿ì�„ 실행시켜야 í• ê²½ìš°, 해당 ì• í”Œë¦¿ 파ì�¼ê³¼ ì• í”Œë¦¿ì—�서 ì• ë‹ˆë©”ì�´ì…˜ì�„ 위해 사용하는 ê°� í”„ë ˆìž„ ì�´ë¯¸ì§€ë�„ ì¡´ìž¬í• ê²ƒìž…ë‹ˆë‹¤. ë”°ë�¼ì„œ, ì• í”Œë¦¿ 파ì�¼ì�€ ë¬¼ë¡ ì• í”Œë¦¿ì—�서 사용하는 ì�´ë¯¸ì§€ 파ì�¼ë�„ 다운로드해야 ì• í”Œë¦¿ì—�서 ì œëŒ€ë¡œ ì• ë‹ˆë©”ì�´ì…˜ì�„ ìˆ˜í–‰í• ìˆ˜ ìžˆê² ì§€ìš”. ì�´ 때, ì• í”Œë¦¿ 실행과 ê´€ë ¨ë�œ ëª¨ë“ íŒŒì�¼ì�„ JAR ë˜�는 ZIP 형태ì�˜ ì••ì¶• 파ì�¼ë¡œ 묶어 ì „ì†¡í•˜ê²Œ ë�©ë‹ˆë‹¤. ì�´ë ‡ê²Œ 함으로ì�¨, ëŠ�린 네트워í�¬ë¥¼ ì�´ìš©í•˜ì—¬ ì• í”Œë¦¿ê³¼ ê´€ë ¨ë�œ 파ì�¼ë“¤ì�„ 다운로드 하는ë�° 드는 시간ì�„ 줄ì�¼ 수 있습니다.
�싱(Caching):
다운로드 ë°›ì�€ ì• í”Œë¦¿ê³¼ ì• í”Œë¦¿ ê´€ë ¨ 파ì�¼ë“¤ì�€ 웹 í�´ë�¼ì�´ì–¸íЏì�˜ 디스í�¬ì—� ìº�싱합니다. 예를 들어, 웹 í�´ë�¼ì�´ì–¸íŠ¸ê°€ ì• í”Œë¦¿ì�´ í�¬í•¨ë�œ 페ì�´ì§€ë¥¼ 보다가 다른 페ì�´ì§€ì—� ìž ê¹� ë“¤ë €ë‹¤ê°€ ì• í”Œë¦¿ì�´ í�¬í•¨ë�œ 페ì�´ì§€ë¡œ 다시 ë�Œì•„올 경우, ì• í”Œë¦¿ê³¼ ê´€ë ¨ë�œ ëª¨ë“ íŒŒì�¼ë“¤ì�„ 다시 다운로드하는 것ì�´ ì•„ë‹ˆê³ ì›¹ í�´ë�¼ì�´ì–¸íЏì�˜ 디스í�¬ì—� ìº�싱 ë�˜ì–´ 있는 ì• í”Œë¦¿ ê´€ë ¨ 파ì�¼ë“¤ì�„ 사용하게 ë�©ë‹ˆë‹¤. ì�´ë ‡ê²Œ 함으로ì�¨, ëŠ�린 네트워í�¬ë¥¼ ì�´ìš©í•˜ì—¬ ì• í”Œë¦¿ê³¼ ê´€ë ¨ë�œ 파ì�¼ë“¤ì�„ 다시 다운로드 하는ë�° 걸리는 시간ì�„ 없앨 수 있습니다.
�린(lazy) �래스 로딩:
하나ì�˜ HTML 페ì�´ì§€ ë‚´ì—� 있는 ì• í”Œë¦¿ì�€ 하나ì�˜ í�´ëž˜ìŠ¤ë§Œì�„ ì‚¬ìš©í• ê²½ìš°ë�„ ìžˆê² ì§€ë§Œ, 대부분ì�˜ 경우 여러 ê°œì�˜ í�´ëž˜ìŠ¤ë¥¼ í•„ìš”ì—� ë”°ë�¼ 사용하게 ë�©ë‹ˆë‹¤. 여러 ê°œì�˜ í�´ëž˜ìŠ¤ë¥¼ ì‚¬ìš©í• ê²½ìš°, ëª¨ë“ í�´ëž˜ìŠ¤ê°€ ë�™ì‹œì—� 사용ë�˜ì§€ëŠ” ì•Šê² ì§€ìš”. ë˜�한 ì–´ë–¤ í�´ëž˜ìŠ¤ëŠ” ì •ì�˜ëŠ” ë�˜ì–´ìžˆì§€ë§Œ, í•„ìš”ì—� ë”°ë�¼ ì „í˜€ 사용ë�˜ì§€ 않ì�„ 수ë�„ ìžˆê² ì§€ìš”. ë”°ë�¼ì„œ, ìž�ë°”ì—�서는 í•„ìš”í• ê²½ìš°ì—�ë§Œ í�´ëž˜ìŠ¤ë¥¼ 로딩하여 사용하게 ë�©ë‹ˆë‹¤. ì�´ëŸ¬í•œ ê¸°ìˆ ì�„ ëŠ�린(lazy) í�´ëž˜ìФ 로딩 ì�´ë�¼ 합니다.
세 번째, 모호한 언어ì � 특성, ë¹„ê²°ì •ì � ìž�ë°” ê°€ìƒ�ë¨¸ì‹ , 표준화ë�œ 실시간 APIê°€ 없는 ë¬¸ì œ 때문ì—� 실시간 ì�‘ìš©ì�´ ì–´ë µìŠµë‹ˆë‹¤. ì�´ë¥¼ 위해, ìž�ë°”ì—�서는 다ì�Œê³¼ ê°™ì�€ ê¸°ìˆ ì�„ ê°œë°œí•˜ê³ ì �용함으로ì�¨ 실시간 ì�‘ìš©ì�„ 가능하게 í• ìˆ˜ 있습니다.
모호한 언어 특성ì�˜ ë¬¸ì œì �:
ì�´ëŸ¬í•œ ë¬¸ì œëŠ” ìž�바가 ìŠ¤ë ˆë“œ 스케줄ë§� ì •ì±… 구현ì—� ì�˜ì¡´í•˜ê³ , synchronized ëª…ë ¹ì–´ê°€ 모니터 기반ì�˜ ë�™ê¸°í™” 기법만 ì œê³µí•˜ê³ í�� 대기 시간ì�„ ì˜ˆì¸¡í• ìˆ˜ 없으며, notify() 메소드가 ìŠ¤ë ˆë“œë¥¼ 깨우는 순서가 ë¶ˆëª…í™•í•˜ê³ , ìš°ì„ ìˆœìœ„ ì—ì „(priority inversion_ì�˜ 가능성ì�´ 있습니다. ì�´ëŸ¬í•œ ë¬¸ì œëŠ” API 수준ì—�서 í•´ê²°ë�˜ì–´ì•¼ í•˜ê³ , 실시간 타스í�¬ 처리를 위한 ìš°ì„ ìˆœìœ„ ë ˆë²¨ì�„ í™•ìž¥í•˜ê³ , ìš°ì„ ìˆœìœ„ ìƒ�ì†�(priority inheritance) ë˜�는 ìš°ì„ ìˆœìœ„ ìµœê³ í•œë�„ ì œí•œ(priority ceiling) 등과 ê°™ì�€ ìš°ì„ ìˆœìœ„ ì—ì „ ë°©ì§€ (priority inversion avoidance) í”„ë¡œí† ì½œì�„ ì‚¬ìš©í•˜ê³ , MuteX, ì�´ì§„ 세마í�¬ì–´(Binary Semaphore), 계수 세마í�¬ì–´(Counting Semaphore) 등ì�„ ì‚¬ìš©í• ìˆ˜ 있습니다.
ë¹„ê²°ì •ì � ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì�˜ ë¬¸ì œì �:
ì�´ëŸ¬í•œ ë¬¸ì œì �ì�€ ëŠ�린(Lazy) í�´ëž˜ìФ 로딩ì—�서 ë°œìƒ�하거나 메모리 í• ë‹¹ê³¼ 가비지 ì½œë ‰ì…˜ì�´ ë¹„ê²°ì •ì �ì�´ê³ ëŠ�린 최악ì�˜ 경우(worst-case) 특성ì�„ 가지며 stop-start ë°©ì‹�으로 ëª¨ë“ ìŠ¤ë ˆë“œë¥¼ 멈출 수 있다는 ë¬¸ì œì �ì�´ 있습니다. ì�´ë¥¼ 해결하기 위해 í�´ëž˜ìŠ¤ë¥¼ 미리 로딩(class preloading)한다거나 ì •ì � 초기화(static initializer)를 ì œê±°í•˜ì—¬ 패키지 ë�¼ì�´ë¸ŒëŸ¬ë¦¬ì—� 대해서는 ê°€ìƒ�ë¨¸ì‹ ì´ˆê¸°í™”ë¥¼ ì‚¬ìš©í•˜ê³ ì�‘용프로그램ì—�서는 명시ì �ì�¸ 초기화 를 사용하게 하는 등ì�˜ 기법ì�„ ì‚¬ìš©í• ìˆ˜ 있습니다. ê·¸ë¦¬ê³ , 메모리 í• ë‹¹ê³¼ ì“°ë ˆê¸° 수집(garbage collection)ì—� 대해서는 ì •í•´ì§„ 시간 ë‚´ì—� 입터럽트 가능한 ì“°ë ˆê¸° 수집ì�„ 하는 것입니다. ë˜�는 표준화ë�œ 실시간 API를 ì œê³µí•¨ìœ¼ë¡œì�¨ í•´ê²°í• ìˆ˜ 있습니다.
ì�´ëŸ¬í•œ ë¬¸ì œëŠ” ìž�바가 ìŠ¤ë ˆë“œ 스케줄ë§� ì •ì±… 구현ì—� ì�˜ì¡´í•˜ê³ , synchronized ëª…ë ¹ì–´ê°€ 모니터 기반ì�˜ ë�™ê¸°í™” 기법만 ì œê³µí•˜ê³ í�� 대기 시간ì�„ ì˜ˆì¸¡í• ìˆ˜ 없으며, notify() 메소드가 ìŠ¤ë ˆë“œë¥¼ 깨우는 순서가 ë¶ˆëª…í™•í•˜ê³ , ìš°ì„ ìˆœìœ„ ì—ì „(priority inversion_ì�˜ 가능성ì�´ 있습니다. ì�´ëŸ¬í•œ ë¬¸ì œëŠ” API 수준ì—�서 í•´ê²°ë�˜ì–´ì•¼ í•˜ê³ , 실시간 타스í�¬ 처리를 위한 ìš°ì„ ìˆœìœ„ ë ˆë²¨ì�„ í™•ìž¥í•˜ê³ , ìš°ì„ ìˆœìœ„ ìƒ�ì†�(priority inheritance) ë˜�는 ìš°ì„ ìˆœìœ„ ìµœê³ í•œë�„ ì œí•œ(priority ceiling) 등과 ê°™ì�€ ìš°ì„ ìˆœìœ„ ì—ì „ ë°©ì§€ (priority inversion avoidance) í”„ë¡œí† ì½œì�„ ì‚¬ìš©í•˜ê³ , MuteX, ì�´ì§„ 세마í�¬ì–´(Binary Semaphore), 계수 세마í�¬ì–´(Counting Semaphore) 등ì�„ ì‚¬ìš©í• ìˆ˜ 있습니다.
ë¹„ê²°ì •ì � ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì�˜ ë¬¸ì œì �:
ì�´ëŸ¬í•œ ë¬¸ì œì �ì�€ ëŠ�린(Lazy) í�´ëž˜ìФ 로딩ì—�서 ë°œìƒ�하거나 메모리 í• ë‹¹ê³¼ 가비지 ì½œë ‰ì…˜ì�´ ë¹„ê²°ì •ì �ì�´ê³ ëŠ�린 최악ì�˜ 경우(worst-case) 특성ì�„ 가지며 stop-start ë°©ì‹�으로 ëª¨ë“ ìŠ¤ë ˆë“œë¥¼ 멈출 수 있다는 ë¬¸ì œì �ì�´ 있습니다. ì�´ë¥¼ 해결하기 위해 í�´ëž˜ìŠ¤ë¥¼ 미리 로딩(class preloading)한다거나 ì •ì � 초기화(static initializer)를 ì œê±°í•˜ì—¬ 패키지 ë�¼ì�´ë¸ŒëŸ¬ë¦¬ì—� 대해서는 ê°€ìƒ�ë¨¸ì‹ ì´ˆê¸°í™”ë¥¼ ì‚¬ìš©í•˜ê³ ì�‘용프로그램ì—�서는 명시ì �ì�¸ 초기화 를 사용하게 하는 등ì�˜ 기법ì�„ ì‚¬ìš©í• ìˆ˜ 있습니다. ê·¸ë¦¬ê³ , 메모리 í• ë‹¹ê³¼ ì“°ë ˆê¸° 수집(garbage collection)ì—� 대해서는 ì •í•´ì§„ 시간 ë‚´ì—� 입터럽트 가능한 ì“°ë ˆê¸° 수집ì�„ 하는 것입니다. ë˜�는 표준화ë�œ 실시간 API를 ì œê³µí•¨ìœ¼ë¡œì�¨ í•´ê²°í• ìˆ˜ 있습니다.
* �바 프로그램� 종류
C언어를 ì�´ìš©í•˜ì—¬ C 프로그램ì�„ 작성한다면 반드시 mainì�´ë�¼ëŠ” 시작 함수를 ì •ì�˜í•´ 주어야 í•˜ê³ , 윈ë�„ìš° ì�‘용프로그램ì�„ ìž‘ì„±í•œë‹¤ê³ í•˜ë©´ WinMainì�´ë�¼ëŠ” 함수를 ê¼ ìž‘ì„±í•´ 주어야 하지요. ì�´ëŸ¬í•œ 것ì�„ 규약(protocol)ì�´ë�¼ 합니다. 마찬가지로, ìž�ë°” 언어를 ì�´ìš©í•˜ì—¬ 여러 가지 종류ì�˜ ìž�ë°” 프로그램ì�„ ìž‘ì„±í• ìˆ˜ 있는ë�°, ì�´ 때 ê°� ìž�ë°” 프로그램ì�˜ 종류ì—� ë”°ë�¼ 해당 규약ì�´ 서로 다릅니다. ì�´ë ‡ë“¯ ìž�바를 ì�´ìš©í•˜ì—¬ ìž�ë°” 프로그램ì�„ 작성한다는 것ì�€ ê°� ìž�ë°” 프로그램ì—�서 ì œì‹œí•˜ê³ ìžˆëŠ” 규약ì�„ 지켜 프로그램ì�„ 작성한다는 것입니다. ìž�ë°” 언어를 ì�´ìš©í•˜ì—¬ ìž‘ì„±í• ìˆ˜ 있는 ìž�ë°” 프로그램ì�˜ 종류를 살펴보면 다ì�Œê³¼ 같습니다.
C언어를 ì�´ìš©í•˜ì—¬ C 프로그램ì�„ 작성한다면 반드시 mainì�´ë�¼ëŠ” 시작 함수를 ì •ì�˜í•´ 주어야 í•˜ê³ , 윈ë�„ìš° ì�‘용프로그램ì�„ ìž‘ì„±í•œë‹¤ê³ í•˜ë©´ WinMainì�´ë�¼ëŠ” 함수를 ê¼ ìž‘ì„±í•´ 주어야 하지요. ì�´ëŸ¬í•œ 것ì�„ 규약(protocol)ì�´ë�¼ 합니다. 마찬가지로, ìž�ë°” 언어를 ì�´ìš©í•˜ì—¬ 여러 가지 종류ì�˜ ìž�ë°” 프로그램ì�„ ìž‘ì„±í• ìˆ˜ 있는ë�°, ì�´ 때 ê°� ìž�ë°” 프로그램ì�˜ 종류ì—� ë”°ë�¼ 해당 규약ì�´ 서로 다릅니다. ì�´ë ‡ë“¯ ìž�바를 ì�´ìš©í•˜ì—¬ ìž�ë°” 프로그램ì�„ 작성한다는 것ì�€ ê°� ìž�ë°” 프로그램ì—�서 ì œì‹œí•˜ê³ ìžˆëŠ” 규약ì�„ 지켜 프로그램ì�„ 작성한다는 것입니다. ìž�ë°” 언어를 ì�´ìš©í•˜ì—¬ ìž‘ì„±í• ìˆ˜ 있는 ìž�ë°” 프로그램ì�˜ 종류를 살펴보면 다ì�Œê³¼ 같습니다.
ìž�ë°” ì• í”Œë¦¬ì¼€ì�´ì…˜(Application):
JDK와 함께 ì œê³µë�˜ëŠ” ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì—� ì�˜í•´ ë�…립ì �으로 실행ë� 수 있ë�„ë¡� 작성ë�œ ìž�ë°” 프로그램입니다. 다시 ë§�해서, 여러분ì�˜ 컴퓨터ì—�서 윈ë�„ìš°ì�˜ ë�„스창 ë˜�는 ìœ ë‹‰ìŠ¤ 쉘 등과 ê°™ì�€ 쉘ì—�서 ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì�„ ì�´ìš©í•˜ì—¬ 실행시키는 ìž�ë°” 프로그램입니다. 위ì—� 나오는 그림ì�€ ìž�ë°” ì• í”Œë¦¬ì¼€ì�´ì…˜ì�˜ 실행 ê³¼ì •ì�„ ìž�세히 ë³´ì—¬ì£¼ê³ ìžˆìŠµë‹ˆë‹¤.
ìž�ë°” ì• í”Œë¦¿(Applet):
<APPLET>~</APPLET> 태그를 ì�´ìš©í•˜ì—¬ HTML 페ì�´ì§€ ë‚´ì—� í�¬í•¨ë�˜ì–´, ìž�ë°” 호환 웹 브ë�¼ìš°ì €ì—� ì�˜í•´ì„œ 실행ë�˜ë�„ë¡� 작성ë�œ ìž�ë°” 프로그램입니다. 다시 ë§�해서, 여러분ì�˜ 홈 페ì�´ì§€ ë‚´ì—� 삽입ë�˜ì–´ ìž�ë°” 호환 웹 브ë�¼ìš°ì €ì—� ì�˜í•´ 실행ë�˜ë�„ë¡� 규약ì—� 맞추어 작성ë�œ ìž�ë°” 프로그램ì�„ ë§�하는 것입니다. 다ì�Œì—� 나오는 그림ì�€ ìž�ë°” ì• í”Œë¦¿ì�˜ 실행 ê³¼ì •ì�„ ìž�세히 ë³´ì—¬ì£¼ê³ ìžˆìŠµë‹ˆë‹¤.
�바 서블릿(Servlet):
기존ì�˜ CGI 프로그램과 ê°™ì�´ 웹 서버 프로그램ì�˜ 기능ì�„ 확장하기 위한 ìž�ë°” 프로그램으로서, 웹 서버 ë‚´ì—� 있는 ìž�ë°” 런타임 환경과 함께 ì œê³µë�˜ëŠ” ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì—� ì�˜í•´ 실행ë�˜ë�„ë¡� 작성ë�œ ìž�ë°” 프로그램입니다. ìž�ë°” 서블릿ì�€ 웹 서버 ë‚´ì—�서 ìž�ë°” 런타임 환경과 함께 ì œê³µë�˜ëŠ” ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì—� ì�˜í•´ 실행ë�˜ê³ , ìž�ë°” ì• í”Œë¦¿ì�€ 웹 서버ì—�서 웹 í�´ë�¼ì�´ì–¸íŠ¸ë¡œ 다운로드 ë�˜ì–´ 웹 í�´ë�¼ì�´ì–¸íЏì—�서 ìž�ë°” 호환 웹 브ë�¼ìš°ì €ì—� 내장ë�œ ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì—� ì�˜í•´ 실행ë�œë‹¤ëŠ” ì°¨ì�´ì �ì�´ 있습니다. ì�´ë ‡ê²Œ 웹 서버 ë‚´ì—�서 실행ë� 수 있ë�„ë¡� 작성ë�œ ìž�ë°” 서블릿ì�€ 기존ì�˜ 웹 서버 ë‚´ì—�서 실행ë�˜ëŠ” 프로그램ì�¸ CGI 프로그램ì�„ ëŒ€ì²´í• ìˆ˜ 있ë�„ë¡� ê³ ì•ˆë�˜ì—ˆìŠµë‹ˆë‹¤. 다ì�Œì—� 나오는 그림ì�€ ìž�ë°” 서블릿ì�˜ 실행 ê³¼ì •ì�„ ìž�세히 ë³´ì—¬ì£¼ê³ ìžˆìŠµë‹ˆë‹¤.
�바 빈(Bean):
ë�¸íŒŒì�´ ë˜�는 비주얼 ë² ì�´ì§�ì�„ ì�´ìš©í•˜ì—¬ 프로그램ì�„ ìž‘ì„±í• ë•Œ, 버튼ì�´ë‚˜ 창과 ê°™ì�€ 컨트롤들ì�„ 마우스로 ë�Œì–´ë‹¤ 프로그램 ë‚´ì—� ì‚½ìž…í• ìˆ˜ 있ë�„ë¡� ë�˜ì–´ 있는ë�°, ì�´ì™€ 마찬가지로 ìž�ë°” 빈ì�€ 하나ì�˜ 완벽한 기능ì�„ ê°–ê³ ìž¬ì‚¬ìš©ë� 수 있ë�„ë¡� 만들어진 소프트웨어 ì»´í�¬ë„ŒíŠ¸ìž…ë‹ˆë‹¤. 마ì�´í�¬ë¡œì†Œí”„트ì—�서 ì œê³µë�˜ëŠ” ActiveX ì»´í�¬ë„ŒíŠ¸ì™€ ê°™ì�´ ìž�ë°”ì—�서 ì»´í�¬ë„ŒíЏ 프로그램ì�„ 가능하ë�„ë¡� í•´ ì¤�니다.
JDK와 함께 ì œê³µë�˜ëŠ” ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì—� ì�˜í•´ ë�…립ì �으로 실행ë� 수 있ë�„ë¡� 작성ë�œ ìž�ë°” 프로그램입니다. 다시 ë§�해서, 여러분ì�˜ 컴퓨터ì—�서 윈ë�„ìš°ì�˜ ë�„스창 ë˜�는 ìœ ë‹‰ìŠ¤ 쉘 등과 ê°™ì�€ 쉘ì—�서 ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì�„ ì�´ìš©í•˜ì—¬ 실행시키는 ìž�ë°” 프로그램입니다. 위ì—� 나오는 그림ì�€ ìž�ë°” ì• í”Œë¦¬ì¼€ì�´ì…˜ì�˜ 실행 ê³¼ì •ì�„ ìž�세히 ë³´ì—¬ì£¼ê³ ìžˆìŠµë‹ˆë‹¤.
<APPLET>~</APPLET> 태그를 ì�´ìš©í•˜ì—¬ HTML 페ì�´ì§€ ë‚´ì—� í�¬í•¨ë�˜ì–´, ìž�ë°” 호환 웹 브ë�¼ìš°ì €ì—� ì�˜í•´ì„œ 실행ë�˜ë�„ë¡� 작성ë�œ ìž�ë°” 프로그램입니다. 다시 ë§�해서, 여러분ì�˜ 홈 페ì�´ì§€ ë‚´ì—� 삽입ë�˜ì–´ ìž�ë°” 호환 웹 브ë�¼ìš°ì €ì—� ì�˜í•´ 실행ë�˜ë�„ë¡� 규약ì—� 맞추어 작성ë�œ ìž�ë°” 프로그램ì�„ ë§�하는 것입니다. 다ì�Œì—� 나오는 그림ì�€ ìž�ë°” ì• í”Œë¦¿ì�˜ 실행 ê³¼ì •ì�„ ìž�세히 ë³´ì—¬ì£¼ê³ ìžˆìŠµë‹ˆë‹¤.
기존ì�˜ CGI 프로그램과 ê°™ì�´ 웹 서버 프로그램ì�˜ 기능ì�„ 확장하기 위한 ìž�ë°” 프로그램으로서, 웹 서버 ë‚´ì—� 있는 ìž�ë°” 런타임 환경과 함께 ì œê³µë�˜ëŠ” ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì—� ì�˜í•´ 실행ë�˜ë�„ë¡� 작성ë�œ ìž�ë°” 프로그램입니다. ìž�ë°” 서블릿ì�€ 웹 서버 ë‚´ì—�서 ìž�ë°” 런타임 환경과 함께 ì œê³µë�˜ëŠ” ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì—� ì�˜í•´ 실행ë�˜ê³ , ìž�ë°” ì• í”Œë¦¿ì�€ 웹 서버ì—�서 웹 í�´ë�¼ì�´ì–¸íŠ¸ë¡œ 다운로드 ë�˜ì–´ 웹 í�´ë�¼ì�´ì–¸íЏì—�서 ìž�ë°” 호환 웹 브ë�¼ìš°ì €ì—� 내장ë�œ ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì—� ì�˜í•´ 실행ë�œë‹¤ëŠ” ì°¨ì�´ì �ì�´ 있습니다. ì�´ë ‡ê²Œ 웹 서버 ë‚´ì—�서 실행ë� 수 있ë�„ë¡� 작성ë�œ ìž�ë°” 서블릿ì�€ 기존ì�˜ 웹 서버 ë‚´ì—�서 실행ë�˜ëŠ” 프로그램ì�¸ CGI 프로그램ì�„ ëŒ€ì²´í• ìˆ˜ 있ë�„ë¡� ê³ ì•ˆë�˜ì—ˆìŠµë‹ˆë‹¤. 다ì�Œì—� 나오는 그림ì�€ ìž�ë°” 서블릿ì�˜ 실행 ê³¼ì •ì�„ ìž�세히 ë³´ì—¬ì£¼ê³ ìžˆìŠµë‹ˆë‹¤.
ë�¸íŒŒì�´ ë˜�는 비주얼 ë² ì�´ì§�ì�„ ì�´ìš©í•˜ì—¬ 프로그램ì�„ ìž‘ì„±í• ë•Œ, 버튼ì�´ë‚˜ 창과 ê°™ì�€ 컨트롤들ì�„ 마우스로 ë�Œì–´ë‹¤ 프로그램 ë‚´ì—� ì‚½ìž…í• ìˆ˜ 있ë�„ë¡� ë�˜ì–´ 있는ë�°, ì�´ì™€ 마찬가지로 ìž�ë°” 빈ì�€ 하나ì�˜ 완벽한 기능ì�„ ê°–ê³ ìž¬ì‚¬ìš©ë� 수 있ë�„ë¡� 만들어진 소프트웨어 ì»´í�¬ë„ŒíŠ¸ìž…ë‹ˆë‹¤. 마ì�´í�¬ë¡œì†Œí”„트ì—�서 ì œê³µë�˜ëŠ” ActiveX ì»´í�¬ë„ŒíŠ¸ì™€ ê°™ì�´ ìž�ë°”ì—�서 ì»´í�¬ë„ŒíЏ 프로그램ì�„ 가능하ë�„ë¡� í•´ ì¤�니다.
�바 패키지(package):
다른 ìž�ë°” 프로그램ì—� ì�˜í•´ 삽입(import)ë�˜ì–´ 사용ë� 수 있ë�„ë¡� 작성ë�œ ìž�ë°” 프로그램입니다. ì�´ëŸ¬í•œ ìž�ë°” 패키지는 기존ì�˜ 프로그래ë°� 언어ì—�서 사용하ë�˜ ë�¼ì�´ë¸ŒëŸ¬ë¦¬ ë˜�는 ìš´ì˜�ì²´ì œì—�서 ì œê³µí•´ 주는 API 등과 ê°™ë‹¤ê³ ë³¼ 수 있습니다. ìž�ë°” 패키지 ì—시 해당 규약ì�„ ê°–ê² ì§€ìš”. ìž�ë°”ì—�서는 기본ì �으로 ì••ì¶• 파ì�¼ì�˜ 형태로 'casses.zip"ì�´ë�¼ëŠ” ìž�ë°” 패키지가 ì œê³µë�˜ê³ ìžˆê³ , ì••ì¶• 파ì�¼ ë‚´ì—�는 ë””ë ‰í† ë¦¬ 단위로 패키지가 í�¬í•¨ë�˜ì–´ 있습니다. 다ì�Œì—� 나오는 그림ì�€ JDK 1.2.2 ì—�서 ì œê³µë�˜ëŠ” 패키지를 ë³´ì—¬ì£¼ê³ ìžˆìŠµë‹ˆë‹¤.
다른 ìž�ë°” 프로그램ì—� ì�˜í•´ 삽입(import)ë�˜ì–´ 사용ë� 수 있ë�„ë¡� 작성ë�œ ìž�ë°” 프로그램입니다. ì�´ëŸ¬í•œ ìž�ë°” 패키지는 기존ì�˜ 프로그래ë°� 언어ì—�서 사용하ë�˜ ë�¼ì�´ë¸ŒëŸ¬ë¦¬ ë˜�는 ìš´ì˜�ì²´ì œì—�서 ì œê³µí•´ 주는 API 등과 ê°™ë‹¤ê³ ë³¼ 수 있습니다. ìž�ë°” 패키지 ì—시 해당 규약ì�„ ê°–ê² ì§€ìš”. ìž�ë°”ì—�서는 기본ì �으로 ì••ì¶• 파ì�¼ì�˜ 형태로 'casses.zip"ì�´ë�¼ëŠ” ìž�ë°” 패키지가 ì œê³µë�˜ê³ ìžˆê³ , ì••ì¶• 파ì�¼ ë‚´ì—�는 ë””ë ‰í† ë¦¬ 단위로 패키지가 í�¬í•¨ë�˜ì–´ 있습니다. 다ì�Œì—� 나오는 그림ì�€ JDK 1.2.2 ì—�서 ì œê³µë�˜ëŠ” 패키지를 ë³´ì—¬ì£¼ê³ ìžˆìŠµë‹ˆë‹¤.
ë”°ë�¼ì„œ, 여러분ì�€ 하나ì�˜ ìž�ë°” 프로그램ì�„ ìž‘ì„±í• ë•Œ, 위ì—� 나열ë�œ 하나ì�˜ 규약ì—� 맞게 ìž�ë°” 프로그램ì�„ ìž‘ì„±í• ìˆ˜ë�„ 있지만, 하나ì�˜ ìž�ë°” 프로그램ì�´ 위ì�˜ 규약들ì�„ ë‘� ê°œ ì�´ìƒ� 만족하ë�„ë¡� ìž‘ì„±í• ìˆ˜ë�„ 있습니다.
ì�´ë ‡ê²Œ ë‘� ê°œ ì�´ìƒ�ì�˜ ìž�ë°” 프로그램 규약ì�„ 만족시키는 ìž�ë°” 프로그램ì�€ 여러 ìž�ë°” 프로그램ì—� ì†�하게 ë�©ë‹ˆë‹¤. 예를 들어, 하나ì�˜ ìž�ë°” 프로그램ì�„ 작성했는ë�°, ì�´ ìž�ë°” 프로그램ì�€ ìž�ë°” ì• í”Œë¦¬ì¼€ì�´ì…˜ì�„ 위한 규약ì�„ 만족시켜 ì£¼ê³ ìž�ë°” ì• í”Œë¦¿ì�„ 위한 규약ë�„ 만족시켜 준다면, ì�´ ìž�ë°” 프로그램ì�€ JDK와 함께 ì œê³µë�˜ëŠ” ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì—� ì�˜í•´ 실행ë�˜ëŠ” ìž�ë°” ì• í”Œë¦¬ì¼€ì�´ì…˜ìœ¼ë¡œì„œ ë�…립ì �으로 실행ë� 수ë�„ ìžˆê³ , ìž�ë°” 호환 웹 브ë�¼ìš°ì €ì—� 내장ë�œ ìž�ë°” ê°€ìƒ�ë¨¸ì‹ ì—� ì�˜í•´ ìž�ë°” ì• í”Œë¦¿ìœ¼ë¡œ 실행ë� 수ë�„ 있다는 것입니다. ì�´ë ‡ê²Œ ìž�ë°” 언어를 ì�´ìš©í•˜ì—¬ 여러 규약ì—� 맞는 ìž�ë°” 프로그램ì�„ ìž‘ì„±í• ìˆ˜ 있지만, 하나ì�˜ ìž�ë°” 프로그램ì�´ êµ³ì�´ ë‘� ê°œ ì�´ìƒ�ì�˜ 규약ì�„ 모ë‘� 만족시켜주ë�„ë¡� ìž�ë°” 프로그램ì�„ 작성하는 경우는 ìž�ë°” ì• í”Œë¦¬ì¼€ì�´ì…˜ê³¼ ìž�ë°” ì• í”Œë¦¿ì�˜ 경우를 ì œì™¸í•˜ê³ ëŠ” ê±°ì�˜ 없습니다.
~cpp
class HelloWorldApp {
public static void main(String args[]) {
System.out.println("Hello World!"); // Display the string
}
}
ë� 대충 하긴 했는ë�°, ìž�ë°”ì—� 대한 ê°œë…�부터 확실한 설명ì�„ ë“£ê³ ì‹œìž‘í•´ì•¼ 스터디가 ì„±ê³µí• ìˆ˜ 있ì�„것 같습니다.
ìž�바를 아는 사람ì�˜ ê°•ì�˜ 한시간ì�€, ë�…í•™ 10시간보다 효율ì �ì�´ë©°, 기초를 ì œëŒ€ë¡œ 잡아야 건물ì�„ 높게 ì§€ì�„수 있습니다.
너무 욕심내서 ì–´ë ¤ìš´ê²ƒë§Œ í•˜ë ¤ê³ í•˜ì§€ ë§�ê³ , 차근차근 스터디를 진행하면서 ë°©í•™ë��ë‚ ë•Œê¹Œì§€ 'ìž�바란 무엇ì�¸ê°€?' ì—�대한
개�만 알아� 성공한것�� ��합니다.
ë¬¼ë¡ ìŠ¤í„°ë””í•˜ëŠ” 사람들ì�˜ ë�…í•™ë�„ 중요 í•˜ê² ì£ .
한마디로.....좀 쉬운것부터 천천히 배워 나갔으면 하네요.
추가 ë‚´ìš© ¶
- 첫번째 ê³¼ì œì—�서 ì œê°€ ì�˜ë�„í–ˆë�˜ 바가 바로 "ìž�바를 왜 사용하는 것ì�¸ê°€?" ê°€ 바로 ì´ˆì �ì�´ì—ˆëŠ”ë�° 아쉽게ë�„ 카피 & 페ì�´ìŠ¤íŠ¸ ë§Œ 해서 ê³¼ì œë¥¼ ë��ë§ˆì¹˜ì‹ ê±° 같군요. ë°‘ì�˜ 질문ì�€ 위ì�˜ ë‚´ìš©ì�„ 단 10%ë�„ ì�´í•´ë¥¼ 못했다는 ëŠ�낌ì�´ 드네요. ìž�ì‹ ì�´ 한 ê³¼ì œë¥¼ 차근차근 다시 ì�½ì–´ë³´ì‹œë©´ì„œ "ìž�바는 무엇ì�´ë©° 왜 사용하는가?" ì—� 대한 해답ì�„ 얻으시기 ë°”ëž�니다.
- 다른 사람ì�´ 한 ê³¼ì œë�„ 꼼꼼히 ì�½ì–´ë³´ì‹œê¸° ë°”ëž�니다. 조금ì�˜ ì°¨ì�´ì �ì�´ ëŠ�껴지실거구요(ë¬¼ë¡ í•œë¶„ì�´ëž‘ ë‚´ìš©ì�´ 같네요;;) 그걸 다시 ì�´í•´í•˜ì‹œê¸° ë°”ëž�니다.
- ì—시나 프로그램ì�„ 못하셨군요. 프로그램 ì—시 실행시켜 보시기 ë°”ëž�니다.










