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이란?
- 멤버변수 중 모든 객체에 공통적으로 사용해야 하는 값에 쓰인다
운영체제의 역할
-
운영체제란 하드웨어를 제어(커널)하고 사용자에게 인터페이스를 제공하고 명렁어 해석(쉘) 할 수 있도록 중재 역할을 하는 소프트웨어
✔️ 쉘 : 사용자로부터 커널을 보호, 중간다리 역할
역할
- 하드웨어의 오류나 부적절한 사용을 막음 → 하드웨어 제어
- 사용자 인터페이스 제공
- 하드웨어와 소프트웨어 사이에서 매개체 역할
메모리의 구조
✅ 코드영역에서 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