TIL - 22.11.17(자바 복습 중)

자라나는 ㅇㅅㅇ개발자·2022년 11월 17일
0

TIL

목록 보기
14/126

자바 기초 처음부터 복습



1. java 시작하기

  • class의 이름을 HelloJava 생성했을 때 화면
public class HelloJava {
}
  • class 안에 'psvm' -> 'Enter'로 Main 함수를 생성한다.
public class HelloJava {
    public static void main(String[] args) {

    }
}

  • Main함수 안에 들어가보면 왼쪽 위에 경로를 확인할 수 있다.
  • First(project) -> hello(package) -> HelloJava(class) -> main(Main함수)


2. 변수와 자료형


컴퓨터에서 수를 표현하는 방법

  • 모든 데이터는 컴퓨터 내부에서 0과 1로만 이루어져있다.
  • 0과 1로 표현할 수 있는 최소 단위를 비트(bit)라고 한다.

변수

  • 변수란 사람의 나이나 은행의 잔액과 같이 말 그대로 '변하는 수'를 말한다.
  • 변수는 값을 넣을 수 있는 빈 그릇과 같다.
  • 변수의 자료형(사람의 나이는 정수, 사람의 이름은 문자)을 선택하고, 변수의 이름을 정하는 것을 '변수를 선언한다' 라고 한다.
int level;	// 정수형, 정수이름 -> 변수를 선언하였다. 빈 그릇 상태
level = 10;	// 변수에 10 이라는 값을 넣었다.

위 예시에서 '=' 기호는 오른쪽 값을 왼쪽에 대입한다 라는 의미(대입연산자)

public class HelloJava {
    public static void main(String[] args) {
        int age = 31;					// 이와같이 선언과 대입을 동시에 할 수 있다.
        System.out.println("저의 나이는 " + age + "살 입니다.");
    }
}

: 저의 나이는 31살 입니다.

  • 변수에 값을 처음 대입하는 것을 초기화 라고 한다.
  • 변수 선언과 동시에 초기화를 할 수도 있고, 변수를 선언한 이후 대입할 값이 정해지는 시점에 초기화를 할 수도 있다.

맥OS에서 단축키로 실행 시키는 방법 : control + shift + R


변수 - 자료형

  • 변수를 선언하게되면 메모리에 할당된다.
  • 변수를 연산에 사용하거나 값을 출력하게된다면 변수의 이름을 사용하여 그 메모리에있는 값을 가져온다.
  • 즉, 변수를 선언한다는 말은 변수의 이름(age)으로 자료형(int) 만큼의 메모리를 사용하겠다는 뜻이다.

기본 자료형과 참조 자료형
기본 자료형 : 정수형, 문자형, 실수형, 논리형, ...
참조 자료형 : class형, ...


상수와 리터럴

상수

  • 변수와 반대로 변하지 않는 값을 상수(constant)라고 한다.
  • 앞에 final 예약어를 사용해 선언한다.
final double PI = 3.14;
final int MAX_NUM = 100;
  • 상수의 변수이름은 주로 대문자를 사용하며, 단어 연결 시 '_' 기호를 사용.
  • 한번 선언한 상수는 초기화 후에는 변하지 않기 때문에 선언과 동시에 값을 지정(초기화)해주는 것이 좋다.

리터럴(literal)

  • 변수나 상수 값으로 대입할 수 있는 것
  • 위에서 말했던 '값' 들을 리터럴 이라한다.

형 변환

  • 예를들어 정수와 실수를 더한다고 가정할 때, 서로 다른 자료형은 계산이 불가능하므로 하나의 자료형으로 통일한 후 연산을 하는 것


3. 연산자


기본 연산자

항과 연산자

  • 예를들어 '3+4'라는 식이 있다면 3과 4는 항, +는 연산자 라고 한다.
  • 단항 연산자 : ++num
    이항 연산자 : num1 + num2
    삼항 연산자 : (5 > 3) ? 1 : 0; -> 조건 연산자
    연산자의 우선순위는 단항 -> 이항 -> 삼항 순서이다.

대입 연산자

  • 오른쪽 변수를 왼쪽 변수에 대입하는 연산자
int age = 24;	// 오른쪽 변수를 왼쪽 변수에 대입
  • 이항 연산자 중 우선순위가 가장 낮다.
myScore = mathScore + engScore;

