Class_Java

miin·2021년 4월 10일
0

JAVA 

목록 보기
5/13

클래스

클래스 선언 : 클래스는 첫글자가 대문자여야 한다(변수와 같음)

toString을 이용해서 객체주소대신 인스턴스정보 문자열을 출력할수 있다

--용어
객체(object) : 존재하는 모든것, 속성(필드field)+동작(메소드method)로 구성, new 클래스()로 생성
객체 지향 프로그래밍 : 객체를 하나씩 설계한 후 조립하여 완성된 프로그램을 만드는 기법
메소드 호출: 객체가 다른 객체의 기능을 이용하는 것
집합관계 : 부품과 완성품의 관계
사용관계 : 객체간의 상호작용
상속관계 : 상위(부모)객체를 기반으로 하위(자식)객체를 생성
클래스 : 자바의 설계도
인스턴스(instance) : 클래스로부터 만들어진 객체, 객체의 또 다른 표현, 클래스로 객체를 만드는 것을"인스턴스화"라고 함
객체지향 프로그래밍(OOP) : 프로그램을 객체의 조립으로 만드는 방식
클래스설계 -> 설계된 클래스로 사용할 객체 생성(인스턴스화) -> 객체이용
클래스 : 객체를 만들기 위한 설계도
클래스 다이어그램 : 클래스를 도식화한 것
new 연산자 : 객체 생성 연산자이며 생성자를 호출하고 객체 생성시 초기화를 담당
클래스 변수 : 클래스로 선언한 변수이며 해당 클래스의 객체 번지가 저장됨
필드 : 객체의 고유 데이터, 객체가 가져야 할 부품객체, 객체의 현재 상태 데이터 정보를 저장
this : 자기 자신을 의미, 식별을 위해 사용, 매개변수가 있어서 식별이 안될 때
this()-객체 자신의 또 다른 생성자를 호출할때 사용/ .this로 사용

레퍼런스형:
String Hero...
클래스 타입, 사용자정의형 타입
객체를 연결하기 위한 타입
객체를 가리킴

기본형:
int, double, boolean...
값을 직접 저장

static: 공유, 필드와 메소드에 적용된다
static이 붙으면 클래스메소드, 클래스변수, 클래스가 동작시키는 메소드, 간편 기능 구현에 유용, 클래스 영역에 존재
static이 안붙으면 인스턴스 메소드, 주객체가 동작하는 메소드,특정 객체의 동작 구현시 유리, 객체내부에 존재 ex) Hero hero1 = new Hero();/hero1.punch();

클래스 멤버
public class ClassName{
필드(Field) : 객체의 데이터가 저장되는 곳(변수들) int fieldname;
생성자(Constructor) : 객체 생성시 초기화 역할 담당 ClassName(){...}
메소드(Method) : 객체의 동작에 해당하는 실행 블록 (함수들) void methodName(){...}
}

클래스로 부터 객체를 생성
new 연산자로 메모리 힙 영역에 객체 생성
클래스 변수;
변수 = new 클래스();

클래스의 두 용도
-라이브러리(API: Application Program Interface) 클래스 : 객체생성 및 메소드 제공역할
-실행 클래스 : main() 메소드 제공 역할

클래스 만들기
public class a{
public static void main(String[]args){
//객체생성
c c1 = new c;
//계산
double
//결과출력
System.out.printf("%d",c1.toStr());
}
}
class b {
//필드만들기
int x;
//생성자 정의
b(int x) {
this.x = x;
}
//인스턴스 메소드
String toStr() {
return String.format("%d", x);
}
//클래스메소드
static double () {
return
}
}

//객체생성
Cat nero = new Cat();
//필드 초기화
nero.name = "네로";
nero.weight = 3.45;
nero.age = 3;
//위 내용을 한줄로 기술가능// 객체생성과 동시에 초기화
Cat nero = new Cat("네로", 3.45, 3);

