자바란? 자바(Java technology)는 객체 지향 프로그래밍 언어이자 Sun Microsystems에서 개발한 플랫폼이다.
J2SE(Java 2 Standard Edition). 자바로 애플릿과 애플리케이션을 작성, 전개 구동하는 개발자를 위한 표준 Java 2 SDK, 툴, 런타임, API이다.
J2EE(Java 2 Enterprise Edition). 표준화된 모듈식 컴포넌트에 기반하고 있고, 그러한 컴포넌트에 완벽한 서비스 세트를 제공하며, 복잡한 프로그래밍 없이 애플리케이션 작동의 상세를 자동으로 핸들함으로서 멀티-티어 엔터프라이즈 애플리케이션의 구현과 전개를 간소화 한다.
J2ME(Java 2 Micro Edition). 이 버전은 고도로 최적화 된 자바 런타임 환경으로서 스마트 폰이나 페이저부터 셋톱(set-top) 박스 까지 (물리적으로나 메모리 기능에서) 작은 장치들을 다룬다.
JAVA의 플랫폼 버젼은 이렇게 3가지가 있는데 J2ME는 아직 해보지 않았다.
왜 자바가 중요한가? 자바는 JVM(자바가상머신)위에서 돌아간다. 기존 프로그램들은 시스템이나 OS에 영향을 많이 받았다. 그런데 자바는 어떠한 시스템이건 JVM만 깔려있으면 똑같이 돌아간다. 쉽게 말하면 기존의 프로그램들은 시스템에 직접 넣어서 돌렸다면 JAVA는 분석기를 따로 나눠주고 같은 코드를 사용한다는 것이다. 그렇게되면 한번 작성한 코드는 환경에 구애받지 않고 배포할 수 있게 되는 것이니 개발자 입장에서는 상당히 편리하다.(이러한 중요한 이유로 엄청 떴는데 이젠 다 따라한다. 특히 C#..)
A massively multiplayer online game (also called MMOG or simply MMO) is a video game which is capable of supporting hundreds or thousands of players simultaneously. By necessity, they are played on the Internet, and feature at least one persistent world. They are, however, not necessarily games played on general purpose computers; most of the newer game consoles (Xbox 360, PSP, PS3, Wii, etc.) can access the internet, and thus can have MMO genre games.
MMOGs can enable players to cooperate and compete with each other on a grand scale, and sometimes to interact meaningfully with people around the world. They include a variety of gameplay types, representing many video game genres. Many MMOGs require players to invest large amounts of their time into the game. Most MMOGs require a monthly subscription fee, but some can be played for free. ------------------------------------------------------------------------------- 사실 MMO란 걸 오늘 첨 들어봤다. 뭘까? 찾아봤더니 위키백과에 누가 글을 올려놨다.(여담이지만 위키백과에 글 올리는 사람들 대단하다.) 상당히 많은 사람들이 함께 즐기는 온라인 게임이란다. 요즘 무기들고 몬스터와 싸우고 상점가서 물건사는 게임들중 다중사용자를 지원하는 대부분의 게임을 말한다.
중요한 것은 인터넷기반 컴퓨터 뿐만 아니라 Xbox 360, PSP, PS3, Wii등과 같은 게임 콘솔역시 네트워크를 지원함으로써 MMO를 지원한다는 것이다. 게임 프로그래머들 앞으로 서버관리와 트래픽처리 필수로 공부해야 겠다.
Player base
Around 2002, a guy calling himself Sir Bruce, started to keep an eye on the active numbers of players for each of the MMO's, starting out with the Big Four (Ultima Online, Everquest, Asheron's call and Dark Age of Camelot). From the monitored MMO's the biggest today are World of Warcraft, Lineage, Lineage II and Runescape, and total amount of players playing MMO's estimated to be around 12-14 million, but many have several accounts making the total amount of accounts between 16 and 20 million. Sir Bruce frequently visits the various MMO oriented shows as a speaker
Comparing MMOGs to other games
There are a number of factors shared by most MMOGs that make them different from other types of games. MMOGs create a persistent universe where the game continues playing regardless of whether or not anyone else is. Since these games strongly or exclusively emphasize multiplayer gameplay, few of them have any significant single-player aspects or client-side artificial intelligence. As a result, players cannot "finish" MMOGs in the typical sense of single-player games.
Most MMOGs also share other characteristics that make them different from other multiplayer online games. MMOGs host a large number of players in a single game world, and all of those players can interact with each other at any given time. Popular MMOGs might have thousands of players online at any given time, usually on a company owned server. Non-MMOGs, such as Battlefield 1942 or Half-Life usually have less than 50 players online (per server) and are usually played on private servers. Also, MMOGs usually do not have any significant mods since the game must work on company servers. There is some debate if a high head-count is the requirement to be an MMOG. Some say that it is the size of the game world and its capability to support a large number of players that should matter. For example, despite technology and content constraints, most MMOGs can fit up to a few thousand players on a single game server at a time.
To support all those players, MMOGs need large-scale game worlds, and servers to connect players to those worlds. Sometimes a game features a universe which is copied onto different servers, separating players, and this is called a "sharded" universe. Other games will feature a single universe which is divided among servers, and requires players to switch. Still others will only use one part of the universe at any time. For example, Tribes (which is not an MMO) comes with a number of large maps, which are played in rotation (one at a time). In contrast, the similar title PlanetSide uses the second model, and allows all map-like areas of the game to be reached via flying, driving, or teleporting.
MMORPGs usually have sharded universes, as they provide the most flexible solution to the server load problem, but not always. For example, the space sim Eve Online uses only one large cluster server peaking at over 41,000 simultaneous players.
There are also a few more common differences between MMOGs and other online games. Most MMOGs charge the player a monthly or bimonthly fee to have access to the game's servers, and therefore to online play. Also, the game state in an MMOG rarely ever resets. This means that a level gained by a player today will still be there tomorrow when the player logs back on. MMOGs often feature ingame support for clans and guilds. The members of a clan or a guild may participate in activities with one another, or show some symbols of membership to the clan or guild.
However, the boundaries between multiplayer online games and MMOGs are not always as clear or obvious. Neverwinter Nights (2002) and Diablo II are usually called online role-playing games, (RPGs) but are also sometimes incorrectly called MMORPGs (a type of MMOG).
MMORPG라고 해도 스토리도 있고 퀘스트도 있고 일반 RPG처럼 스토리를 따라 진행해 나가는 것들도 꽤 있다. 하지만 MMO의 특징은 ending이 없다는 것이다. 끝없이 계속 한다. 나중에는 현질하는 재미에 빠져서라도 한다. 예전엔 멀티플레이를 지원해줘도 서버당 50명 미만을 모델로 했었다. 개인이 즐기거나 몇몇 친구들과 파티로 즐기는 여행쯤이었는데 MMO는 사람이 안보이면 재미가 없다. 인기좋은 MMO게임을 보면 서버가 여러개 있는 것을 볼 수 있는데 그것은 서버당 동시접속자를 4~5천개 미만으로 생각하기 때문이란다. 뭐 이 부분은 회사 사정마다 다를 것 같다. 장비가 좋고 돈이 많은 회사는 동시접속자가 많아도 되도록 지원할수도 있지 않을까. 사정이 이렇다보니 유저를 여기저기 퍼트려 놓는 것도 중요한 과제가 되었다. 사양이 떨어지는 컴퓨터로 온라인 게임을 즐기다보면 사람이 많은 곳만 가면 순간이동을 해대는 장면을 볼 수있다.(주로 그래픽카드가 딸려서 그렇다.) 이런 현상을 막기 위해서 맵을 크게 만든다. 맵을 크게 만들기 위해서는 세계관도 커져야 한다. 스토리가 방대하고 세계관이 크면 유저를 오래 붙잡아 둘 수있는 힘도 얻게 되니 여러가지로 이점이 있다. 단 스토리와 세계관이 너무 방대하면 유저가 이해하기 힘들어해서 포기할수도 있다. ------------------------------------------------------------------------------------ 그런데 한국은 게임 유저들은 세계적인데 비해 게임산업은 제대로 뜨질 못하고 있다.
KTH가 자사 게임포털 '올스타'의 지속된 부진과 함께 최근 선보인 게임들의 잇단 실패로 게임사업 최대 위기를 맞이할 것으로 보인다.
KTH의 게임포털 올스타가 '프리스타일'의 서비스 종료 이후 계속된 하향세와 최근 선보인 신작 게임들의 부진으로 게임사업 최대 위기를 맞을 것으로 보인다.
지난해 '파란게임'에서 '올스타'로 BI를 변경한 KTH
KTH의 게임포털 올스타(구 파란게임)는 2005년 제이씨엔터테인먼트(이하 JCE)의 온라인 농구게임 프리스타일의 성공적인 공동 서비스를 통해 단숨에 인지도있는 중견 게임사로 게임사업을 선보인 바 있다.
2006년 프리스타일의 공동 퍼블리싱 계약이 종료된 KTH는 프리스타일의 차기 타이틀로 캐주얼 MMORPG '큐링'에 주력했으나 경쟁작들과 유저들의 외면으로 국내 시장에서 실패하게된다.
이후 ' 'Xplay', 'Tanky', '젠온라인' 등의 다양한 캐주얼게임들 모두 동시접속자수 999명 미만의 저조한 성적을 기록했고, 올스타의 수익 창출을 위해 실시된 다양한 채널링 서비스 역시 게임 포털의 포트폴리오 구성을 위한 셋팅에 불과하다는 평가를 받았다.
PC방 전체 순위 300위권에도 진입하지 못한 '마그패라그'
계 속된 게임사업 부진을 기록한 KTH는 지난해 자사의 게임포털 '파란게임'을 '올스타'로 변경하고 새로운 게임 서비스를 선보이겠다고 다짐했으나, 기대작으로 주목받던 '풍류공작소', 캐주얼게임 '마그패라그'가 PC방 전체 순위 300위권 내에도 진입하지 못하는 부진한 성적으로 올스타는 게임사업 최대 위기에 봉착한다.
특히, 기대작으로 주목받았던 풍류공작소의 경우 원활한 플레이가 불가능했던 공개 서비스로인해 동시접속자수 1,000명미만의 저조한 성과를 기록했고, 올스타를 통해 채널링 서비스를 진행했던 'COG', '붉은보석' 등의 온라인게임도 수익성 악화를 이유로 서비스를 종료하는 등 더욱 힘든 상황으로 전개되고 있다.
흥행 타이틀이 없는 상황적인 어려움과 함께 올스타의 위기론이 극대화되는 부분은 올스타의 수익 구조적인 부분이다.
현재 올스타의 캐시카우를 담당하고 있는 '십이지천'
현재 올스타 매출의 상당부분을 담당하고 있는 '십이지천'의 경우 2004년에 선보인 온라인게임으로 일반적인 게임업체가 MMORPG의 수명을 3년 정도로 측정하는 것에 비해볼 때 향후 불안정한 수익구조가 예상되고 있다.
또한, 저조한 성적을 유지하고 있는 채널링 서비스와 PC방 전체 순위 170위~300위를 유지하고 있는 캐주얼게임들 역시 현재 이상의 수익을 창출하기는 힘들 것으로 관련업계는 분석하고 있다.
올스타는 이러한 상황을 타개하고자 최근 비공개 테스트를 진행했던 '십이지천2'를 선보였으나 전작 '십이지천'의 확장팩이라는 이미지가 강하게 작용해 대부분의 기존 유저들이 게임을 찾고있고, 신규 유저를 위한 기본적인 시스템이 마련되어있지 않은 점 등의 문제점을 드러내며, 신규 유저를 통한 매출 증대의 가능성을 불투명하게 만들고 있다.
신규 유저를 통한 매출 증대가 불투명한 '십이지천2'
이러한 상황이 장기화 될 경우 올스타는 점차 매출이 줄어들 것으로 예상되는 '십이지천'의 매출을 기반으로 게임포털 올스타를 유지해야하는 어려움을 겪게될 것으로 보이며, 현재 공개를 준비중인 '패왕'마저 성적부진으로 이어진다면 부진이 장기화된 올스타를 유지하기 힘들 것으로 관련업계는 전망하고 있다.
KTH 올스타의 한 관계자는 "작년 한해는 게임 퍼블리셔로서 내실을 다지는 한 해였다."라고 밝히며, "현재 자사가 준비중인 다양한 타이틀로 올 한해 보다 좋은 모습을 선보일 계획이다. 관심있게 지켜봐달라."고 말했다.
한편, 계속된 부진으로 게임사업 위기론이 거론되고 있는 파란 올스타는 오는 3월 20일, 향후 자사의 캐쉬카우 역할을 담당해줄 '십이지천2'의 사전 공개서비스를 실시할 계획이다.
요즘 세상은 메모리가 심하게 부족하지도 않고 컴퓨터가 무지 느리지도 않다. 그리고 프로젝트이 규모가 점점 커지고 있어 혼자서 프로젝트를 기획하고 완성시키는 경우는 거의 없다. 이런 세상에서 훌륭한 코드란 알아보기 쉬운 코드다. 물론 기본이 되는 것은 정확성이다. 제대로 작동하지 않으면 아무런 소용이 없다. 여기서 말하는 것은 어떤 프로그램을 만드는가가 아니다. 이곳은 프로그램이 돌아가는데는 큰 지장을 주지 않지만 알아보기 쉽고 유지보수에 편리한 습관이 무엇인지에 대해 고민하는 곳이다.
이름이 생명이다. 이름만 잘 지어놔도 설명할 것이 거의 없어진다. 특히 영어에 익숙하지 않은 사람들은 한영사전이 필수다. 그럼 어떻게 이름을 지어야 한단 말인가? 1. 변수 -> 명사로 함수 -> 동사 or 동명사로 짓는다. 변수(멤버변수, 속성)는 data의 의미를 가지고 있기 때문에 명사로 이름짓는다. 함수(멤버펑션, 메쏘드)는 동작하는 하나의 기능을 나타내기 때문에 동사로 짓되 힘든 경우 동명사로 짓는다.
2. 대문자 혹은 _로 단어를 구분한다. numOfValuses 혹은 num_of_values // getData(...) 혹은 get_data(...) 이런 식으로 사용하는 것이 원칙이다. 나의 경우엔 변수는 _로 구분하고 함수는 대문자로 구분하여 이름만으로 변수인지 함수인지도 구분할 수 있도록 사용하고 있다.
3. 알파벳으로 시작하라. C#이나 JAVA같이 유니코드를 사용하는 언어는 한글로 변수화 함수를 작성해도 무관하다. (난 가끔 한글로 작명하기도 한다.ㅋㅋ) 하지만 한국에서만 사용되는 source로 만들고 싶지 않다면 아무래도 영어를 사용하는 것이 좋다. 영어로 작명을 하는 경우 이름 중간에 공백이나 특수문자를 사용할 수 없고 숫자로 시작할 수 없다는 대 원칙만 지키면 이름으로 사용할 수 있지만 그럼에도 주의할 것은 있다. _(under bar)로 시작하는 이름은 system변수와 이름이 같을 수도 있으니 주의해야 한다. 당신이 무지 잘난 인간이 아니라면 사용하지 말기를 권장한다. 대문자로 시작하는 것은 class다. class의 경우 반드시 대문자로 시작해야 한다. 그러니 다른 것(변수,함수)들은 소문자로 시작하는 것이 좋다.
커리큘럼을 복사해온 것을 보다가 연산자부분은 그냥 넘어가면 안되겠다 싶어서 손을 대게 되었다. 특히 비트연산자는 눈여겨볼 필요가 있다. 연산자 - 단항, 산술, 쉬프트-비트, 관계, 논리, 삼항, 대입 대략 이런 식으로 분류할 수 있단다.
1. 단항 연산자 말 그대로 operend가 하나다. 같은 수식도 위치에 따라 쓰임이 달라지는데 특히 단항 연산자가 그렇다. 종류 : + , - , ++, -- 예 : int a = 10;이라고 가정해보자. +10, -10, +a, -a (상수나 변수가 음수인지 양수인지를 나타낸다.) ++a, a++, --a, a-- (많이 사용되지만 결코 쉽지 않은 연산이다. ++은 a의 값을 1증가시켜 a에 대입하고 --는 그 반대다. 하지만 ++a처럼 연산이 앞에(선행) 있으면 해당 line에서 이미 연산이 되고 a++처럼 뒤에(후행) 있으면 다음 줄로 넘어갈 때 연산이 된다. 이 연산은 상수에는 사용할 수 없다.)
int a = 10; printf("+10 : %d\n", +10); printf("-10 : %d\n", -10); printf("+a : %d\n", +a); printf("-a : %d\n", -a); printf("++a : %d\n", ++a); a = 10; printf("a++ : %d\n", a++); printf("a : %d\n", a); a = 10; printf("--a : %d\n", --a); a = 10; printf("a-- : %d\n", a--);
출력 결과를 예상해보고 확인해보라.
프로그래밍 습관에 대해서는 다른 카테고리에 계속 글을 올리겠지만 증가,감소연산자를 대입연산과 함께 사용하는 것은 아주 위험한 일이다. ========================================= 1. a = 10; a = ++a - --a + a++; printf("%d\n",a); ----------------------------------------- 2. a = 10; printf("%d\n", ++a - --a + a++); ========================================= 1번과 2번 소스는 출력 결과가 다르게 나온다. 그런데 중요한 것은 이런 수식이 사용되면 안된다는 것이다. 이런 수식을 잘 사용한다고 자랑하는 것은 멀쩡한 손 놔두고 발로 젓가락질 할 줄 안다고 자랑하는 것과 비슷하다. 누누히 말하지만 소스를 보는 사람이 바보라고 생각하고 최대한 알아보기 쉽게 작성해야 한다.
2. 산술 연산자 종류 : + - * / % 예 : 우리가 생각하는 사칙연산과 똑같이 사용하면 된다. 사칙연산이라면서 왜 다섯개야?라고 생각한 당신! 눈치가 빠르다. + : 더하기 - : 빼기 * : 곱하기 / : 나누기 %: 모듈러 + -는 단항연산에서도 사용되었다. 어떻게 쓰이느냐에 따라 연산이 달라진다는 것이다. 양쪽에 operend(피연산자)가 있으면 산술연산으로 계산되니 염두해두자. 그리고 C언어에서 이러한 연산들을 구분하는 것으로 띄어쓰기도 작용을 하므로 주의해야 한다. space bar한번에 전혀 엉뚱한 연산이 작동할 수도 있다. b - --a, b - - -a, b-- -a 이 세가지가 모두 다르다는 말이다. /연산은 나누기와 같은데 주의할 점은 C언어에서 int의 나누기연산이다. int는 정수를 취급하기 때문에 나누기 연산의 몫에서 정수부분만 가져온다. 이때 내림을 하는데 15/4의 경우 3.75가 아니라 3이 나온다. %연산은 유용한 사용이 많으니 잘 기억해두자. 사칙연산도 아니면서 같이 껴 있으면 얼마나 중요한 녀석인지 감 잡아야 한다. 이녀석은 15%4의 결과로 3이 출력된다. %의 사용은 다방면으로 많은데 그중 흔히 사용되는 경우가 반복문 내에서 if문과 함께 사용되는 경우다. if( i % 3 == 0) 이렇게 사용하면 i가 3의 배수일 때마다 if문이 작동한다.
3. 관계연산자 종류: <, >, <=, >=, ==, != A < B : A가 B보다 작다 A > B : A가 B보다 크다 A <= B : A가 B보다 작거나 같다. (작아도 true, 같아도 true) A >= B : A가 B보다 크거나 같다. (커도 true, 같아도 true) A == B : A와 B는 같다. A != B : A와 B는 같지 않다. 주의할 것은 앞에 있는 A가 중심이고 식의 결과는 true나 false가 된다. C의 경우 true나 false의 개념이 없기 때문에 true는 1이 false는 0이 return된다. (TIP: C에서는 0이면 false이고 나머지 다른 값이면 true가 된다.)
4. 삼항연산자 종류: 수식?A:B 예: (a>b) ? a++ : b++; 수식의 값이 참(true)이면 A가 실행되고 거짓(false)이면 B가 실행된다. 잘 사용되지 않는 수식이지만 복잡하고 긴 수식을 한방에 조지는 마법같은 효과가 있다.
5. 논리연산자 종류: &&, ||, ! ADN, OR, NOT이라고 부른다. 논리연산자는 계산식을 operend로 하는 것을 원칙으로 한다. A && B : 두 식이 모두 참이다. (두 식이 모두 true면 true, 아니면 모두 false) A || B : 둘중 하나는 참이다.(두 식이 모두 false면 false, 아니면 모두 true) !A : A의 결과를 반대로~ (A가 true면 false, A가 false면 true)
6. 비트연산자 사실 내가 비트연산자 때문에 글을 쓰게 되었다. 비트연산은 조금쯤 깊이있게 생각해야 하기 때문에 일반적인 프로그래밍에서 많이 사용하지 않는 것이 좋다. 하지만 비트연산은 산술연산보다 확실히 빠르므로 반복횟수가 많고 계속적인 연산이 있을 경우, 비트연산이 편리한 수식일 경우 비트연산을 잘 사용하면 효율적이다. 종류 : &, |, ~ &(AND) : 비트가 둘다 1이면 1 아니면 0 |(OR) : 비트가 둘다 0이면 0 아니면 1 ~(NOT): 비트 반대로 예)
이해만 확실히 하면 전혀 어려운 개념이 아니다. 다만 2진수로 생각해야 한다는 것이 문제다.
7. shift(쉬프트) 종류 : >>, << 에) 20 << 3 이거 결과로 80 나온다. 왜 그런지 알아보자 20 : 0000 0001 0100 <<3 결과 : 0000 1010 0000 왼쪽으로 3칸 이동한 것을 볼 수 있다. shift연산자는 방향에 따라 이동하기때문에 헷갈리기 쉽다. 화살표가 있다고 생각하면 기억하기 쉽다. <<------- 요녀석 왼쪽으로 이동하라는 이야기 ------------>> 요녀석 오른쪽으로 이동하라는 이야기 주의: >> 요녀석 주의해야 한다. <<는 오른쪽에 0으로 무조건 채우면 된다. 그런데 >>는 MSB에 따라 달라진다. 그러니까 가장 왼쪽에 있는값이 1이면 1로 채우고 0이면 0으로 채워야 한다. 그러니까 양수면 0으로 채우고 음수면 1로 채우라는 이야기!