객체(object): 실생활에서 주체(subject)가 파악할 수 있는 모든 사물
모든 객체는 객체의 특성을 표현할 수 있는 속성과 움직임의 표현하는 동작으로 구성된다.
- 객체 모델링: 구성요소인 속성과 동작을 적절하게 추출하여 정의하는 것
OOP(objecr oriented prigramming): 현실세계에서 추출한 객체(동작,속성)을 자바와 같은 프로그래밍언어에서 적절하게 표현하여 프로그래밍 한 것
분석단계에서 객체 모델링 → 설계단계에서 클래스로 설계 → 구현단계에서 클래스의 인스턴스를 통해 프로그램 구축
- 클래스의 정의
객체를 자바 프로그램으로 개발하기 위해 클래스의 형태로 표현.
- 객체의 생성과 사용
정의된 클래스를 사용하기 위해 메모리에 올리는 작업을 객체 생성 / 객체의 인스턴스화라고 표현한다.
객체가 생성될 때 클래스의 구성요소들 안 인스턴스 변수와 메서드가 메모리에 위치되며 메모리에 올라간 객체를 인스턴스라고 한다.
메모리에 올라간 변수를 인스턴스 변수라고 한다. 일반적으로 객체라고 하면 메모리에 생성된 인스턴스를 의미한다. 인스턴스는 클래스를 구체화 시킨 것이라고 생각하면 된다.
data type은 자바 프로그램 언어가 처리할 수 있는 데이터의 종류를 의미한다.
자바 언어에게 처리하고자하는 데이터의 종류를 알려줘야 제대로 처리할 수 있다.(데이터의 종류에 따라 메모리 크기 및 저장 방법이 달라진다)
package pack1;
//221228
public class Test1 {//클래스는 첫글자가 대문자
public static void main(String args[]) { //응용프로그램의 시작점 'public static void main'. 자바는 반드시 메인에서 시작하고 메인에서 끝난다.
//1. println과 print의 차이
System.out.println("good"); //표준출력장치로 출력 후 커서 밑줄에 위치(ln)
System.out.println("단축키를 이해하자");
System.out.println();
System.out.print("자바"); //커서 마지막글자에 위치
System.out.print("만세");
System.out.print("드\t디어 시작\n");//프로그램 진행중에 탭, 라인스킵(커서 다음 라인으로 떨어짐)
System.out.println("잘해보자구");
//줄 선택 -> 컨트롤 + 슬래시 -> 주석
//숫자 - 정수
System.out.println("\n기본 자료형 종류: byte");
byte var1; //바이트형 기억장소 확보(1byte 영역 확보) 2^7(부호X)
var1=5; //자바는 정수를 써주면 4바이트 확보 하고 int 형. 이지만 묵시적으로 처리해줌
var1=(byte)7; //원래는 byte형으로 바꿔줘서 넣어야 함
byte var2 = 123;
//var2=128; type mismatch
var2=(byte)128; //강제 형변환. casting or cast 연산. -128 출력(부호비트 변환)
System.out.println(var1);
System.out.println(var2);
System.out.println("\n기본 자료형 종류: short");
short var3=123; //2byte 영역 확보 2^15(부호X)
var3=(short)32767; //형병환해서 주는 게 맞다.
var3=(short)32768; //강제 형변환
System.out.println(var3);
System.out.println("\n기본 자료형 종류: int - 기본형");
int var4=123; //2byte 영역 확보 2^31(부호X)
var4=2147483647;
//var4=12.3; type mismatch
var4=(int)12.3; //소수점 아래자리 버림
System.out.println(var4);
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
System.out.println("\n기본 자료형 종류: long"); //정수의 maximum
long var5=123; //8byte 영역 확보 2^63(부호X). promotion: 자동형변환
//var5=2147483648; //error- 2147483648은 정수형이 아님. err: The literal 2147483648 of type int is out of range
var5=2147483648L; //정수L 또는 정수ㅣ: long타입의 데이터
System.out.println(var5);
System.out.println(Long.MAX_VALUE);
System.out.println(Long.MIN_VALUE);
//숫자 - 실수
System.out.println("\n기본 자료형 종류: double - 기본형");
double var6=3.5; //8byte 영역 확보. 소수점18번째 자리에서 반올림
var6=123456789.012;
var6=123; //자동형변환=promotion - 작은 타입에서 큰 타입으로 자동형변환 가능
//수치형은 상호간에 데이터형변환이 가능하다. 기본적으로 실수형이 정수형보다 큰 타입으로 처리된다.
System.out.println(var6);
System.out.println("\n기본 자료형 종류: float - 기본형");
float var7= (float)3.6; //4byte 영역 확보. 소수점9번째 자리에서 반올림
var7=3.7f;//실수에 f를 주면 float
var7=3.7F;
System.out.println(var7);
//그냥 실수쓰면 double.
System.out.println("\n- 연산시 큰 타입으로 자동변환으로 연산이 됨");
//byte < short < int < long < float < double
double result= 4.5*10;
result= (int)4.5*10; //4가 된 후 곱하기 10. 변수에 기억되면서 형변환.
System.out.println("result : "+result);
double dd= 5.5;
int result2= (int)4.5*10;
System.out.println("result2 : "+result2);
System.out.println("\n기본 자료형 종류: 논리형-----------------------");
boolean bu1 = true; //1byte. 조건에 대한 참, 거짓 결과 처리
System.out.println(bu1);
bu1 = false;
System.out.println(bu1);
System.out.println("\n기본 자료형 종류: 문자형-----------------------");
//char는 반그시 하나의 문자를 가지며 16비트 유니코드 값을 표현한다.
//기본적으로 정수형에 속한다. -> 정수형으로 변경될 수 있다.
char kor_jumsu = 'a'; //나열형
char korJumsu; //카멜(낙타등)표기법
System.out.println(kor_jumsu + " " + (int)kor_jumsu + " " + (char)97); //아스키코드
System.out.println("\n참조 자료형 종류: 문자열 객체-----------------------"); //문자열을 표현할 수 있는 것을 객체로 만들어놓음
//변수가 객체의 주소를 참조
//기본형처럼 쓰는 참조형 변수
//기본형을 객체로 만들어져있는 것.
String irum= new String("홍길동"); // new 이용 - 동일한 문자열이 있어도 새롭게 생성, 힙에 저장
String irum2= "홍길동";// 리터럴 이용 - 동일한 문자열이 존재하면 새로 생성하지 않고 재사용, 힙의 리터럴 pool에 저장
System.out.println("이름은 "+irum);
//스트링 클래스의 특징: 다양한 메서드로 가공(연산)했을 때 기존 문자열이 변경되지 않고 새로운 문자열이 생성된다. = 불변성 특징
// 따라서 문자열이 자주 변경될 경우에 Stringbuffer 또는 Stringbbuilder 클래스를 사용하는 것을 권장한다. ex. append로 문자열 붙이기 가능
System.out.println("\n기억장소 중 상수: 기억장소의 저장된 값 수정 불가"); //문자열을 표현할 수 있는 것을 객체로 만들어놓음
final double PI=3.14; //덮어쓰기 불가, 상수이름은 대문자로 쓰기로 약속
//PI=4.5; newtable
System.out.println("PI: "+PI+ "\n");//참조만 가능
//변수를 사용할 때 블록 다위로 사용 가능
{//코드블록. 블록간에 서로 다른 영역으로 처리, 같은 이름을 가진 변수를 사용할 수 있다.
//local
int areal=10;
System.out.println(areal);
}
//System.out.println(areal);
//다른 영역의 행위(메소드)를 호출
abc();
System.out.println("프로그램 종료");
}//프로그램 종료
public static void abc() { //method (함수X)
System.out.println("abc 영역 수행");
System.out.println("abc 영역 수행을 마치면 나를 호출했던 원래의 지점으로 복귀");
}
//MSA
}//자바는 완전한 객체지향 언어. 클래스 안에만 있다.