
목표 > 공부한 내용 > 얻었고, 앞으로 이걸 해봐야지 적기
(we)b + log: 복붙
우리는 다양한 언어를 사용하여 프로그램을 만든다.
이러한 언어들 가운데에도 언어를 번역하고 실행 시켜주는 두 가지
프로그램이 있었다.
영어를 못하는 사람이 영어책을 이해하기 위해서 두 가지 방법이 있다.
1. 통역이 가능한 사람이 옆에서 한줄 한줄 설명해주기.
2. 한글로 통번역된 책이 나오기까지 기다리기.
위 두 가지에는 장단점이 있는 것 같다.
통역이 가능한 사람이 옆에서 한줄 한줄 설명해주면
장점은 통번역이 나오기까지 기다려도 되지 않으므로 빠르게 내용을 이해할 수 있다.
단점은 하나하나 번역을 하고 이해를 해야하므로 책을 읽는 시간이 길어질 수 있다.
통번역된 책이 나온 후에 책을 읽는 것의
장점은 책이 나온 다음에는 바로 바로 이해하며 읽을 수 있으므로 책을 읽는 시간 자체는 짧아진다.
단점은 책이 나올때까지 오랫동안 기다려야 한다는 것이다.
위 예시는 컴파일러와 인터프리터를 이해하기 위한 것이다.
컴파일러 = 통번역 대기 후 읽기
인터프리터 = 옆에서 번역해주기
이런식으로 이해하였다.
컴파일러를 사용하는 언어로 된 프로그램을 빌드하는데까지의 컴파일 시간은 오래 걸리지만, 빌드가 된 후 런타임은 인터프리터보다 성능이 좋을 것이다.
인터프리터를 사용하는 언어로 된 프로그램을 빌드하는데는 조금의 시간 밖에 걸리지 않으나, 런타임에는 컴파일러로 빌드된 프로그램보다 성능이 낮을 것이다.
JVM은 여러 OS를 탑재한 컴퓨터에서 사용할 수 있도록, 컴파일된 파일을 실행하는 가상 환경
C 같은 언어는 운영체제에 맞는 실행 환경 에 맞게 각각 프로그램을 빌드해놔야 실행이 가능하다.
그러나, JAVA는 여러 운영체제 위에 JVM이라는 실행되는 공통된 환경 에 프로그램을 실행하기에 운영체제 마다 독립적으로 실행 환경을 구성할 필요가 없다.
public class main() {
public static void main(String[] args) {
System.out.printlb("Hello Java");
}
}
자동형변환
작은 자료형의 변수를 큰 자료형의 변수에 할당할때
byte a = 10;
int b = a;
System.out.println(b); // 10 출력
수동형변환
큰 자료형의 변수를 작은 자료형의 변수에 할당할때
int a = 128;
byte b = (byte)a;
System.out.println(b); // -128 출력
왜 -128이 출력될까?
byte의 범위는 -128 ~ 127 까지의 값이다.
byte는 8bit의 메모리 공간을 할당받은 변수이다.
위 예시 처럼 byte b = 128;
이런식으로 할당한다고 해보자.
128을 2진수로 나타내면 10000000 이다.
8bit를 할당받은 변수인데,,, 그러면 되야하는거 아닌가?
안되는 이유를 찾아보았다.
MSB가 원인이었다.
MSB는 부호를 나타내는 비트로써 비트의 맨 앞, 즉, 최상위 비트이다.
128은 2진수로 나타내면, 10000000이다.
즉, 맨 앞의 1이면 음수를 나타낸다는 것이다.
사용하는 이유를 생각해보면, 2진수로 양수를 나타낼 수는 있지만,
음수를 나타낼 방법이 없다.
여기서 사용한 것이 MSB 와 2의 보수 이다.
맨 앞의 부호가 1일 경우에는
음수이다.
그리고, 해당 값을 구하기 위해서는 2의 보수를 취해야 한다.
예를 들어 10000000 일 경우에는
1. 01111111
2. 01111111 + 1 => 10000000
이다. 이 말은 2의 보수를 취한 값이 음수의 절댓값이며,
즉 byte에서 10000000 일 경우에는 -128이라는 결과가 도출된다.
Q.
재용님이 삼송폰을 구매하셨습니다.
폰을 켰습니다.
띠로리
잡스님이 사과폰을 구매하셨습니다.
폰을 켰습니다.
@@@띠로롱@@@
여기서 객체를 찾아보자.
핸드폰, 사람
클래스란
제네시스가 가지고 싶다.
클래스 종류
객체를 만들기 위한 클래스
= 라이브러리용 클래스
실행용 클래스 : main
클래스 구조
접근제어자 class 클래스이름 {
}
자바의 접근제어자 종류
public
: 외부에서의 모든 접근이 허용된 접근 제어자
protected
: 같은 패키지에 속해 있을때만 호출이 가능한 접근 제어자
예외적으로 다른 패키지에 있더라고 상속 관계에 있는 클래스라면 호출이 가능하다.
default
: 앞에 접근제한자를 붙이지 않았다면 기본적으로 적용되는 접근 제어자
같은 패키지에 속해 있을 때만 호출이 가능하며 다른 패키지에서는 호출이 불가능해진다.
private
: 동일 패키지에서조차 접근이 불가능한 접근 제어자
같은 클래스에서만 접근이 가능하다.
중요하다...
면접에서 패키지로 털리는 이야기
이 부분은 Spring 프로젝트를 하면서 신경 써보자.
1) 생성자
2) 변수
ex> 클래스: 책
1) 조립하는 방법
2) 부품
3) 완성품 기능 사용법
오늘은 다음과 같은 클래스를 설계하고 객체를 생성해보았다.
// 사람 클래스 및 객체 생성
public class EX06 {
public void static main(String[] args) {
Person songa = new Person("송아", 20);
Person kelly = new Person("켈리", 15);
System.out.println(songa.name + songa.age);
System.out.println(kelly.name + kelly.age);
}
}
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
// 노트북 클래스 및 객체 생성
public class EX07 {
public void static main(String[] args) {
Notebook samsung = new Notebook("삼성");
Notebook lg = new Notebook("LG");
System.out.println(samsung.name);
System.out.println(lg.name);
}
}
class Notebook {
String brandName;
Notebook(String brandName){
this.brandName = brandName;
}
}
클린코드 TIP
생성자의 매개변수 이름과 클래스의 멤버의 이름을 동일시하자.