반응형
~~어제~~
*method
<클래스 라는건 안에 두가지로 구성되는데 변수와 메소드로 나누어진다. 클래스를 정의하는 변수의 종류에는 인스턴스 변수, 스테틱 변수 메소드도 마찬가지로 스테틱과 인스턴스 메소드로 나뉜다.
*변수
<인스턴스 변수를 사용하려면,
1.객체화 (heap에 변수를 등록하는 과정) : 클래스명 객체명(데이터형 변수명과 같은느낌) = new(객체생성용 key word_heap생성) 클래스명();
2.변수 사용(이객체의 포함되어있는 변수 사용=>멤버변수) : 객체명.변수명=값;
3.static variable (어떤객체에도 포함되지 않는다) : 클래스명.변수명 (딱한개만 만들어지고 다함께 사용한다.)(인스턴스변수는 객체를 만드는 만큼)
(스테틱 변수는 실행할때 만들어진다)
=>공통점은 자동초기화
*메소드
<인스턴스 메소드 사용하려면
1.객체화 : 클래스명 객체명 = new 클래스명();
2.메소드 호출 : 객체명.메소드명(값);
=>중복코드의 최소화 / 업무의 구분
3.스테틱메소드 : 클래스명.메소드명();
=>어떤 메소드를 이용할지 결정할때)
인스턴스메소드를 사용할땐 인스턴스 변수를 사용하여 업무를 처리해야 할땐 메소드 인스턴스
인스턴스변수를 사용하지않고(객체화 없이) 입력된 값으로만 업무를 처리하고 구현.
*메소드의 4가지형태
-
<메소드는 일을 의미하는데 자바에서 만들수있는 메소드는 크게 4가지 형태
-
<일을 구분해서 구현하는것으로 4가지형태로 ㅣㅇㄹ을시킬수있다
-
반환형과 파라미터의 조합때문에 4가지
-
1. 반환형이 없고 매개변수가 없는 형태 <한번이든 100번이던 매번 같은 일을 하는것 안받고 내보내지도 않는다.
-
고정적인 일
-
사용) public void method명(){
-
}=>한번도 백번도항상같다.
-
호출) method명();
-
닫힘괄호는 호출한 곳으로 돌아가라 라는 의미로 구현해 놓은 코드를 돌고 닫힘괄호(리턴을 갖지 않는다, 리턴으로 돌아가는게 아니라 값을 던져주는것)
-
=>불를때마다 같은일을 하고싶으면 이형태쓰면됨
-
2.반환형 없고 매개변수 있는형
-
가변적인일 (값을 입력받는다)
-
사용) public void method명(매개변수,,,int i){
-
}
-
호출) method(22);
-
method의 매개변수에 일치하는 값을 넣어서 호출
-
int를 넣을거면 정수에대한 값을 넣고~입력된 값 갯수 데이터형 중요 하다 맞지않으면 Error
-
호출되어 int에 22가 들어가서 안에 코드를 돌고 닫힘괄호를 만나 다시 호출한 곳으로 돌아오게된다.
-
3.반환형 있고 매개변수 없는형
-
고정값(3,4번은 값으로 쓰여지는 메소드이다.) 항상 같은값을 내보낸다. =>return중요
-
메소드의 가장 마지막줄에 반드시 return 이 나와야 한다. (나와야 값이 나온다)
-
(return은 제어문의 구문상 분기문에 속한다.)(if, switch~case)(for, while,do~while)(break,continue,return)
-
return사용) return 값; =>반환형과 일치하는 데이터형(void일때 값반환하는것과는 또다름)
-
상수, 변수, 연산식이 나갈수있다. 단 반환형과만 같으면됨 (void일땐 나갈수 없다??)
-
호출) int i = method명();
-
값을 받아줄 코드가 필요하다 <안받아도 괜찮은데 대부분 받는다.
-
선언 / 할당? +아니면 값을 사용하는 코드가 필요=> 출력 연산 재할당
-
int i = method명(); 호출되면 1메소드로가 코드를 돌고 2리턴으로 int 가 나와 22가 나와 3메소드명이 22가 대치되어 4닫힘괄호를 만다 5값이 i에 할당된다.(리턴은 값을 내보내는일을 할뿐/닫힘괄호~!~!)
-
4.반환형이 있고 매개변수도 있는 형
-
가변값 <다양한값을 받아 지지고 볶고 값이 나가여(항상 같이나가지 않는다) / 들어가는게 다른데 나오는게 같을리가
-
사용) public int method명(int i, int j){
-
...
-
return i+j;
-
}
-
호출) 반환형을보고 변수를 만들면 된다 .=> int i=method(22, 23);
-
<위와같이 값을 받는코드가 반드시 필요, 호출해 놓고 값을 받지않으면 안된다가 다야??
-
부르면 i에 22, j에 23이 들어가 코드를타고 리턴을 만나 값이 나오고 메소드가 값으로 대치(변신) 되어 닫힘괄호를 만나 호출한곳으로 돌아와 i로 45값이 들어감
ex)
public int method명(){ <(반환형과 매개변수는 같을수도 다를수도 있다.)
...
return 값;
}
*JAVA Doc 생성
-
<APIdocumentation?만드는것
-
class의 사용에 도움을 주기위한 도움말(클래스는 일의 집합)-일을 알수없어서 메소드에 도움말을 부여한것
-
Source Code 작성시 Java Doc 주석 설정 =>클래스위 컨스턴트위 메소드 위
-
=>class 위, constant 위, method 위
/**
*/이 닥주석이고
/*
*/ 그냥 여러줄 주석
/****이것도 닥주석....
@author 제작자명
@param 매개변수 설명
@return 반환값에 대한 설명
이 사이에 들어간다.
*/
-
util : javadoc.exe <자바를 설치할때 함께 설치되는 유틸리티
-
사용) Dos창 <자바가 실행되는환경은 cui
-
c:\...>javadoc^-d^.^소스파일명.java =>설명서가 html 로 만들어진다.
-
<접근지정자와 프라이빗메소드는 닥에 포함되지않는다.
-
<해주는게 내가보기에 여러사람이 보기에 좋음 해당 명에 마우스 가져갔을때 설명이 뜬다.
*다형성(polymorphism)
-
<같은대상을 다르게쓰는것 객체 다형성/메소드 다형성 2가지
-
같은 대상을 다르게 사용하는 것
-
OOP언어의 3대 특징중 하나. <(상속 다형성 캡슐화->언어는달라도 oop라면 다 가져야 한다.)
-
메소드 다형성, 객체 다형성 (객체 다형성 : 같은 이름의 객체를 다르게 사용하는 것.)
-메소드 다형성 : 같은이름의 method를 다르게 사용하는 것. <규칙을 지켜만들면 사용가능하게 된다.
-
같은이름의 method를 다르게 사용하는 것.
-
overload 와 override가 지원된다. <오버로딩, 오버라이딩 이라고도 한다.
-
overload(overloading) : 하나의 클래스에서 같은 이름의 method를 여러개 작성하는 것. <규칙이 존재
-
규칙) <호출관점에서 다르게 호출할수 있게끔 메소드를 만든다
-
=>호출할 때 (호출시..일본어적..) 식별되도록 method 작성
-
=>접근지정자 : public, protected, private, static, syncronyzed,
-
=>접근 지정자 반환형 method명은 같게 만들고 매개변수만 다르게 작성한다.
-
같게만든다고 하지만 접근지정자와 반환형은 달라도 되긴됨, 호출의 문제가 발생해서 같게만듦.
ex)
calss T{
public void test(){
system.out.println("안녕하세요");
}
public void test(){
for(int i = 0; ; ){
}
}
}
호출
T t = new T();
t.test(); //누구를 불러야 하는지 몰라서 같은 이름의 메소드를 만들수 없는것 Error |
ex)
calss Test{
public void method(){
}
public void method(int i){
}
}
public void method(int i, int j){
}
public void method(char c){// 도 가능
}
public void method(int parameter){//일땐 데이터형이 중요한거지 파라미터이름이중요한게 아님 (겹쳐서 Error)
}//
}
Test t = new Test();
t.method(); //는 위의것
t.method(22); //는 아래의 메소드 호출
t.method(22,11);//맨아래 호출 |
-
<<<같은이름의 메소드를 만들어야하는 이유는? => 편의성 보장 편하려고 <쓰는사람도 만드는사람도 배우는사람도 편해져 >>>
-
<<<오버로드가 안된다면 (자바의 기본형8개 출력시에 출력 메소드8개가 각각 필요하게 되어버림 되기때문에 8+출력1만 알면 되는것
-
<<<편의성이 향상~!~! 제일 대표적으로 잘된 메소드는 println임
-
ex) API의 println method
-
println은 ()매개변수가 빈것도 정의되어있는데 print는 매개변수가 없는게 없기때문에 쓸수없음
-
system.out 보면 오버로딩을 많이 사용하여 편의성을 높임
*OOP(객체지향)
-
<자바의 장점: OOP, 메모리관리(가비지컬랙터), 어떤os든 가능
-
<절차적인씨 컴포넌트파일인 비주얼베이직..사이에 자바를 발표
-
oop(Object Oriented Programing) : 객체지향언어
-
실생활의 모든 사물을 객체로 보고 그 객체를 컴퓨터 세계에서 구현하기 적합한 언어
-
<실생활의 사물은 무지하게 많은데 하나 하나 다~
-
OOP언어의 3대 특징 : 상속, 다형성, 캡슐화
-
상속(부모클래스의 자원을 자기것처럼 사용), 다형성(하나의 대상을 다양하게), 캡슐화(밖에서 쓸수 있고 없게(접근지정자))
-
<실생활에 있는사물이다 라고 하지만 구현하게 되는건 이프로그램을 쓰는 사람들(현업) 모든사물(업무) 를 객체로
-
<현업업무를 잘 분석해 객체로 만들어 컴퓨터에서 구현하기에 가장 적합(?) 업무라는걸 잘 객체로 포장?옷이난 안경 그런게 아니라
-
<책상을 컴퓨터에서 작성하려면...(재료는 나무 못 망치..)=>만든다 하면 설계도가 반드시 필요하다...
-
class는 (구현하기위한) 설계도이다. <잘못만들면 엉망진창
-
몇가지 형태로 규격화 되어있다..
*Variable Arguments (가변 인수형)
public void test(int i){
일때 int i를 parameter 매개변수라고 하는데
}
test(10) 이면 Arguments 인수값 이라고 함 <깞
-
parameter(매개변수)는 하나인데 여러개의 Arguments(인수, 인자값)를 넣어줄수 있는것
-
JDK1.5~~에서부터 지원 (추가된 문법, 기능)
-
<자주쓰지는 않고 쫌 명확하지도 않음
-
<메소드안에서 배열로 생각
-
method안에서는 배열로 처리된다. (for로 돌리면 모든값 찍어볼수있다.)
-
여러개의 parameter를 정의할 때에는 가장 마지막에만 정의할 수 있다.
-
대표적인 메소드가 system.out.printf (줄을 바꾸지 못해 특수문자를 알아야한다.)
-
작성법)
-parameter 정의 할때)
데이터형^...^파라미터명 (^는 띄어쓰기 한칸)
ex)
public void method명(int ... param){ //1개
for (int i = 0; i <param.length; i++){
param[i] //모든값 출력할수있다.
}
}
-
(메소드를 부를때 method명(); (가능) ~ method명(1,2,3,4,5,6,7); 인수가 몇개든 에러나지 않는다.
-
<인수가 변할수 있는거지 파라미터가 변하는게 아님.
-
<메소드 전체에 하나밖에 쓸수없다.? 하나의 메소드겠지?
-
public void method (inti, int j, char ... c){//여러개랑 같이 사용하면 제일 끝에만 정의할수 있고 중간에 들어가게 되면 Error
-
<처음쓰면 편한거 같지만 아님 실제로 많이쓰지않는다.
-
<알면알수록 별로..명확하지 않아서 밖에서 보면 쓸때마다 몇개나 들어가는거야????하게됨
-
값을 넣을때 데이터타입이 동일형이어야 하고 다른형이 들어가면 Error
-
<인자들의 데이터타입이 통일되어야 함
*Escape Character(특수문자)
Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
-
문자열안에 정의하는 \(역슬래쉬)로 시작하는기능을 가진 (기호)문자
-
<반드시 쌍따옴표안에 정의되어있어야 한다. 문자열 '안' 이니까
-
지원되는 특수문자)
특수문자 |
기능 |
\t |
tab(space7번) 효과 |
\n |
new line 줄변경 |
\r |
커서(문자입력시점_포인터) 를 그줄의 가장앞으로 이동 (즐을 바꾸고?)
(PL/SQL에서는 여러줄 조회를 위해 정의된 것이었음)
윈도우에만 있고 리눅스엔 없다.(리눅스에서 쓰면 Error) |
\" |
"를 사용해야할 때 |
\' |
'을 사용해야할 때 |
\\ |
\를 사용해야할 때 |
\b |
backspace |
\f |
프린터의 줄을 변경 |
이외에 특수문자 뒤에 알파벳을 붙이게 되면 Error
\u0000 유니코드
\0 ? |
*Variable Arguments를 이용한 출력 method
-System.out.printf("출력메세지 출력문자", 그에 따른 값들,,,);
Variable Arguments
-
JDK1.5 이상의 버전에서 사용가능(V.A때문에)
-
출력문자를 사용하여 값을 대입
-
출력메세지와 출력값을 분리할 수 있다.(코드 깔끔)
-
출력후에 줄 변경이 되지 않는다.
-
printf에서 사용되는 출력문자)
값 |
출력문자 |
사용예 |
정수 |
%d |
system.out.printf("%d", 정수);<정수값이 %d에 할당) |
실수 |
%f |
system.out.printf("%f", 실수);<실수값이 %f에 할당) double도 가능 |
문자 |
%c |
system.out.printf("%c", 문자);<문자값이 %c에 할당) |
문자열 |
%s |
system.out.printf("%s", 문자열);<문자열 값이 %s에 할당) |
ex)
int year = 2018;
int month = 11;
String week="목요일";
System.out.println("오늘은"+year+"년"+month+"월"+week+"입니다.");
System.out.printf("오늘은 %d년 %월 %s입니다\n", year, month,week);
//보기에 훨씬 편함
-
출력크기를 설정할 수 있다. : %자릿수 문자
-
ex) 정수 자릿수 "%5d", 123이면 - - - - -다섯칸을 잡고 _ _ 1 2 3 으로 들어감.
-
넘어간다고 에러나지는 않지만 칸수가 맞게끔 출력되어 깔끔하게 출력된다.
-
-는 왼쪽정렬 : "%-5d" 1 2 3 _ _
-
실수)
-
"%전체자릿수.실수자릿수f"
-
ex) "%.2f" , 12.1234"=>12.12 출력
-
"%10.2f", 12.1234 => _ _ _ _ _ 1 2 . 1 2 로 출력된다.
반응형