public class Human (클래스이름){
public String name(기본자료형 변수이름)="";
public double heignt(기본자료형 변수이름)=0;
//본인이 만들자료형에 포함하고 싶은 기본자료형을 선언

Human h = new Human();
h.name="홍길동";
h.age=14;
h.height==12.4;

System.out.println("당신의 나이는"+h.age);

*는 및에 정의된 모든 클래스를 패키지명 없이 사용할수 있다
import는 패키지 풀이름으로 사용할수 있다
.Human(클래스이름) 클래스를 패키지명없이 사용할수 있다

두개의 변수가 같은주소를 가지고 있을때, 한쪽에 값을 변경하면 다른쪽에도 영향을 주지만 String Class는 참조자료형이여도 값을 변경할 수가 없어서 두개의 변수가 같은 주소를 가지고 있더라도 새로운값을 넣으려면 새롭게 할당하여 넣어야 하기 때문에 문제가 발생하지 않는다

클래스 안에 클래스는 .으로 접근한다

new 힙영역에 객체의 값을 넣을수 있는 공간생성
같은값을 가지는 복사본은 new 생성안하고 변수만 다르게 ex) Human h2;
인스턴스란 프로그램에서 사용할수 있도록 힙에 생성된 클래스 객체

가비지컬렉션이란 힙 메모리에 있는 사라진메모리를 수거해가는것

메모리주소 찍으려면 System.out.println(h(변수));
주소 말고 데이터를 찍고 싶으면 sorce-tostring을 이용해서 출력할수 있다

지역변수
해당지역에서만 사용할 수 있는 변수

전역변수
class밑에 선언 할 수 있다
모든 메소드에서 접근가능
class블록 안에, 1번블록과 2번블록 사이에 기술( public staic int...;)
{
int a = 1;
{
int b = 2;
a = 10; //안쪽 블록에서는 바깥쪽 블록에 접근 가능
}
b = 10; //바깥쪽 블록에서는 안쪽 블록에 접근 불가능
}
---필드
필드선언
-클래스 중괄호 블록 어디서든 존재 가능
-생성자와 메소드 중괄호 블록 내부에는 선언 불가

  • 변수와 선언형태 유사하나 변수 아님에 주의
    -타입 필드 [ = 초기값];
    -초기값은 주어질 수도, 생략할 수도 있음(초기값 지정되지 않은 필드는 객체생성시 자동으로 기본 초기값 설정)

필드 사용
-필드값 읽고 변경하는 작업
-클래스 내부 생성자 및 메소드에서 사용하는 경우 : 필드 이름으로 읽고 변경
-클래스 외부에서 사용하는 경우 : 반드시 클래스로부터 객체 생성한 뒤 참조 변수 통해 필드 사용

생성자의 필드 초기화
-매개변수 이름은 필드이름과 유사하거나 동일한것 으로 사용권장
-필드와 매개변수 이름이 완전히 동일할 경우 this.필드 로 표현
public Korean(String name, String ssn) {
this.name(필드) = name(매개변수);
}

public class Korean{
//필드
String nation = "대한민국";
String name;
String ssn;

//생성자
public Korean(String n, String s) {
name = n;
ssn = s;
}
}
Korean K1 = new Korean("김자바", "920422-233999");
Korean K2 = new Korean("한자바", "950119-133999");

생성자 오버로딩(overloading)
-매개변수를 달리하는 생성자 여러개 선언
-메소드 이름으로 접근, 같은이름인데 매개변수가 다른 것
-외부에서 제공되는 다양한 데이터를 사용하여 객체화 하기 위해
-매개변수의 타입, 개수, 선언된 순서같은경우, 매개변수 이름만 바꾸는 것은 생성자 오버로딩이 아님
puvlic class 클래스{
클래스 (타입 매개변수,...) {
...
}
}

클래스 필드 : static이 붙어있음, 클래스이름.변수 로 사용할 수 있다
인스턴스 필드 : static이 안 붙어있음

private 비공개 ( getter, setter로 우회해서 접근 가능)
default 패키지 내부 공개
protected 상속 공개
public 완전 공개

전역변수에 생성하고 호출해서 쓰기
독립적인 변수는 매개변수 쓰는게 편하고, 여러개면 전역변수 쓰는게 낫다

접근제한자
대부분 클래스 멤버에 사용
종류: public, private, protected, default
public : 모든 지역에서 접근 가능
private : 멤버를 해당 클래스에서만 사용할 수 있음, 외부 접근을 막는 키워드
protected & default : 복잡한 내용이있는데 실제로 사용할 일이 없음

게터(getter)
비공개 필드를 우회하여 가져옴
세터(setter)
비공개 필드를 우회하여 변경함

wrapper class
부득이하게 기본데이터를 참조 데이터로 바꿔서 사용해야 할 경우 사용하는 클래스

대표적인 래퍼클래스의 메소드에는 .parseInt .parseDouble 과 같은 메소드가 있다.
문자열을 해당 자료형으로 변경하는 메소드이다

