Java07 Class(클래스)
JAVA란?
: compiler로 기계어(ex. class파일)로 바꿔주는 언어다.
Object Oriented Programming (객체 지향 프로그래밍): 기능별로 분리하자
Java의 모든 Class 는 Object 를 상속한다.
객체 지향의 핵심은 연관되어 있는 변수와 메소드를 하나의 그룹으로 묶어서 그룹핑하는 것이다.
즉 기능별로 객체를 나누자는 것 .
Class
설계도 : 객체를 생성하기위한 설계도
Object
(객체) 제품 : 실제로 존재하는 것 . 사물 또는 개념.
Instance
: 의미상으로 객체와 비슷함. 객체는 인스턴스를 포함하고 있다. 우리가 java에서 부르는 객체는 instance이다.
클래스로부터 만들어진 객체를 그 클래스의 인스턴스(객체) 라고 한다.
Ex. Calculator c1 = new Calculator();
Class calculator 를 구체적인 제품으로 만드는 (객체화하는) 명령은 new Calculator();
public class Calculator{
public static void main(String[] args){
Calculator c1 = new Calculator(); // Calculator 객체를 c1에 넣어준것 c1은 인스턴스가 됨
타입 변수 객체
}
}
자바의 4가지 특징
-
추상화
-
다형성
-
상속
-
캡슐화
-
추상화 (Abstraction)
공통 개념들을 추상적인 큰개념으로 다루는 것.
사물들의 공통된 특징, 즉 추상적 특징을 파악해 인식의 대상으로 삼는 행위를 말한다. >> 단순화
(ex) 예시
푸들 말티즈 비숑 리트리버 >> "강아지"
아우디 벤츠 볼보 >> "자동차"
- 다형성 (Porymorphism)
같은 형태이지만 다른 행위 상속을 전제로 한다.
서로 다른 클래스의 객체가 같은 메시지를 받았을 때 각자의 방식으로 동작하는 것이다.
Animal animal = new Dog(); // 부모타입에 자식 객체 dog 생성
animal.bark(); >> 멍멍
animal= new Cat(); // cat 객체도 생성
animal.bark(); >> 야옹
멍멍과 야옹이라는 행위를 달리함
-Overloading 오버로딩
같은 이름의 메소드를 여러개 가지면서 다른 기능을 하는 것 (파라미터의 타입 이나 갯수가 다르다)
sum이라는 같은 이름의 메소드로 파라미터의 수가 다른 것
public int sum(int i) { // 파라미터 하나
return i+i;
}
public int sum(int i , int j ) { //파라미터 두개
return i+j;
}
public int sum(int i, int j, int k) { //파라미터 세개
return i +j+ k ;
}
//같은이름의 메소드로 타입을 달리한 방법
public double sum(double d, double f ) { //더블타입
return d +f;
}
public int sum(double d1, double d2, double d3) {
return (int)(d1+d2+d3);
}
- 상속(Inheritance)
부모 객체의 것을 자식 객체가 사용하는 것 (코드의 재사용성)
→ 부모에게 상속받은 공통적인 것을 자신에 맞게 확장시키는 것은 Override
override : 재정의
ex. 아이패드를 가지고 부모님은 유튜브만 본다.
나는 부모님의 아이패드로 공부하기, 유튜브 보기, 영화보기 등등을 한다.
-
캡슐화(Encapsulation) : 기능만 사용하는 것 (코드은닉)
→ 우리가 아이폰을 사용할때, 누가 어떤 재료로 만들었는지 알 필요가 없다.
Class의 구조를 보자.
class Car{
1. field: 속성. "값"
-class 변수 : static , 해당 타입 전체에 적용되는 것
static boolean engine = true; 엔진은 모든 차에 적용된다.
-instance 변수 : nonstatic, 해당 객체에 따라 다르게 적용되는 것
private String color; 색상은 각각의 차에따라 다르게 적용된다.
private int speed; 속도 역시 각각의 차에따라 다르게 적용된다.
- 필드는 변수와 비슷하게 생겼지만, 변수가 아니다.
- 생성자와 메소드 바디(블록) 안에서 선언된 건, 그 안에서만 쓸 수 있는 지역변수(local)
- 생성자와 메소드 밖에서 선언된 필드는 그 클래스 모두에서 사용할 수 있는 전역변수이다.
- 초기값이 지정되지 않으면 자동으로 기본 초기값으로 보여준다.
2. constructor: 생성자, 메모리영역과 리턴타입을 쓰지 않는다.
- new연산자와 같이 사용되는 즉 인스턴스이며, 뒤에는 특별한 중괄호{}블록이 붙는다.
- 객체를 생성하고 필드 초기화를 한다.
- overlode 할 수 있다.
- 메소드와 비슷하게 생겼지만, 클래스 이름으로 되어 있으며 리턴타입이 없다.
- 모든 클래스는 반드시 생성자가 존재해야 한다. 하나 이상을 가질 수도 있다.
public Car() { //기본 생성자
}
public Car(String color){ // 파라미터 1개를 가진 생성자
this.color=color; //파라미터를 통해 들어오는 값을 필드에 저장해준다.
}
public Car(String color, int speed){
this.color= color;
this.speed = speed;//파라미터를 통해 들어오는 값을 필드에 저장해준다.
}
-this로 여러 생성자들을 호출 할 수 있다.
3. method : 기능을 나타낸다. ~하는것 "명령문들의 집합"
-overlode 할 수 있다.
getter & setter
public String getColor(){ //set으로 들어온 값을 읽는방법
return color;
}
public void setColor(String color){ //변수에 값을 넣는 방법
this.color=color;
}
- 컴파일 시, 바이트코드 파일은(.class) 클래스를 선언한 개수만큼 생긴다.
- 파일 이름과 동일한 이름의 클래스 선언에만 public 접근제한자를 붙일 수 있다.
- 클래스가 100개 라면 99개는 라이브러리이고, 나머지 1개가 main인 실행용이다.
Author And Source
이 문제에 관하여(Java07 Class(클래스)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@charamee/Java07-Class클래스저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)