연우, 장을 열다.


또 한번 진지해질게요. 

한빛미디어에서 나온 책과 생활코딩을 참고해서 직접 정리한 내용들입니다. 

퍼가실 일은 없으나 공부에 잘 활용하셔도 좋으나 

긁어서 과제제출이나 내가 쓴 글이요오 ~ 이런건 아니됩니다 ^^ 











 

[접근제한] [클래스 종류] class 클래스명

 

접근제한(public) - 말그대로 클래스를 접근해서 생성하고 사용하는 것에 "제한" 두겠단 의미로 정의할 있다.

클래스 종류 - 현재 클래스가 어떤 클래스인지를 설명해주는 수식어(형용사 같은 :) ㅋㅋ ) 일종이다. 최종(final) 클래스, 추상(abstract) 클래스와 같이 클래스의 종류를 나눌 있다.

클래스명 - 첫문자는 대문자로. 하나 이상의 단어로 만들면 TestJava 이런 식으로 단어 음마다 끊어서 대문자로 ~ 숫자가 앞에 나올 없음 ^^

클래스 뒤에 '상속에 대한 정의' '구현에 대한 정의' 방법이 있는데, 차차 공부하도록 한다.

 

Class Ex1{

 

}

일반적인 클래스 선언이 위와 같다. 이는 [접근제한] [클래스 종류] 생략된 일반적인 방법이고, { } 둘러싸인 부분을 클래스 영역이라고 한다.

안에 [멤버 필드] [생성자], [멤버 메서드] 정의한다.

 

멤버 필드

 변수와 상수를 속성(자료)라고도 하는데, 이것은 객체가 만들어질때 객체의 특징적인 속성을 담아두는 것이다.

 여기서 필드가 static이냐 instance냐에 따라 필드 개념이 달라진다. 일단 무시하고 넘어 가는데 멤버 필드라고 불리는 아이는 자료, 현물 정의하는 기초적 단위로 생각하면 될듯하다

  쉽게 말해 닭갈비 만들려고 시장가서 생닭과 , 고추장 후추 등을 사는 일이 먼저이지 않나? 닭갈비 라는 요리르 하는 있어서 필요한 재료들 아니겠나

 그게 바로 멤버 필드 놈이다. 클래스 라는 요리를 하는 있어서 마트가서 장봐와야할 새끼.

 

멤버 메서드

 메서드는 특정한 일을 수행하는 행위. 동작(action) 의미한다.

 멤버 필드를 가지고 작업을 수행할 수도 있고 메서드도 static 메서드(클래스 메서드) instance 메서드 라는 가지 종류가 있다.

 간단히 말하자면 static 메서드는 메서드를 가지는 객체를 생성하지 않아도 사용할 있지만, instance 메서드는 객체를 생성해야지만 사용할 있다.

 

 

Class Ex1{

Int data ; // 자료 속성, 변수 선언 , 멤버 필드

Public void setData(int n){

Data = n ;

}

}

 

코드는 data 라는 멤버 필드의 값을 n이라는 변수값으로 지정하는 형태의 동작을 정의하는 메서드다.

이런 속성들과 동작들을 우리는 한마디로 "MEMBER" 멤버 라고 총칭한다.

 

class MP3P{

String color ;

int memory ; // 속성 설정 멤버 필드를 지칭함

//멤버필드 영역. 이 자리는 변수 혹은 상수가 자리한다.

 

//멤버 메서드 선언

public void  memoryUp(int n){

memory +=n ;

}

public void  setColor(String str){

color =  str ;

}

}


결론을 말하자면 , 클래스는 멤버(멤버필드, 멤버메서드)라는 것을 가진다. 이다!! 


객체 생성과 멤버 접근법

  클래스 멤버들은  자료형을 가지는데, 자바의 자료형은 기본자료형(int, float, double,char)과 참조 자료형(객체자료형) 두가지가 있다.

  위의 예시에서 MP3p 클래스처럼 개발자에의해 만들어진 "사용자 정의 클래스"등을 자료형으로 하는 참조 자료형이 있다. 이런 참조 자료형을 가지는

  참조변수 즉 객체를 생성하고 사용하는 방법을 알아본다.