박싱: int i1=1; Integer i2=i1; 코드에서 int형 기본자료형을 Integer class에 넣었다.
i1은 자동 형변환 되어 integer class에 들어가는 것을 전문용어로 박싱 이라고 한다
언박싱: int i3=i2+5; 다음 같은 경우 integer class가 int형으로 형변환 되어 i3에 들어가게 되는것을 언박싱이라고 한다
기본자료형과 래퍼클래스는 서로 자동 형변환 된다.

Data Class
시간표현과 연산을 프로그램 하는것
import java.util.Date; 확인 필수. 자동 임포트시 종종 java.sql.Date가 임포트 되어
Date date1 = new Date(); 현재 시간을 객체로 생성
ex)System.out.println(date1);
.getTime() iso표준으로 사용되는 1970:01:01 00:00:00을 기준으로 1초마다 1000씩 증가 시켰을 때의 현재 시간을 숫자로 리턴해준다
ex) 1970:01:01 00:00:01 -> 출력: 1000
1970:01:01 00:01:00 -> 출력: 60000
.getTime()-11000606024 전날 시간 출력, 더하면 다음날 같은 시간이 됨
(1000:1초 601000: 1분 60601000:1시간 060100024: 하루)
초 구하기 : 결과 / 1000
분 구하기 : 결과 / (1000*60)
.parse 설정된 서식대로 사용자가 입력한 문자열을 시간객체로 만듬

문자열-> 시간객체
시간객체-> 문자열
import java.text.ParseException;
import java.text.SimpleDateFormat;

메소드 method

메소드 : 클래스의 기능

즉 프로그램 기능을 만들기 위해 메소드가 필요함

클래스 메소드 : 클래스가 동작시키는 메소드 => Math.random();
인스턴스 메소드 : 주 객체가 동작하는 메소드 => hero1.punch(hero2);

레퍼런스 변수
-객체를 가리키는 변수
-객체의 위치를 가리킴

메소드 구조
메소드명 - 첫글자는 소문자
파라미터 = 입력변수의 또다른 표현
void = type 없음
public staic TYPE NAME (parameters)
public staic void main (String[] args)
ex)
public static int kacl(int a) {//입력값 받기
int result; //변수생성
result = n * m; //값계산
return result; //실행을 중지하고 리턴값 지정, 값반환

return
-실행을 중지하고 리턴값 지정, 값반환
-return 뒤에 실행문(sysout출력) 올 수 없음
void가 아닌 int,double,Stirng등 인 메소드는 무조건 return

단일 파라미터 메소드: 입력변수가 하나만 있는 메소드
다중 파라미터 메소드: 입력변수가 두개 이상인 메소드
메소드 호출시 입력된 전달과 파라미터(입력변수)의 타입이 일치해야함

생성자
-객체를 만드는 특별한 메소드
-생성자의 역할은 객체생성과 필드초기화 이다
-호출과 정의로 나뉜다
-클래스명과 같아야 한다
-리턴타입은 표기하지 않는다

기본생성자 : 클래스 내부에 생성자 선언 생략할 경우 바이트 코드에 자동 추가
[public] 클래스() {}
클래스에 생성자 선언하지 않아도 new 생성자()로 객체 생성 가능
car myCar = new Car(); 기본생성자

Math.ramdom() 메소드는 파라미터가 없는 메소드임
(0.0이상 1.0미만 의 임의 실수를 반환)

void 메소드와 return 메소드의 차이
return값이 없는 void 메소드
//정의 단계에서 실행할 행동을 정해줌, 자신이 일을 시작하고 마무리 한다
public static void HELLO(int a,int b){
System.out.println(a*b);
}
public static void main(String[] args) {
HELLO(2,3)
}
return값이 있는 메소드
//정의단계에서 계산만 하고 호출단계에서 계산된 값만 넣어줌,
일의 중간계산을 처리하고 이를 반환함
public static int HELLO(a,b) {
return a+b;
}
public static void main(String[] args) {
System.out.println(HELLO(2,3));
}

생성자 호출 코드(= new)는 메인 메소드에
생성자 정의 코드(int , String)는 일반클래스 메소드에 기술

클래스 스코프 : 필드
메소드 스코프 : 파라미터,지역변수
스코프-> 변수의 활동영역

[메소드선언]
void powerOn(){
...
}
double divide(int x, int y) {
...
}
[메소드 호출]
powerOn();
double result = divide(10,20);
byte b1 = 10;
byte b2 = 20;
double result = divide(b1,b2);

0개의 댓글