-
java 및 객체의 정의JAVA 2021. 7. 22. 22:15
compile 언어
:java, c, c++ etc
source code -> compiler -> 기계어
a = a+1 -> compiler -> 010101
(script 언어
:javascript, phython, R etc
위에서 아래로 순서대로 작동)
개발tool
eclipse,vs(visual studio), notepade etc
java의 compiler는 javaC
JDK: jdk를 깔면 jre도 깔린다. 개발자들이 소스 만들때는 jdk를 다운받는다. = javac.exe, java.exe
JRE: java only run 자바를 실행만 한다면 jre만 다운받아도 된다. = java.exe
java는 window,mac,linux등 os를 옮길 때마다 다시 해독해서 컴파일하는 복잡함을 이식성을 통해 해결함
=> 기계어 -> jvm(중간단계 추가: 자바의 언어(바이트 코드)로 바꿔서 각 os마다 컴파일을 할 수 있게 함. -> java.exe로 os에 전달
ecilpse: save하면 ->favaC -> bin,src등 컴파일(자바도 아닌데 컴파일 선택하느라 html이 전송이 지연되었음)
src= 우리가 쓴 코드소스 저장(.java = 소스코드)
bin= 컴파일된 코드소스 저장(.class = 바이트코드)
패키지 만들 때 온점(.)으로 패키지 안의 패키지로 만들 수 있다.
멀티태스킹, 멀티스래드
: cpu관련
ex) main함수에 a로직 b로직
cpu 1개면 a로직 끝내고 b끝낸다.(느림)
cpu 2개면 a로직 b로직 나눠서 함께 동작한다
이게 멀티태스킹라고 한다.
자바는 멀티스래드를 제공한다.
API도큐먼트를 잘 알아야 한다.
변수형 변수명 = 값;
RAM에
1. 값을 저장
2. 변수형을 가진 변수명의 메모리 저장공간 생성
3. 메모리 저장공간에 값을 연결
4. 다른 메모리를 가진 변수가 똑같은 값을 가질 때, 그 값을 또 저장하지 않고 위의 값을 연결만 한다.
(이렇게 저장되는 '값'들을 리터럴이라고 한다.)
변수들은 다른 값으로 변할 수 있지만, 값들은 리터럴로 저장되어 변하지 않는다.
MEMORI
1. Stack
int i = 90;
스택안에서 i의 저장공간 생성
스택안에서 90이 리터럴로 저장
90이 i를 향해 화살표
2.Heap
String str = "홍길동";
스택안에서 str의 저장공간 생성
힙에서 "홍길동"이 리터럴로 저장
(Book bk = new Book();으로 생성된 bk는 객체로 그 속성들이 Heap에 저장)
"홍길동"이 직접 str을 향하지 않고
100번지라는 주소를 str안의 참조로 삼아 str을 향한다.
(주소는 str안에 들어간다, 그래서 참조형)
@참조 타입은 속성과 메서드가 있고, 생성자(new)로 가능하며
기본(stack의 int등)타입들은 없다.
참조타입: string, array, class(내가 만드는 클래스들)
단, string은 너무 많이 쓰여서 new 생성자로 만들지 않고 바로 초기화가 가능하다.
new연산자로 만들어진 것들이 object 객체이다. 이 객체들은 Heap영역에 있다.
String str1 = "신용권";
String str2 = "신용권";
str1 == str2;//true
둘다 "신용권" 리터럴 주소를 가져서 동일한 값이다.
String str1 = new String("신용권");
String str2 = new String("신용권");
str1 == str2 ;//false
각각 객체를 만들어 주소를 가져서 다른 값이다.
그래서 참조형의 값을 동일함을 보고싶다면 equals() 함수를 써야한다.
3. Method
static과 상수가 저장.
실행 시 처음부터 실행되어 언제든지 사용할 수 있다?
class객체
123456789101112131415161718192021222324252627282930313233class People{//1. 멤버 변수(속성)String nation;String name;int age;//2. 생성자People() {} //디폴트생성자People(String nation){this.nation = nation;} //매개변수 갖는 생성자//3. 메서드void run(){}}void run(String name){}}cs
위의 세가지를 갖는 것이 Class객체이다.
상속
Kor extends Person = Kor이 부모를 Person으로 상속 받았다.
모든 객체는 extends Object이 기본적으로 되어있다.
(자바에서 기본적으로 Object가 상속되어 있다.)
캡슐화(=은닉화)
:객체 지향 프로그래밍의 특징
외부에 접근, 수정이 불가능하게 만들 수 있다.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546package com.lack206.ex01_class;/*클래스1.선언규칙1) 하나이상의 문자로 이루어져야 한다. 단 ,첫 글자는 대문자로 시작해야하고한글이름도 가능하다. 다만, 관레적으로 영문이름을 사용한다.2) 첫 번째 문자는 숫자가 올 수 없다.3) $,_ 이외의 특수문자는 사용할 수 없다.4) 자바 키워드(int,for,if...)는 사용할 수 없다.2.클래스를 선언하는 키워드는 class는 반드시 소문자로 해야 한다.3.일반적으로 소스파일 하나당 한 개의 클래스를 정의하지만 2개이상의 클래스도 선언이 가능하다.다만 클래스 하나당 ~.class파일이 각각 생성된다.제약사항은 소스파일명과 동일한 클래스에만 public(접근제한자)를 선언할 수 있다.*///scr폴더에 Human의 소스코드(.java) 한개가 있다//bin폴더에 총 3개(Human, Car, Tire)의 class가 컴파일되어 바이트코드(.class)로 되어 있다.public class Human {String name;String gender;int age;//메서드도 생성자처럼 같은 이름으로 매개변수를 추가하여 만들 수 있다.void speak() {System.out.println("말을 한다.");}void speak(String lang) {System.out.println(lang + "말을 한다.");}void move() {System.out.println("움직인다.");}}class Car {}class Tire {}cs 클래스의 멤버
1. 필드(속성, 클래스 변수)
객체의 고유속성을 지정하는 곳이다.
선언방법은 변수와 유사하지만 필드를 변수라고 부르지 않는다.
변수는 생성자에 메서드내에서만 사용되고 생성자와 메서드의 실행이 종료가 되면 자동으로 소멸되지만 필드는 생성자와 메서드 전체에서 사용되고 객체가 소멸되지 않는 한 객체와 함께 메모리에 존재한다.
2. 생성자 (Constructor)
생성자는 new연산자로 호출되는 특별한 코드 블럭이다.
생성자의 역할은 객체를 생성할 때 초기화를 담당한다. 즉, 필드를 초기화 하거나 메서드를 호출해서 객체를 사용할 수 있도록 한다.
1)기본생성자(default constructor) 모든 클래스는 생성자가 반드시 존재해야 하며 한개 이상의 생성자를 가질 수 있다. 단, 복수의 생성자를 정의할 경우에는 시그니처 즉, 매개변수의 갯수, 데이터타입 및 순서가 달라야한다.
즉, 동일한 형태의 시그니처를 가지는(중복되는) 생성자를 정의할 수 없다.(메서드도 비슷하다)
기본생성자는 별도로 정의하지 않아도 자바 컴파일러(java.exe)가 자동으로 추가한다. 하지만 개발자가 기본 생성자이외의 생성자를 정의했을 경우에는 자동으로 추가되지 않는다. 클래스가 public 접근제한자로 선언이 되면 기본생성자도 자동으로 public되지만 클래스에 public이 없으면 기본생성자에도 붙지 않는다.
3. 메서드(Method)
메서드는 객체의 동작(기능,행위)에 해당하는 블럭이다.
이 블럭은 이름을 부여하고 이 이름으로 메서드를 호출하게 되면 블럭안에 정의된 실행문들이 일괄적으로 실행이 되고 결과를 리턴하게 된다.
'JAVA' 카테고리의 다른 글
메서드,싱글톤,static,상수 (0) 2021.07.22 static main, 접근제한자, 싱글톤정의 (0) 2021.07.22 클래스,메서드정의 (0) 2021.07.21 2-3차원배열,향상된for문 (0) 2021.07.21 배열,while,for문 (0) 2021.07.21