20/11/2

아라·2020년 11월 2일
0

국비교육

목록 보기
16/30

static키워드

클래스 멤버에게 붙이는 키워드.
1. 멤버 변수
2. 멤버 메서드
같은 틀(클래스)에서 찍어낸 인스턴스들이 서로 다른 값을 가지는 경우와 공통된 값을 가지는 경우가 있다.

class SmartPhone{
	// 개개인이 가지는 데이터(다양)
    // 객체 멤버 변수 역할
	private String model;
	private String color;
	private int price;
	
	// 모든 객체가 가지는 공통된 데이터 -> 정적멤버
	private static String manu; -> 정적 멤버변수
    
    // static변수의 getter, setter는 static메서드로 만든다.
	public static String getManu() {
		return manu;
	}
	public static void setManu(String manu) {
		SmartPhone.manu = manu;
	}
}

...
public static void main(String[] args) {
	// 핸드폰 3대
		
	SmartPhone.setManu("삼성");
    System.out.println(SmartPhone.getManu());

메모리상에서 static에의 접근(! 그림그려넣기)

  1. 클래스 로드 : 클래스 선언 코드를 미리 읽고 내용을 파악하는 작업
  • static키워드가진 멤버를 만나면 static영역에 할당
  1. main() 메서드 실행

static의 활용 : 만든 개수 세기

...
public static void main(String[] args) {
	Robot r1=new Robot();
	Robot r2=new Robot();
	Robot r3=new Robot();
	System.out.printf("총 개수 : %d개\n", Robot.count);
		
	}
}

// 로봇장난감 클래스
class Robot{
	private String name;
	public static int count; // 편의상 public으로.
    
    public Robot() {
		Robot.count++;
	}
    
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
}

패키지

클래스를 관리하는 집합(물리적인 폴더)
클래스 관리, 클래스 용도 명확하게 알아보게 하기 위함

패키지명명법

  1. 모든 문자를 소문자로 작성한다.(규칙)
  2. 공백 금지, 숫자 금지, 특수문자 금지 > 모두 영소문자로만!
  3. 전세계의 모든 패키지와 비교해도 중복되지 않도록
  • 주로 도메인을 사용(중복되지 않도록 만드는 것이 힘들기 때문)
  • 예를 들어, 네이버에서 개발하는 자바코드의 패키지는 com.naver.xxx 이런식으로 명명한다.(구글이라면 com.google.xxx 이런식으로.)
  • 패키지명이 겹칠 경우 다른 사람이 만든 프로젝트와 꼬일 수가 있다.
  • 최소 3단계 이상을 사용. 예를 들어, test는 1단계 패키지, com.test는 2단계 패키지, com.test.java는 3단계 패키지.

    패키지의 역할

    패키지가 다르면 클래스명이 중복 가능하다.

    다른 패키지의 클래스를 사용하고 싶으면 import해야 한다.

    클래스명이 겹칠 경우, 현재 패키지에 있는 클래스를 먼저 가져온다. 다른 패키지에 있는 클래스명을 사용하고 싶을 때는 클래스 앞에 패키지명 전체를 써주면 된다. 단, import는 반드시 같은 프로젝트 내에 있는 패키지(클래스)만 인식이 가능하다.
SmartPhone s1=new SmartPhone(); // 같은 패키지 내에
com.test.aaa.SmartPhone s2=new com.test.aaa.SmartPhone(); // aaa패키지 내에

상속(Inheritance)

클래스와 클래스 간에 해당 클래스가 소유하고 있는 코드(멤버 변수, 멤버 메서드)를 물려주는 행위. 부모 클래스가 가지고 있는 코드를 자식 클래스에게 물려준다.

상속을 왜 하는지?

코드 재사용을 위해서.

난수생성기

Math.random() : 메서드형태

Random() : 클래스형태

private static void m1() {
	Random rnd=new Random();
	System.out.println(rnd.nextInt()); // int범위 내에서 발생
    System.out.println(rnd.nextInt(10)); // 0~9범위 내에서 발생.
}

Object클래스

java.lang(자바 기본 패키지)에 있다. 루트 클래스(모든 클래스의 조상)

추상클래스&추상메서드(Abstract class&Abstract Method)

추상클래스

클래스의 일종. 일반 클래스의 목적이 객체 생성인데 반해 추상 클래스는 객체의 행동을 표준화하는 것이 목적이다.(객체 생성은 불가능) 상속관계에서 클래스 부모 역할은 가능하다. 추상 메서드를 자식들에게 강제로 만들라고 시키려고. 추상 클래스의 하위 클래스들은 모두 사용법이 동일해진다.

abstract class Monitor{ // 추상클래스의 선언
}

추상메서드

추상클래스에서 추상메서드가 선언되면 그 추상클래스를 상속받은 클래스는 반드시 추상메서드를 구현해야 한다.

abstract class Monitor{
	// 멤버 구현
	public String model;
	public int price;
    
	// 추상메서드 선언
	public abstract void on();
	public abstract void off();
}

class LG100 extends Monitor{
	public void on(){
		System.out.println("전원 On");
	}
	public void off(){
		System.out.println("전원 Off");
	}
}

0개의 댓글