객체생성

 객체 생성의 첫번째는 객체를 선언하는 일이다. 

  MP3p m3 ;

위 처럼 선언부분에서 객체가 생성되는 것이 아니라 MP3p 클래스 타입의 m3이라는 참조변수가 메모리 영역에서 주로 변수와 같이 가벼운 것들이 자리잡는

 stack영역에 만들어진다. 

 두번째 단계는 선언된 변수에 객체를 생성하는 것이다.

  M3 = new MP3p();

 New라는 연산자를 통해 무조건 메모리 내에 공간을 할당받고, MP3p 클래스의 생성자를 통해 객체를 생성한  생성된 객체를 참조할  있는 참조변수를 m3에 담아준다.

 "객체는 생성자라는 것에 의해 만들어진다" 라는 사실만 알자 

메모리 구조영역에 대한 설명 페이지 136

  #stack : 스택 영역에 자리하는 것은 주로 변수와 같이 가벼운 것  

  #heap : 힙영역에 자리하는 것은 객체와 같은 무거운 것들이 자리한다.

  #static : 정적인 값들만 온다. 상수와 같은 정적인 값들을 의미하는데, 이는 프로그램이 끝날때까지 없어지지 않으며, 한번 생성되면 두번다시 만들어지지 않는다.


접근제한자

  결국에 객체를 생성해서, 클래스 내부에 있는 속성(변수, 자료, 멤버필드)과 행동(동작, 액션 , 멤버메서드)을 가져다 쓰는데 있어서 권한이 필요하다.

  아무나 와서 이 정보를 사용하고 동작한다면, 우린 뭐 위 아더월드 모두가 하나되어 살겠지 ㅋㅋ 따라서 접근을 어떤 경우엔 허락, 또 다른 경우엔 비 허락을 한다.

   public : 모든 접근을 허용

   protected : 같은 패키지 폴더에 있는 객체와 상속 관계의 객체들만 허용

   default : 같은 패키지(폴더) 내에 있는 객체들만 허용

   private : 현재 객체 내에서만 허용


멤버 접근법

  클래스 내부에 있는 멤버에게 접근하기 위해서는 객체의 참조변수를 통해 '.'을 사용하여 해당 객체의 메서드나 변수에 접근할 수 있다. '.' dot 연산자라고도 하며,

  사용법은 [객체 참조.멤버명] 형식이다. 위에서 정의한 MP3p 객체를 예로 들어 MP3p라는 클래스의 메서드 중 메모리의 성능을 높이는 memoryUp(int n)을 사용해보자


생성자(Constructor)

여태까지 클래스를 사용하기 위해서는 

overloadingTest2 ot2 = new overloadingTest2();

              인스턴스      생성자();

위와 같은 작업을 했다.


위 코드를  설명하면 overloadingTest2 라는 클래스를 new 연산자를 통해 객체를 생성해준다.  

생성된 객체를 인트선트 ot2에 담아서 클래스 내부에 있는 클래스 내부에 있는 메소드들에 접근이 가능했다.

ot2.getName(); 

이런 방식으로 말이다. 


생성자는 일종의 초기화와 같다고 생각하면 되는데, overloadingTest2 에 있는 멤버 변수들의 초기화를 시켜주는 개념이다.

이게 무슨 말인고 하니, 



 

뭐라뭐라 짜여져 있는 calculator 라는 클래스에 new 연산자를 붙혀 생성자를 선언한다. 

여태까지 new Calculator(); 여기서 Calculator(); 이것이 클래스라고 생각했는데 생성자였다. 


그럼 클래스 Calculator() 내부에 생성자가 있느냐?? 여태까진 없는 놈들만 본 것이다. 없다면, 컴파일할때 디폴트값으로 알아서 정의해준다. 

클래스 내부에 있는 생성자는 메소드 실행에 앞서서 실행시켜준다.


클래스와 인스턴스 그리고 객체

클래스 = 설계도 : 정의를 하고 ~

인스턴스 = 제품 : 호출을 하고 ^^


