자바 문법뽀개기
\n 코드를 통해 줄바꿈이 가능하다
String : 문자열
int : 정수
double : 실수
실수형
float(4바이트) 실수뒤에 F를 붙여줘야함 ex) float a = 2.2F;
double(8바이트) : float보다 더많은 범위 표현가능 float를 써야할 이유가 분명하지 않으면 왠만하면 double을 쓰자 !
데이터의 크기
8bit : 1바이트
1024 바이트 : 1킬로바이트
1024 킬로바이트 : 1메가바이트
1024 메가바이트 : 1기가바이트
1024 기가바이트 : 1테라바이트
1024 테라바이트 : 1페타바이트
1024 페타바이트 : 1엑사바이트
1024 엑사바이트 : 1제타바이트
데이터타입 비교
문자 (글자하나를 의미)
char (2바이트) :모든 유니코드 문자
상수형 데이터 타입
변수는 변하는값 , 상수는 변하지 않는 값
int a(변수) = 1(상수);
long데이터 타입은 정수뒤에 L을 붙여줘야함 EX) long a =22222222222222L;
형변환
int b = (int)100.0F; // 100 (float값을 정수로 형변환) float a = (float)100.0; // 100.0
switch 문
public class Main { public static void main(String[] args) { switch (2) { case 1: System.out.println(1); case 2: System.out.println(2); case 3: System.out.println(3); break; case 4: System.out.println(4); default: System.out.println("default"); // 2 와 3을 출력하고 4로 가기전에 브레이크로 이구문을 탈출 // 나와있는 범위를 초과시 디폴트에 있는값을 출력한다 } } }
반복문 1 (while)
public class Main {
public static void main(String[] args) {
int i = 0;
while (i < 10) {
System.out.println("coding" + i);
i++;
// coding0 ~ coding9 까지 출력
}
}
}
반복문의 중첩
public class Main {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
for (int j =0; j<10; j ++) {
System.out.println(i + "" +j);
// 00 ~ 99 출력
}
}
}
}
반복문과 배열의 조화
public class Main {
public static void main(String[] args) {
String[] members = {"a" ,"b" , "c"};
for (int i =0; i < members.length; i++) {
String member = members[i];
System.out.println(member + "이 상담을 받았습니다.");
// a이 상담을 받았습니다. / b이 상담을 받았습니다. / c이 상담을 받았습니다.
}
}
}
for - each문 (위 반복문 배열 보다 간결히 사용가능)
public class Main {
public static void main(String[] args) {
String[] members = {"a" ,"b" , "c"};
for (String e : members) {
System.out.println(e + "이 상담을 받았습니다.");
// a이 상담을 받았습니다. / b이 상담을 받았습니다. / c이 상담을 받았습니다.
}
}
}
메소드(입력값)
public class Main { public static void numbering(int limit) { int i = 0; while (i < limit) { System.out.println(i); i++; } } public static void main(String[] args) { numbering(5); // 4까지 출력 } }
public class Main { public static void numbering(int init,int limit ) { int i = init; while (i < limit) { System.out.println(i); i++; } public static void main(String[] args) { numbering(11,15); // 11 ~ 14 까지 출력 } }
출력값
public class Main { public static String numbering(int init, int limit ) { int i = init; String output = ""; // 만들어지는 숫자들은 아웃풋이라는 변수에 담기 위해서 변수에 빈 값을 주었다. while (i < limit) { // 숫자를 화면에 출력하는 대신 변수 아웃풋에 담았다. output += i; i++; } return output; // 중요 !! 아웃풋에 담겨있는 문자열을 메소드 외부로 반환하려면 아래와같이 리턴 // 배치하면된다 } public static void main(String[] args) { String result = numbering(1,5); // 메소드 넘버링이 리턴한 값이 변수 리절트에 담긴다. System.out.println(result); // 변수 리절트의 값을 화면에 출력한다. } }
객체지향
Static을 포함하면 클래스 메소드
포함하지않으면 인스턴스 메소드
인스턴스 메소드는 클래스 맴버에 접근 할수 있다.
클래스 메소드는 인스턴스 맴버에 접근 할수 없다.
인스턴스 변수 - Non-Static Field
클래스 변수 - Static Field
생성자
class Calculator {
int left, right;
public Calculator(int left, int right) {
// 클래스와 똑같은 메소드명(생성자)이 중요 포인트 !
// 클래스가 생성될떄 자동으로 클래스와 똑같은 이름을 가지고있는 생성자가 실행되도록 약속되어있음 어떤 메소드보다 먼저 실행되도록 약속되어있음
// 클래스와 같은이름가지고있는 어떤 메소드를 정의해서 그 메소드의 내용을 채워넣게 되면 그 내용(로직)은 어떠한 메소드보다 먼저 실행이 되서 해당 객체가 가장먼저 해야할일(초기화작업)을 하게함
this.left = left;
this.right = right;
}
public void sum() {
System.out.println(this.left + this.right);
}
public void avg() {
System.out.println((this.left + this.right) / 2);
}
}
public class Main {
public static void main(String[] args) {
Calculator c1 = new Calculator(10, 20);
c1.sum();
c1.avg();
}
}
상속
오버라이딩 : 부모 클래스에서 받은 메소드를 필요애따라 변경 하는것 (부모클래스와 자식클래스의 시그니처가 서로 같아야함) Super키워드를 사용해야함
class Calculator { int left, right; public void setOprands(int left, int right) { this.left = left; this.right = right; } public void sum() { System.out.println(this.left + this.right); } public int avg() { return ((this.left + this.right) / 2); } } class SubstractionableCalculator extends Calculator { public void sum() { System.out.println("실행 결과는 " +(this.left + this.right)+"입니다."); } public int avg() { return super.avg(); } public void substract() { System.out.println(this.left - this.right); } } public class Main { public static void main(String[] args) { SubstractionableCalculator c1 = new SubstractionableCalculator(); c1.setOprands(10, 20); c1.sum(); System.out.println("실행 결과는" + c1.avg()); c1.substract(); } }
오버로딩 : 메서드의 이름은 같고 매개변수의 갯수나 타입이 다른 함수를 정의하는 것을 의미한다.
(기존에 없던 새로운 메서드를 정의하는 것)class Calculator{ int left, right; int third = 0; public void setOprands(int left, int right){ System.out.println("setOprands(int left, int right)"); this.left = left; this.right = right; } public void setOprands(int left, int right, int third){ this.setOprands(left , right); System.out.println("setOprands(int left, int right, int third)"); this.third = third; } public void sum(){ System.out.println(this.left+this.right+this.third); } public void avg(){ System.out.println((this.left+this.right+this.third)/3); } } public class Main { public static void main(String[] args) { Calculator c1 = new Calculator(); c1.setOprands(10, 20); c1.sum(); c1.avg(); c1.setOprands(10, 20, 30); c1.sum(); c1.avg(); } }
접근제어자
- 문법
1 . (public은 어디에서든지 접근할수있다 , private은 같은 클래스내에서만 접근할수있다.)
2 . protected는 같은 패키지(같은소속)에서만 접근가능 단,상속 관계시 받은파일(다른소속)에서는 가능
3 . default는 다른 패키지일 경우 상속관계일지라도 접근불가능
4 . private
class A { public String y(){ return "public void y()"; / 외부적으로 사용이가능 } private String z(){ return "public void z()"; / (private) 클래스 내부적으로는 사용할수있지만 외북적으로 사용이불가능 } public String x(){ return z(); } } public class Main { public static void main(String[] args) { A a = new A(); System.out.println(a.y()); // 아래 코드는 오류가 발생한다. //System.out.println(a.z()); System.out.println(a.x()); } }
클래스 접근 제어자
클래스를 public으로 지정을한다면 그 클래스의 소크코드파일은 클래스와 같은 이름으로 해줘야한다.
(퍼블릭으로 지정되있는 클래스와 소스코드의 파일이 다르면 컴파일 에러가난다.)
abstract(추상)
final
추상이 상속을 강제하는 것이라면 final은 상속/변경을 금지하는 규제다. 이 정도로 final의 용도를 기억해두고 코드를 보자.
/ final 메소드 package org.opentutorials.javatutorials.finals; class A{ final void b(){} } class B extends A{ void b(){} } / final 메소드는 final 변수 만큼 사용 빈도가 높지는 않다. 위 코드는 final 메소드 b를 상속하려하기 때문에 오류가 발생한다.
/ final 클래스 package org.opentutorials.javatutorials.finals; final class C{ final void b(){} } class D extends C{} / final 클래스를 상속하려하고 있다. 따라서 오류가 발생한다.
인터페이스
단순한 예제)
interface I{ public void z(); } class A implements I{ public void z(){} } / 클래스 A 뒤의 implements I는 이 클래스가 인터페이스 I를 구현하고 있다는 의미다. 그것은 3행의 interface I의 맴버인 public void z() 메소드를 클래스 A가 반드시 포함하고 있어야 한다는 뜻이다. 따라서 위의 코드는 문제가 없다. 인터페이스의 의미를 좀 더 분명하게 하기 위해서 8행의 public void z(){}를 삭제하자. 컴파일 에러가 발생할 것이다.
인터페이스 규칙들
1 . 인터페이스를 선언할때 정의되는 멤버들의 접근제어자들은 public으로 와야한다.(멤버는 반드시 퍼블릭이다.)
2 . 인터페이스는 본체가없는 메소드들을 가지고 있어야한다.
메소드와 다형성 :
다형성 : 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 의미한다.
인터페이스
예외
변수 :
어떠한 데이터를 저장하기 위한 메모리 공간의 이름입니다. 지속적으로 변수의 값을 변경할 수 있다. (첫글자는 숫자,특수문자가 오지못함)
상수 :
중간에 값이 변할 수 없으며 초기값을 끝까지 사용해야 한다.
앞에 final 키워드를 붙여 생성을한다
ex) final int finalNumber =1;
자바의 네이밍 규칙(캐멀케이스규칙) : ex)finalNumber
첫글자는 소문자로 오고 그다음 구분되는 단어첫글자는 대문자로 구분한다
자료형 : 숫자 , 문자 , 논리 , 바이트
숫자 :
숫자 관련한 값을 변수로 선언할 수 있습니다.
문자 :
문자 관련한 값을 변수로 선언할 수 있습니다.
논리 : 참 거짓의 값을 변수로 선언할 수 있습니다
바이트 : 바이트를 변수로 선언할 수 있습니다. 컴퓨터에서 표현되는 모든 데이터는 사실상 바이트의 연속입니다. 바이트를 직접 쓰실일은 별로 없겠지만, 바이트로 표현할 수 있다는 것만 알아두세요.
자료형 - 참조 자료형
Array 는 출력값에 알트+엔터 +엔터 눌러주기
자료형 퀴즈 :
퀴즈 1: 문자 변수 'S' , 정수형 변수 10 를 선언 및 출력해보세요.
방법 1
방법 2
c가 아스키코드의 십진법으로 계산되어 출력
해결하기위한방법은 방법3이미지 참고
방법 3
쌍따움표 (" ")를 붙여서 c10으로 출력되는모습
방법 4
백슬래쉬n (\n)을 붙이면 붙여서 출력하는게 아님 다음줄로 행이동을해서 하나씩 출력함
연산자
대입연산자
관계연산자
논리 연산자
조건문
SWITCH문
break : 조건이 맞다면 밑에는 실행시키지않고, switch문 밖으로 나가게 해주는 역할을 함
삼항연산자
? : true or false 일때 메서지 출력
조건문 퀴즈 1:
입력받은 점수가 무슨 등급인지 출력하기
(100~91점 : A등급 , 90점~81점 : B등급 , 80점~71점 : C등급 , 그 외의 점수 : F등급)
(참고로, 입력을 받는 코드는 아래와 같습니다.)
public static void main(String[] args) { Scanner sc = new Scanner(System.in); int score = sc.nextInt(); }
처음 스캐너가 빨간줄로 표시될떄 알트 +엔터키 해줘서 필요한 라이브러리 임포트 해주기
(System.in);
시스템 인풋을 받을꺼라는 의미
.nextInt();
다음에 들어오는 숫자를 받을꺼라는 의미
결과값 :
nextInt 형식은 터미널창에 값을 입력해주고 엔터 !!
반복문
for문
for(초기값 ; 조건식 ; 증감식){ 실행 코드 블럭 }
for - each문
While 문
while(조건식){ 실행 코드 블럭 }
break :
break는 반복문을 더 이상 실행하지 않고 끝내는 역할을 함
continue :
반복문을 진행하다가 continue가 있을 경우, 다시 반복문 코드 블럭의 처음 부분으로 돌아가서 진행함(스킵)
do-while문 :
- do-while문과 while문의 차이가 나타납니다. while문은 조건식에 부합할 경우 코드 블럭을 실행하지만, do-while문은 일단 코드 블럭을 무조건 한번 실행한 후, while문의 조건을 비교합니다.
- 즉, while문의 조건을 확인하기 이전에 do 내부의 코드블럭을 한 번 시행한 후, 그 이후에는 while문의 조건에 일치하지 않으므로 더이상의 실행은 하지않고 출력을 하게 되는 것입니다.
Author And Source
이 문제에 관하여(자바 문법뽀개기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@eofbs123/자바-문법뽀개기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)