이항 연산자를 우선 계산하고(+), 그 뒤에 대입연산자(=)를 수행한다.

산술 연산자

연산자기능
+두 항을 더한다
-뒤에 있는 항을 뺀다
*두 항을 곱한다
/두 항을 나눈 후 몫을 구한다
%두 항을 나눈 후 나머지를 구한다

관계 연산자

연산자기능
>왼쪽 값이 크면 참을 반환
<왼쪽 항이 작으면 참을 반환
>=왼쪽 항이 크거나 같으면 참을 반환
<=왼쪽 항이 작거나 같으면 참을 반환
==두 항의 값이 같으면 참을 반환
!=두 항의 값이 다르면 참을 반환

논리 연산자

연산자기능
&&논리 곱 : 두 항이 모두 참인 경우에만 참
II논리 합 : 두 항 중 하나라도 참인 경우에 참
!부정 : 단항 연산자, 참인 경우 거짓으로 거짓인 경우 참으로 바꾼다

조건 연산자

연산자기능연산 예
조건식 ? 참 결과1 : 거짓 결과2조건식이 참이면 결과1, 조건식이 거짓이면 결과2int num = (5>3) ? 10 : 20
public class HelloJava {
    public static void main(String[] args) {
        int motherAge = 40;
        int fatherAge = 43;

        String trueOrFalse = (motherAge < fatherAge) ? "참입니다." : "거짓입니다.";

        System.out.println(trueOrFalse);
    }
}


4. 제어 흐름(조건문, 반복문)


조건문

if문과 if-else문

if문의 형식

if(조건식){
	수행문;
}
int age = 15;
if (age > 18) {
	System.out.println("성인입니다.");
}

이 경우 조건문이 거짓이기 때문에 수행문이 수행되지 못한다.

if-else문의 형식


int age = 15;
if (age > 18) {
	System.out.println("성인입니다.");
}else{
	System.out.println("미성년자입니다.");
}

else를 사용한다면 조건문이 필요없다.


반복문

while문과 for문

while문의 형식

while (조건식) {
	수행문 1;
} 수행문 2;

조건식이 참인동안 수행문 1을 반복한다. 거짓이라면 수행문2로 넘어간다.

int num = 0;
int sum = 0;

while(num < 10){
    sum += num + 1;
    num++;
}
System.out.println("1부터 10까지의 총 합은 " + sum + "입니다.");

출력값 : 1부터 10까지의 총 합은 55입니다.


do-while문은 수행문이 먼저 나오고 그 뒤에 조건문이 나오는 형식
조건에 맞지 않더라고 적어도 한번 이상은 수행되어야할 때 사용

for문

  • for문은 주로 배열에서 많이 사용한다.

for문의 형식

for (초기화식; 조건식; 증감식) {
	수행문;
}
  • 초기화식은 처음 한번만 수행
  • 조건식이 참이라면 수행문을 수행하고 증감식을 수행한 후 다시 조건식을 반복한다.
public class HelloJava {
    public static void main(String[] args) {
        int sum = 0;

        for (int num = 0; num < 10; num++){
            sum += num + 1;
        }
        System.out.println("1부터 10까지의 총 합은 " + sum + "입니다.");
    }
}

for문은 for문의 초기화식에서 num을 초기화시켜주기 때문에 따로 초기화를 해주지 않는다.
이미 이전에 초기화식으로 변수가 초기화되었다면 초기화식을 생략해도된다.
for문 안에 if문으로 조건을 넣는다면 조건식을 생략해도된다.
증감식을 생략하고 for문 안에서 증감을 따로 넣어도된다.
모든 요소를 생략한다면 무한반복된다.

continue문

  • 반복문과 함께 쓰인다.
  • 반복문 안에서 continue를 만나면 위에서 사용한 조건식이 참일 경우 이후 문장은 생략하고 for문으로 돌아가 증감식을 수행한다.
  • 거짓일 경우에만 그 다음 수행문을 수행한다.
  • 특정 조건에서는 수행하지 않고 건너뛰어야 할 때 사용한다.
public class HelloJava {
    public static void main(String[] args) {
        int num;
        for (num = 1; num <= 100; num++){
            if (num % 3 !=0){
                continue;
            }
            System.out.println(num);
        }
    }
}

continue문을 이용해서 100이하의 3의 배수 전부를 출력하는 경우

