클래스: 어떤 데이터와 그 데이터를 조작하는 함수를 묶어놓은 것 (데이터가 잘못 변형되는 것을 막는다)
자바: 대표적인 객체 지향 언어
.java 파일을 컴파일하면 --> .class -------> JVM(가상머신)으로 실행
JDK(javac) JRE(java)
IDE : 통합개발환경
나는 java 17과 intelliJ를 설치해주었다
프로젝트 생성 > 자바 > Test 라는 이름으로 프로젝트 생성
이건 예전에 대 김영한 님 강의 들을 때 내가 정리해뒀던 거다 !
- RUN :
control + R
파라미터 정보
: “파라미터”에 command + P( 괄호 닫고 ;
← 이와같이 좀 귀찮은 거 자동완성 : ( → command + shift + entercontrol + enter
→ 생성자 !!! Generate / Getter and Setter- 빨간 줄 ex) 섹션3-2 implements MemberRepository할 때
option + enter
해서 모두 ok하면 모두 override 할 수 있음- import 필요할 때 : ctrl + space / option + enter
- shift + fn + F6 → rename 중복되는 이름 변경 편하게 하고 싶을 때!!
- command + option + V → return 그냥 해줌
memberRepository.findByName(member.getName());
→Optional<Member> result = memberRepository.findByName(member.getName());
- Ctrl + T → 리팩토링 관련 - inline하면 return 합쳐줌
- command + option + M : method로 뽑기
- 클래스에서 command + shift + T : 테스트 껍데기 자동 생성
- Ctrl + R → 이전에 실행했던 거 다시 실행
- command + E : 과거 내역
- option + Enter : 해당 기능(클래스)이 포함된 패키지를 자동으로
이렇게 mac에서 만들어지면 mac에서만 실행 가능한 것을 플랫폼 종속적이라고 한다.
JVM : Java Virtual Machine
운영체제 별로 JVM만 설치되어 있으면 mac에서 만든 애플리케이션을 window, mac, linux 에서 실행 가능하다 !
자바가 인기를 누린 계기 😏
호환이 안 되는 경우도 있다 (32bit != 64bit) -> 함께 묶어서 배포하는 컨테이너 가상화 기술로 해결
논리적인 directory 개념으로 묶어주는 것
src 밑에 mypack 으로 package를 만들어준다.
package 안에 Test 로 class를 만들어준다.
package mypack;
~~~~~~~~~~~~~~
패키지 이름
public class Test {
~~~~~~ ~~~~
| 클래스 이름 = java 파일명
+-- 접근 지정자(제한자, modifier)
public static void main(String[] args) { ⇐ 해당 클래스를 실행할 때 처음으로 호출되는 메서드
main 메서드를 가지고 있는 클래스 ⇒ 실행 클래스
main 메서드를 가지고 있지 않은 클래스 ⇒ 라이브러리 클래스
System.out.println("Hello, Java!!!"); ⇐ 문자열을 콘솔에 출력
}
}
sout
만 쳐도 System.out.println();
가 나온다 !
mypack.Test <- 패키지 명에 포함된 .은 디렉토리로 구분
=> 패키지는 자바 파일을 구분하는 수단으로 사용
=> 패키지 이름을 유일하게 만드는 방법이 필요
=> 도메인 이름의 역순으로 표기
ex) naver.com => com.naver.MyTest
daum.com => com.daum.MyTest
package mypack;
/**
* 문서화 주석
*
* @author 홍길동
*/
public class Test {
/**
* main 메서드
* @param args 실행 시 전달되는 매개변수를 배열 형태로 전달
*/
public static void main(String[] args) {
// 인라인 주석 (command + /)
/*
주석 기호 내의 모든 내용을 해석하지 않음 (command + shift + /)
*/
System.out.println("Hello, Java!!!");
}
}
파일명과 클래스 명이 같아야만 public을 붙일 수 있다.
package com.test;
// Java 파일명과 동일한 클래스에만 public 접근 지정자를 붙일 수 있음
public class MyTest { // MyTest.class
}
class A { // A.class
}
class B { // B.class
class C { // B$C.class <= 내부 클래스
}
}
package com.test;
// Java 파일명과 동일한 클래스에만 public 접근 지정자를 붙일 수 있음
public class MyTest { // MyTest.class
public static void main(String[] args) {
// System.out.println() => 인자값을 콘솔에 출력하고 개행문자를 처리
System.out.println(); // 한 줄 띄우기
System.out.println("문자열");
System.out.println(1234);
System.out.println(true);
System.out.println();
}
}
package com.test;
// Java 파일명과 동일한 클래스에만 public 접근 지정자를 붙일 수 있음
public class MyTest { // MyTest.class
public static void main(String[] args) {
// System.out.println() => 인자값을 콘솔에 출력하고 개행문자를 처리
System.out.println(); // 한 줄 띄우기
System.out.println("문자열");
System.out.println(1234);
System.out.println(true);
// System.out.print(); => 인자값을 콘솔에 출력
System.out.print("문자열");
System.out.print(1234);
System.out.print(true);
// 개행문자를 출력
System.out.print("개행문자를 포함\n");
System.out.print("다음 줄에 출력\n");
// System.out.printf() => 형식 문자열을 이용해서 출력
// ~~~~~~~~
// 데이터의 출력 형식을 지정하는 %로 시작하는 문자열
System.out.printf("%s 문자열 출력\n", "이것은 문자열입니다.");
System.out.printf("%d 숫자 출력\n", 1234);
System.out.printf("%d : %f : %4.2f\n", 100, 15.66666, 15.66666);
}
}
![](https://velog.velcdn.com/images/letthem/post/e9f0bad8-4310-459a-a596-8e6e3c8d9aa4/image.png)
같은 이름의 메서드를 매개 변수의 타입, 개수, 순서를 다르게 해서 여러 개 정의 (반환 타입은 포함되지 않음)
자바의 다형성(polymorphism) 개념의 구현
- 오버로딩(Overloading)은 기존에 없던 새로운 메서드를 정의하는 것
- 오버라이딩(Overriding)은 상속받은 메서드의 내용만 변경하는 것
package com.test;
// Java 파일명과 동일한 클래스에만 public 접근 지정자를 붙일 수 있음
public class MyTest { // MyTest.class
public static void main(String[] args) {
// 변수 선언 시 변수가 가지는 데이터 타입을 지정
int a;
a = 123;
a = 123.0; // error: double을 int로 바꿀 수 없다
a = "abc"; // error: string을 int로 바꿀 수 없다
}
}
package com.test;
public class MyTest {
public static void main(String[] args) {
// 변수 명명법
boolean aBcD; // O 가능하지만 권고 위배
byte 가나다; // O
short _abcd; // O
char $ab_cd; // O
int 3abcd; // X 숫자로 시작
long abcd3; // O
float int; // X 예약어를 사용
double main; // O
int my Work; // X 공백을 포함
String myClassName; // O camel 표기법
int ABC; // O 가능하지만 권고 위배 (상수 표기법)
// 상수 명명법
final double PI; // O
final int MY_DATA; // O
final float myData; // O 가능하지만 권고 위배 (변수 표기법)
}
}
변수는 선언된 시점에 생성되고, 생성된 변수는 자신이 선언된 열린 중괄호의 쌍인 닫힌 중괄호를 만나면 메모리에서 삭제
package com.test;
public class MyTest {
public static void main(String[] args) {
int a = 10;
System.out.println("#1 : " + a); // 10
{
int b = 20;
System.out.println("#2 : " + a); // 10
System.out.println("#3 : " + b); // 20
}
{
int b = 30;
System.out.println("#4 : " + a); // 10
System.out.println("#5 : " + b); // 30
}
System.out.println("#6 : " + a); // 10
System.out.println("#7 : " + b); // error
}
}
일반적으로 소문자로 시작
일반적으로 대문자로 시작
모든 참조 자료형은 클래스로 되어있기 때문 !
자바에서는
package com.test;
public class MyTest {
public static void main(String[] args) {
char heart = '\u2665';
System.out.println(heart);
}
}
package com.test;
public class MyTest {
public static void main(String[] args) {
char heart = '\u2665';
int i = 100;
byte b = 127; // 127까지 가능
float f = 100.0F;
System.out.println(heart);
}
}
byte short int long float double char 타입 변환 가능하다.
- float: 소수는 double로 자동 저장돼서 error 발생. F를 붙여 수동으로 형변환 해줘야 한다.
ex) byte c = (byte)128 // -128
0000 0000 0000 0000 0000 0000 1000 0000
~~~~~~~~~ ~~~~~~~~~ ~~~~~~~~~ ~~~~~~~~~
의도하지 않게 부호값(-)로 나옴
연산을 수행하는 과정에서 결과가 이미 확정되었을 때 나머지 연산 과정을 생략
package com.test;
public class MyTest {
public static void main(String[] args) {
// | 연산 => 모든 연산을 수행 후 결과를 비교
/*
// java.lang.NullPointerException 예외가 발생
String s = null;
if (5 > 3 | s.equals("abc")) {
System.out.println("^^;;;");
}
*/
// || 연산 => 결과가 확정되면 연산을 생략하므로 예외가 발생하지 않음
String s = null;
if (5 > 3 || s.equals("abc")) {
System.out.println("^^;;;");
}
}
}
if (5 > 3 | s.equals("abc"))
앞 연산 true, 뒤 연산 에러나는 상황
| 연산 => 모든 연산을 수행 후 결과를 비교하기 때문에 뒤 연산을 생략하지 않는다.
s가 null 이라서 s.equals 로 참조가 불가해서 에러가 난다.
|| 연산 => 결과가 확정되면 뒤 연산을 생략하므로 에러가 나지 않는다.
package com.test;
import java.util.Scanner;
public class MyTest {
public static void main(String[] args) {
// option + enter => 해당 기능(클래스)이 포함된 패키지를 자동으로
Scanner scanner = new Scanner(System.in);
int score = scanner.nextInt();
switch(score) {
case 10:
System.out.println("A등급");
break;
case 20:
System.out.println("B등급");
break;
case 30:
System.out.println("C등급");
break;
default:
System.out.println("기타 등급");
break;
}
}
}
반복문의 다음 조건으로 이동