study/JAVA 🦊

JAVA - 6

서나쓰 2020. 12. 28. 17:38
728x90

추상화(abstract)

추상화란?

  • 프로그램 코딩의 틀을 강제하는 것
  • 추상화가 되어있는 클래스는 객체를 못 만든다 → 비어있기 때문에
  • 상속 과정에 있어서 메서드를 자기가 정의하는 것이 아니라, 자식들이 정의하라고 가이드라인을 제공하는 것
✅ Java 클래스를 작성하기 위한 설계도를 소스코드 형태로 제시
  • 자바빈즈가 갖는 특성은 다 갖는다
✅ 추상화는 메서드와 클래스에만 사용할 수 있다.
//선언만 가능하고, 구현부를 위한 블록 존재 X 
public abstract void sayHello(); 

//------추상메서드--------- 

public abstract class Hello { 
	private String msg; 
    public Hello(String msg) { this.msg=msg; } 
    public abstract void sayHello();
} 
//-------추상 클래스----------

❗ 추상 클래스는 공통 기능과 가이드라인을 모두 정의하여 다른 클래스에게 상속된다.

추상 클래스 상속

  • 추상 클래스의 상속은 일반과 동일하게 extends 를 사용한다
  • 만약, 부모 클래스에 생성자가 존재한다면 이클립스에서 에러가 나므로 클래스 이름에 마우스를 올려 부모 생성자 강제 호출 Add constructor 부모생성자명 처리를 해야 한다.
  • 부모 생성자 호출을 처리하더라고 에러가 생기는 이유는 추상 메서드를 오버라이드 하지 않았기 때문이다.
  • Add Unimplemented Methods 버튼을 클릭하면 부모의 모든 추상 메서드들이 오버라이드 된다.
  • 추상 메서드를 상속 받고 자식 클래스에서 이를 재정의한다.
✅ 다형성이란, 객체의 이름이 서로 다르더라도 객체의 메서드를 호출할 때 고민하지 않기 위한 방법이다.
     추상화는 다형성을 강제하는 것으로, 객체를 사용하는 개발자의 편의를 위한 클래스 작성 규칙이다.

 


인터페이스(interface)

인터페이스란?

  • 자바 클래스 간의 상속에는 하나의 부모만 존재할 수 있기 때문에, 다중 상속을 위해 쓰이는 문법이다
  • 용도별 세분화하여 필요한 요소만 상속할 수 있다

추상 클래스와 인터페이스의 차이점

  • 인터페이스는 작성 시에 일반 class 파일이 아닌 interface 파일로 작성해야 한다.

인터페이스 상속

  • 인터페이스 상속은 implements를 사용한다
  • 상속 처리 후 클래스 이름에 에러가 생기면 마우스를 올려 Add unimplemented methods 를 클릭한다
  • 메소드의 재정의(=오버라이드)가 이루어지면 필요한 기능 구현
  • 인터페이스는 콤마(,) 를 사용하여 다중 상속이 가능하다
  • 일반 클래스와 동시에 상속받을 수도 있다
✅ 추상화와 인터페이스는 버그를 안 만들기 위함이고, 후에 유지보수를 원활하게 하기 위함이다.

Static

static이란?

  • 멤버변수 중 모든 객체에 공통적으로 사용해야 하는 값에 쓰인다

운영체제의 역할

  • 운영체제란 하드웨어를 제어(커널)하고 사용자에게 인터페이스를 제공하고 명렁어 해석() 할 수 있도록 중재 역할을 하는 소프트웨어

    ✔️ 쉘 : 사용자로부터 커널을 보호, 중간다리 역할

역할

  1. 하드웨어의 오류나 부적절한 사용을 막음 → 하드웨어 제어
  2. 사용자 인터페이스 제공
  3. 하드웨어와 소프트웨어 사이에서 매개체 역할

메모리의 구조

✅ 코드영역에서 CPU가 하나씩 가져다 쓰는 게 아니라, 운영체제가 코드들을 갇다 바친다.
  • 메모리는 운영체제가 관리한다.

고정영역과 동적영역의 차이

✅ 고정영역의 자원은 동정영역에서 사용 가능하다.
     → static은 동정영역에서 부를 수 있다.

static의 생성 위치

  • static은 메모리의 고정영역에 생성되고, 일반 멤버변수는 동적영역 중에 Heap 메모리 영역에 생성된다.

멤버변수와 static의 차이

  • static 변수는 프로그램의 실행과 동시에 객체 생성 여부에 관계 없이 생성
  • 이미 존재하는 것이기 때문에 이름을 통해 접근을 하지 않고 클래스의 이름을 통해서 접근해야 한다.
  • 객체 생성과 관계 없이 static 변수에 접근을 하기 위해 static 메서드를 만들어서 접근해야 한다.

제약 상황

  • static 메서드는 동적 메모리 영역의 멤버변수를 사용하거나, static이 아닌 일반 메서드를 호출할 수 없다.
public class Article { 
	/* * static은 모든 객체가 공유하는 값 
    * static 값은 클래스 이름을 통해서 접근해야 함
    * 객체의 생성 여부에 상관없이 사용 가능 */ 
    
    //static 변수 : 공통 자원 
    private static int count; 
    private static String category;
    
    //--일반 전역변수-- 
    private int num; 
    private String title; 
    private String regDate;
  • 공통 자원인 static 변수를 선언
//static 변수의 getter, setter 
public static String getCategory() { 
	return category;}
    
 public static void setCategory(String category) { 
 	Article.category = category; } 
    
 //---일반 전역변수의 getter, setter 
 public int getNum() {
 	return num; }
 
 public void setNum(int num) {
 	this.num = num; }
  • getter, setter 메서드 만들시 static 변수는 메서드에도 static이 붙는다
public class Main01 {
	public static void main(String[] args) { 
    	//static 변수에 접근할 때는 클래스명.get/set으로 접근
        Article.setCategory("자유게시판"); 
        
        //객체 생성
        Article a1 = new Article(1, "첫번째 글제목","2014-01-01"); 
        Article a2 = new Article(2, "두번째 글제목","2015-01-01"); 
        Article a3 = new Article(3, "세번째 글제목","2016-01-01"); 
        
        //static 변수의 값을 변경하면 모든 객체 영향
        Article.setCategory("공지사항");
이 내용은 itpaper 주영아 강사님의 교재를 발췌했습니다.
728x90

'study > JAVA 🦊' 카테고리의 다른 글

JAVA - 8  (0) 2021.01.07
JAVA - 7  (0) 2021.01.07
JAVA - 5  (0) 2020.12.28
JAVA - 4  (0) 2020.12.27
JAVA - 3  (0) 2020.12.27