인스턴스는 구체적인 객체를 의미한다. 그 구체적인 객체가 어떤 모습이고, 어떤 변수들로 구성되어 있는지 알아보고 정의하는 것이 바로 "클래스"이다.


 


 

하드웨어적으로는 기본적으로 멤버 변수를 선언할때 int a ;

라고 선언하면 메모리라는 공간에 jvm 이라는 똑똑한 기계가 int형의 데이타가 들어갈 공간을 만들어준다.

추후에 a=10;  이라고 정의하면 메모리 방안에 데이타가 들어가게 된다.



, Stirng[10] 이라고 하면

 

 

 

 

 

 

 

 



이런 형식으로 메모리 공간 안에 방을 만들어준다. 역시, 그 배열 내부에 어떤 값이 들어와도 ㅇㅋㅇㅋ 해줄 수 있는 것이다. 

그 ㅌ은 개념으로 

Calculator c1 = new Calculator();

라고 정의함으로서 넓은 의미로는 메모리 안에 데이터  타입 Calculator의 공간을 생성한 후, 참조변수 c1의 인스턴스의 공간을 확보해 두는 것과 같은 이치이다. 

그렇다면…, 확보된 메모리 공간 영역 내부에서 자아유롭게 정보를 사용할 수 있게 되는 것이다.



'web > java' 카테고리의 다른 글

자바 기본 문법 - 식별자, 자료형  (0) 2017.03.31
자바 가상머신(JVM : java virtual machine) 정의  (0) 2017.03.22
자바의 탄생 및 특징  (0) 2017.03.22

식별자

 식별 이란 문자 그대로 사물이나 현상 모든 것에 대해 구별할 있는 것을 의미한다. 식별자(identifier) 자바 프로그래밍을 하는데 필요한 구성요소다.

 

식별자를 정의하는 규칙

 1.식별자는 중간에 공백문자, %, # 등과 같은 특수문자를 사용할 없다. !! $ _ 사용할   있다.

 2.일반적으로 $,_ 등의 특수문자는 식별자의 첫문자로 사용하지 않는다. 이유는 자바 내부에서 쓰는 이름중 _ $ 시작되는 것이 많아 충돌을 예방하기 위함이다.

 

-클래스명을 정의하는 규칙

 클래스란 속성과 동작을 통해 하나의 객체를 만들기 위한 틀과 같은 것이다. 틀의 이름을 정의하는데 아래와 같은 규칙이 있다.

   @ 첫문자는 반드시 대문자로

   @ 하나 이상의 단어가 모여 클래스명으로 지정될떈 단어의 첫문자들만 대문자로 표현

Example )---------------------------------------------

 

Class JavaTest{

 

}

--------------------------------------------------------

실은 Javatest라고 해도 상관없는데 개발자들끼리 서로 작업한 내용을 이해하기 쉽게 하기 위한 규약같은 것임

 

-상수명을 정의한느 규칙

 상수(Constant) 프로그램이 끝날때까지 절대로 변하지 않는 메모리공간이다. 변하지 않는 정보? 변하지 않는 !!

  @ 모든 문자를 대문자로 표현한다.

  @ 하나 이상의 단어가 연결될 때엔 _ 연결한다.

Example )---------------------------------------------

JAVA_TEST ;

JAVATEST ;

--------------------------------------------------------

 

 

-변수명, 메서드명을 정의하는 규칙

  변수(variable) 자료를 담을 있는 메모리 공간이다. 객체의 색상이나 크기 같이 변할 있는 상태를 나타내는 것이다.

  상수와는 정반대의 개념이다. 변해 변할 있는 수야 ㅋㅋ 변할 있는 메모리 공간을 의미하며, 속성(property) 라고도 부른다.

 

 -첫문자는 소문자로 표현

 -하나 이상의 단어를 연결될때엔 뒤에 오는 단어중 첫문자만 대문자로 표현한다.

Example )---------------------------------------------

itLand

It_Land

--------------------------------------------------------

 

예약어

 예약어는 자바 언어 자체에서 이미 예약한 단어라는 의미다. 예약어의 개념은 자바 프로그래밍을 하는데 있어 특정한 의미가 부여되어 있는 이미 만들어진 식별자를 의미한다.