break문

  • 반복문과 함께 쓰인다.
  • 반복문 안에서 조건식이 참일 경우 더이상 수행문을 반복하지 않고 반복문을 빠져나온다.
  • 2중 반복문일 경우 가장 가까운 반복문을 빠져나온다.
while(조건식1){			// 바깥 반복문
	while(조건식2){		// 안쪽 반복문
    	if(조건식3){		// 조건문
        	break;
        }
    }
}

if문은 조건문이므로 안쪽 반복문을 빠져나와 조건식1의 반복문을 반복하게된다.



5. 클래스와 객체


객체 지향 프로그래밍과 클래스

  • 객체 : 의사나 행위가 미치는 대상
  • 객체 지향 프로그래밍 : 객체를 가지고 하는 프로그램
    예를들어 학생이 아침에 일어나 밥을 먹고 버스를 타고 학교에 간다. 라는 예시에서
    객체는 학생, 밥, 버스, 학교이며
    학생이 밥을 먹는다 라는 표현은 학생과 밥이라는 객체 끼리의 협력으로 이루어진다.
  • 이처럼 객체를 만들고 객체 사이에 일어나는 일을 구현하는 것을 객체 지향 프로그래밍 이라 한다.

  • 클래스 : 객체의 속성과 기능을 코드로 구현한 것
  • 객체를 클래스로 구현하는 것을 클래스를 정의한다 라고 한다.
  • 클래스를 정의하려면 클래스의 이름과 클래스가 가지는 속성 또는 특성이 필요
    학생이라는 객체를 student라는 클래스로 정의할 수 있으며,
    학생의 이름, 학번, 사는곳을 클래스의 속성,특성이라 하며, 이를 멤버 변수 라고한다.

클래스를 정의하는 문법

public(접근제어자) class (class의 이름) {
	멤버 변수;
    메서드;
}

예시

public class Student {
    int studentID;
    String studentName;
    int grade;
    String address;
}

클래스 안에 내용들은 클래스의 속성, 특성을 나타내는 멤버 변수이다.
자바 프로그램은 모든 요소가 클래스 내부에 있어야 한다. 외부에는 package선언과 inport문장만 선언한다.
클래스의 이름은 항상 대문자로 시작한다 라는 사람들 끼리의 규칙이 있다

  • 클래스의 멤버 변수는 int나 double과 같이 기본 자료형으로 선언할 수 있지만
  • String이나 개발자가 직접 만든 Student, Person과 같이 참조자료형으로도 선언할 수 있다.

메서드

  • 클래스 내부에서 멤버 변수를 사용하여 클래스의 기능을 구현하는 것을 멤버 함수 또는 메서드 라고 한다.
  • 메서드는 함수의 한 종류
public class Student {
    int studentID;
    String studentName;
    int grade;
    String address;

    public void showStudentInfo(){
        System.out.println(studentName + ", " +address);
    }
}

클래스 내부에서 멤버 변수 아래에 멤버 변수의 속성을 호출하는 메서드를 구현하였다

함수

  • 기능을 수행하는 일련의 코드
  • 어떤 기능을 수행하도록 미리 구현해 놓고 필요할 때마다 호출하여 사용할 수 있다.
int add (int num1, int num2){
	int result;
    result = num1 + num2;
	return result;
}
  • int : 함수 반환형. 반환(return)되는 result의 자료형을 지정한다. 지정하지 않을 때는 'void'를 사용한다.
  • add : 함수 이름. 함수의 이름은 의미를 알 수 있는 단어를 사용한다.
  • (int num1, int num2) : 매개변수. 함수의 입력으로 받는 변수. 함수에 전달되어 기능을 수행한다.
  • return : return 예약어. 위 예제에서 두 매개변수를 더한 결과 값을 result 변수에 저장하여 결과를 반환하게 해주는 예약어. result를 반환 값 이라 한다.
    return 예약어는 함수 수행을 끝내고 함수를 호출한 곳으로 다시 되돌아갈 때도 사용한다. 이 때는 return 뒤에 반환 값을 적지 않아도 된다. (반복문의 break와 비슷한 기능)

클래스 기능을 구현하는 메서드

  • 클래스 내부에서 사용하는 멤버 함수
  • 멤버 변수를 사용하여 클래스의 기능을 구현한다.
  • 함수에 객체 지향 개념이 포함된 용어로 보면된다.

