클래스

jinkyung·2021년 1월 6일
0

JAVA

목록 보기
3/29

클래스

클래스명과 소스코드파일명을 반드시 같게 하라는 법은 없다.

파일명 Ex24.java, 클래스명 Ex224 일 경우

javac Ex24.java           컴파일시엔 소스코드 파일명

java Ex224                   실행할 시엔 클래스명

​

하나의 파일 안에 2개의 클래스가 있을 경우, 2개의 class파일이 만들어진다. 즉, 각각의 다른 클래스 파일로 생성한다.

그러므로 호출시 클래스명을 다르게 쳐줘야한다.

ex) java Ex17   혹은    java Ex117

하지만 파일 하나 안에 여러개의 클래스파일을 만들면 찾기 어렵기 때문에 일반적으로는 파일 하나에 하나의 클래스를 만들고, 클래스명과 파일명을 일치하도록 만든다.

​

package 생성하면 package 폴더와 함께 package폴더 안에 클래스파일들이 저장된다.

package abcd;                          //클래스 파일이 어디있는지 보여준다.

class Ex117{

 public static void main(String[] args){
	System.out.println("출력117");

 }
}

class Ex17{

 public static void main(String[] args){
	System.out.println("출력17");
 }
}
​

클래스명이 중복되어도 package만 다르다면 문제가 없다.

하지만 실행시 주의해야 한다. package의 폴더 안에 들어가서 실행시키면 안된다. taget폴더를 기준으로 실행시킬 수 있다.

예) D:\java\target>java abcd.Ex17

​

But package명도 중복될 수 있기 때문에 abcd 안에 디렉토리를 더 만든다. 

예) packge a.b.c;                     //    .을 기준으로 a아래에 b아래에 c디렉토리를 생성

​

+ 이름이 중복될 가능성을 최소화 하기 위해 중복되지 않을 이름인 도메인을 패키지명으로 한다.

그런데 너무 중구난방이니까 거꾸로 com.naver.project5 이런식으로 패키지를 만든다. (개발자들의 암묵적 약속)

ex) com - 회사명 - 프로젝트명  (적어도 3단 이상으로 구성하자)

      package com.bit.class5.day04;

​

컴파일할 때 ex)   D:\java>javac -d . Ex17.java

원래 자바는 소스코드 파일의 정리는 없으나, 이클립스에서는 정리되도록 만들어주었다.

클래스의 구성요소 - 메소드

∙ 메소드는 클래스의 구성요소이므로 클래스 안의 메소드 안에 있으면 안된다!

∙ 한 클래스 내부에서 메소드명은 중복X (단, 매개변수의 갯수, 타입이 다르면 중복가능 : 메소드 오버로드)

∙ 메소드화 = 모듈화 (기능을 빼놓고 필요할때마다 호출)
ex) public static 자료형 메소드명(매개변수){~~~;} // return 값 없으면 void

return은 호출한 쪽으로 돌아온다는 것.

내가 매개변수에 값을 주는 것은 얼마든지 가능하지만 return 값은 안받거나 오직 하나만 받을 수 있다.

메소드의 호출은 이름과 매개변수의 유무, 갯수, 각 순서에 따른 타입이 일치해야만 호출가능

package com.bit.day04;

class Ex18 {
	//클래스의 구성요소
	//1.메소드
 public static void func02() {
	System.out.println("새로운 메소드2");
}//func02 end

  public static void func01() {
	System.out.println("새로운 메소드");
}//func01 end

  public static void main(String[] args) {
//void는 리턴할 값이 없다는 것이지 return이 없는게 아니다. return;은 숨어있는 키워드로 생략 가능한 것이다.
//컴파일 과정에서는 void메소드에 return;을 붙인다.
 	System.out.println("main 시작");
    return;       //이곳에 붙이면 밑에 수행할 코드가 남아있으므로 오류가 뜬다.
	func01();
    func02();
	System.out.println("main 종료");
  }//main end
}//class end
​

  public static void main(String[] args) {

 	System.out.println("main 시작");
    int su = 1;
    if(su>0){return;}
//그러나 if(su>0){return;}을 붙여주면 참이기 때문에 return을 실행하게 된다. 
	func01();
	func02();
	System.out.println("main 종료");
  }
}
​

매개변수에 double, 주는 값에 int를 주면 자동형변환 일어나서 출력은 1.0과 2.0로 된다.

 class Ex18 {

  public static void func03(double a, double b) {
	System.out.println("전달받은 값" +a);
	System.out.println("전달받은 값" +b);
}

 public static void main(String[] args) {
	func03(1,2);
  }
}
​

​

메소드명의 중복은 안되지만, 구분할 수 있다면 가능하다. 

class Ex18 {

 public static void func01() {
	System.out.println("새로운 메소드2");
}
  public static void func01(int z) {
	System.out.println("새로운 메소드" + z);
}

  public static void main(String[] args) {

 	System.out.println("main 시작");
	func01(33);
	func03(1,2);                          //매개변수 있는 func01을 호출가능
	func01();
	System.out.println("main 종료");
  }
}
​

변수의 life cycle!  오류X

class Ex19 {
 public static void func01(){
	int a;
	a = 1234;
	System.out.println("func01 a="+a);
}

 public static void main(String[] args){
	int a;
	a = 1234;
	func01();
	System.out.println("main a="+a);
 }
}

자바는 운영체제에 독립적이다. 컴파일한 결과를 다른 운영체제에서 실행해도 정상적으로 작동 된다.

how? 직접 실행을 안한다. (가상 애뮬레이터) 중간에 애뮬레이터라는 프로그램이 있어서 내부 실행환경이 동일해진다.

즉, JVM이라는 가상 환경을 만들어 이 환경 내에서 자바가 돌아가는 것이다.

프로그램 내부에서 돌아가는 프로그램인 것이기에 성능은 떨어질 수 밖에 없다. 운영체제가 JVM을 돌리면서 자원소모를 하고, 또 자바를 돌리기 때문에 100% 성능을 낼 수 없다.

특정 규모 이상의 프로젝트에서 사용하기엔 좋다! 규모가 큰 프로젝트라고 해서 급격하게 자원소모가 올라가지 않고, 처음 자원소모의 기준점이 어차피 높았기 때문에 그래프로 치면 완만한 곡선을 그리며 올라가기 때문이다.

자바는 메모리를 보통 3~4개의 세그먼트로 나눈다.

클래스영역, 스택영역, 힙영역 (자료구조 : 정보들을 제어한다. 정보를 제어 하는 방식)

일을 하는 영역 : 스택영역 (스택 처리방식)

클래스 영역의 상수영역 - 프로그램돌리는 순간 등장하는 상수들을 클래스의 상수영역에 먼저 적재하고 시작한다. (상수영역도 자료형이 있다.)
이게 끝나면 스택에 main을 올린다. 만약 선언과 함께 a=1234를 초기화 한다면, 상수영역을 보고 스택영역에 쓴다.(복사)

--> 변수 선언,초기화 연산을하여 값이 변하게 되면 상수영역은 절대 건들지 않고(상수니까 변하면 안됨) 스택 영역에서 차지한 공간 안에서 바뀌는 것이다. 메소드 f1을 호출하는순간 전에 쓰여졌던 변수공간 위에 f1생성하고 return을 만나면 pop한다 = 버리는 것.

tip
: cmd 한글깨지면 encoding option주기

(D:\java>javac -encoding utf8 Ex20.java) or (D:\java>echo 한글>Ex20.java)

0개의 댓글

관련 채용 정보