Example )---------------------------------------------

Abstract, char, boolean, byte, package, int

--------------------------------------------------------

 

 

자료형

  자바에서는 기본자료형과 참조 자료형(객체 자료형) 두가지고 나뉜다. 운영체제가 바뀐다 해도 자료형에는 변함이 없다.

 

기본 자료형

--------------------------------------------------------------------------------------

종류       설명              저장 공간    값의 범위 (최소값~최대값)

==================================================

boolean    논리값            1 bit        true / false

--------------------------------------------------------------------------------------

byte       부호 있는 정수    8 bits       -128 ~ 127

--------------------------------------------------------------------------------------

char       유니코드 문자     16 bits      \u0000 ~ \uFFFF

--------------------------------------------------------------------------------------

short      부호 있는 정수    16 bits      -32768 ~ 32767

--------------------------------------------------------------------------------------

int        부호 있는 정수    32 bits      -2147483648 ~ 2147483647

--------------------------------------------------------------------------------------

long       부호 있는 정수    64 bits      -9223372036854775808 ~ 9223372036854775807

--------------------------------------------------------------------------------------

float      IEEE 754 실수     32 bits      1.40239846E-45f

                                          ~ (표현 가능 양수 범위)

                                          3.40282347E+38f

--------------------------------------------------------------------------------------

double     IEEE 754 실수     64 bits      4.94065645841246544E-324

                                          ~ (표현 가능 양수 범위)

                                          1.79769313486231570E+308

--------------------------------------------------------------------------------------

 

문자형

Example)------------------------------------

Char c = 'a';

System.out.println("c :"+c);

---------------------------------------------

 

Char 자료형은 2바이트이며 표현범위가 0 ~ 65,565이다. 만약 위에서 선언한 변수가 char c="A"; 라고 하고 컴파일 하면 에러가 난다.

이유는 "" 쌍따옴표는 문자형이 아니라 문자열을 의미하기 때문이다.

 

미리 만들어놓은 상수값들 (리터럴 이라고 부름)

다시 한번 더 진지해질게요

순전히 제 공부 목적이다 보니, 잘못되거나 틀린 경우도 더러 있을겁니다. 

이 점 양해 바라며, 댓글 주시면 수정 혹은 수정한 내용으로 이해를 하겠으니 댓글 주세요 :) ㅋㅋㅋ 


자바 언어로 작성된 플그램 코드는 운영체제(윈도우 리눅스 유닉스)에서 직접 이해되는 코드가 아니다. 이것은 컴파일러에 의해 JVM에서 이해할 있는 중간 코드 형태인 '바이트코드' 형식으로 변환된다. 이것이 바로 클래스인데 클래스 파일에는 명령어와 기호표, 그리고 다른 보조적인 정보들을 담고 있으며 이런 명령어들과 정보들을 해석하여 실행하는 가상적 기계가 바로 JVM이다.


  -자바의 실행이 클래스파일이고, 클래스 파일을 실행시키는 놈이 JVM이다



클래스 영역

  임포트문을 통해 필요로한 클래스들이 로드되고 멤버메서드들은 메서드 영역에 저장되고, 상수들은 상수 풀에 저장된다. 이렇게 사용자가 직접 작성하는  클래스 코드를 저장하는 곳이 바로 클래스 영역이다.

 

자바스택(영역)

  -stack : (사전)무더기 다량 (com) : 임시로 보존하고 싶은 데이타를 차례로 겹쳐 쌓듯이 수납해가는 기억장치

   플그램을 수행하다보면 여러 메서드들을 호출하고 또는 관련된 정보를 주고 받기도한다. 이러한 일정한 일처리를 기록하는 곳이 

   바로  자바 스택이다.  가장 최근에 호출한 메서드의 스택 프레임이 가장 위에 존재하게 되는데 이를 "활성 스택 프레임"이라고 한다.

   메서드가 수행을 다하면 해당 스택 프레임은 소멸된다.