클래스와 인스턴스

프로그램을 시작하는 main()함수

  • 프로그램을 시작하기 위해 호출하는 함수
  • 클래스의 내부에 만들지만, 클래스의 메서드는 아니다.
  • main함수에서 클래스를 만드는 방법 두가지
    클래스 내부에 main함수를 만드는 것
    클래스 외부에 테스트용 클래스를 만드는 것
package pkg;

public class Student {
    int studentID;
    String studentName;
    int grade;
    String address;

    public String getStudentName(){
        return studentName;
    }

    public static void main(String[] args) {	// main함수 생성
        Student studentAhn = new Student();		// main함수 안에서 클래스를 생성
        studentAhn.studentName = "안연수";		// 클래스의 멤버 변수에 값을 대입

        System.out.println(studentAhn.studentName);
        System.out.println(studentAhn.getStudentName());
    }
}
  • 이처럼 클래스 내부에 psvm을 이용하여 main함수를 만들면 이 클래스가 프로그램의 시작 클래스가 된다.

new 예약어로 클래스 생성하기

클래스형 변수이름 = new 생성자

  • new 예약어에 생성자를 호출하여 대입하면 새로운 클래스를 생성할 수 있다.
  • 클래스가 생성된다는 것은 클래스를 실제 사용할 수 있도록 메모리공간(힙 메모리)을 할당 받는다는 의미
  • 메모리 공간을 할당받은 클래스를 인스턴스 라고 한다.
Student studentAhn = new Student();

위 코드는 Student 클래스 자료형으로 studentAhn라는 참조변수를 선언하고 new Student()로 클래스를 생성하여 studentAhn에 대입한다는 의미

객체, 클래스, 인스턴스

  • 객체는 의사나 행위가 미치는 대상
  • 이를 코드로 구현한 것이 클래스
  • 클래스가 생성자에 의해 메모리 공간에 생성된 상태를 인스턴스
  • 생성된 클래스의 인스턴스를 객체라고도 한다.
  • 하나의 클래스 안에 여러개의 인스턴스를 생성할 수 있다.
    비유하자면 클래스는 학생, 인스턴스는 안연수(학생)
  • 참조변수 사용하기
    참조 변수.멤버 변수
    참조 변수.메서드
    예시
studentAhn.studentName = "안연수";					// 멤버 변수 사용 -> 참조 변수로 멤버 변수에 이름을 저장
System.out.println(studentAhn.getStudentName());	// 메서드 사 용 -> getStudentName() 메서드를 사용 

용어 설명

용어설명
객체객체 지향 프로그램의 대상, 생성된 인스턴스
클래스객체를 프로그래밍하기 위해 코드로 만든 상태
인스턴스클래스가 메모리에 생성된 상태
멤버 변수클래스의 속성, 특성
메서드멤버 변수를 이용하여 클래스의 기능을 구현
참조 변수메모리에 생성된 인스턴스를 가리키는 변수
참조 값생성된 인스턴스의 메모리 주소 값

생성자

  • 클래스를 처음 만들 때 멤버 변수나 상수를 초기화해준다.
  • 생성자 이름은 클래스 이름과 같고, 반환 값이 없다.
  • 생성자가 없는 클래스는 클래스 파일을 컴파일할 때 자바 컴파일러에서 자동으로 생성자를 만들어준다. -> 이를 디폴트 생성자 라고 한다.
  • 디폴트 생성자는 매개변수가 없고 구현 코드도 없다.

접근제어자

  • 접근제어자를 사용하여 클래스 내부의 변수나 메서드, 생성자에 대한 접근 권한을 지정할 수있다.
  • private으로 정보가 제한되더라도
    값을 얻는 get() 메서드인 getter
    값을 지정하는 set() 메서드인 setter
    로 private 변수에 직접 접근하지는 못하지만 public 메서드를 통해 접근할 수 있다.
  • 필요한 경우에 private으로 오류를 막을 수 있다.
접근 제어자설명
public외부 클래스 어디에서나 접근할 수 있다.
protected같은 패키지 내부와 상속 관계의 클래스에서만 접근할 수 있고, 그 외 클래스에서는 접근할 수 없다.
private같은 클래스 내부에서만 접근할 수 있다.
비워둘 경우default이며 같은 패키지 내부에서만 접근할 수 있다.

0개의 댓글