(heap)(영역)

  new 라는 예약어를 통해 객체가 동적으로 공간을 할당받는 곳이며, 가비지 컬렉션이 관리하는 영역이다.

  생성된 객체는 클래스영역에 해당 클래스가 존재해야만 공간을 할당받는다.

 

네이티브 메서드 스택(Native method stack)

  자바에서는 하드웨어를 직접 제어하진 못한다. 따라서 C언어와 같은 다른 언어의 기능을 잠시 빌려서 사용할때가 있는데, 이떄 사용하     는 것이 JNI(java native Interface)

  기술이다. 여기서 사용되는 네이티브 메서드들이 바이트 코드로 변환되면서 사용되고 기록하는 영역이 바로 네이티브 메서드 스택이다.

 

JDK 5.0

   이게 뭐징? 얘는 일종의 버전인듯한데, 기존과 다른 특징을 가지는게, 제네릭 타입의 사용, 메타데이터 기능 추가, 루프의 개선, 오토박싱/언박싱의 기능이 있단다

'web > java' 카테고리의 다른 글

[자바 기초 문법] 클래스의 구조와 정의  (0) 2017.03.31
자바 기본 문법 - 식별자, 자료형  (0) 2017.03.31
자바의 탄생 및 특징  (0) 2017.03.22

저 지금 진지하니까 궁서체로 잠시 쓸게요. 

자바가 언제 어디서 어떻게 만들어졌는지 말입니다. 

자바에서 포스팅한 내용들은 한빛 미디어의 자바책을 기반으로 이해한 내용을 요약했습니다. 


자바의 탄생

   1.원래 자바는  썬마이크로시스템즈(이하 ) 있는 연구진들이 전자제품(오디오,티비 ) 제어하는 통합 언어를 만들려고 했다. 만들려는 목적이    여기 기계에서도 저기계로  옮겨도 있는 "이식성" 여러 기계에 대입했을때 호환이 있는 "호환성" 위해서였다. 그러나 fail... 안타깝죠 


   (WWW) 문화가 급속도로  발전하면서 위에서 개발한  오크 언어를 자바로 바꾸고 다음 서로 다른 컴퓨터 사이의 "호환성" "이식성" 뛰어난 언어로 전 현재 자바 패키지중 일부인 애플릿(applet) 이용한 동적 웹페이지의 데모를 시현하면서 완전 하태하태가 되었다.


 

자바의 특징

 1.책에 의하면......... 배우기 쉽단다 . ㅋㅋㅋ 하하하하 - 정말? ㅋㅋㅋ 

 2. 플랫폼의 독립성 : 돈으로 비유하면 유로 처럼 일종의 통화폐의 통합을 이루어 냈다. 무슨 말인고 하면 컴퓨터의 운영체제가 윈도우 유닉스 리눅스 등이 있다. 윈도우에서 실행 가능한 플랫폼이 리눅스에서 될리가 없다. 엔화 들고 한국 마트가서 구매하려는 것과 마찬가지다. 기존의 방식이 윈도우 버전에서 만들었다면 그것을 가지고 리눅스에서 사용할 없는 것은 당연한 일이다. 자바는 이것을 극복했다. 운영체제 시스템이 무엇이든지 상관하지 않고 독립적으로 존재하여  실행가능하다

 

3.객체지향프로그래밍

   상대적인 개념이 절차지향 프로그래밍이겠지. 객체가 뭔가? 객체는 눈으로 확인할 있고 만질 있는 모든것이다. 객체 지향 프로그래밍이란 서로 다른 일을 부여  받은 하나 이상의 객체 가운데 요청된 일을 처리하기 위해 실천가능한 '객체' 호출하여 처리하게 하는 것을 말한다. 혹은 이것을 다른 곳에서로 사용할 있도록 하는 (재사용성) 기능을 추가하여 객체를 확장하는 것을 객체 지향이라고 한다. 다시  말하면 서로의 기능을 구조적으로 나눠 사용하고 사용하고 사용하고, 부실한 잘못된 점을 발견하면 고쳐쓰고 기능하게 한다. 이게 객체 지향 프로그래밍의 특징이다.

4.가비지 컬렉션

5.멀티스레드