더 많이 실패하기

코딩공부 22일차: 프로그래머스 자바 입문 - 5. 클래스와 객체 본문

자바

코딩공부 22일차: 프로그래머스 자바 입문 - 5. 클래스와 객체

김발자~ 2022. 8. 22. 22:13
반응형

#비전공자개발 공부 22일차

프로그래머스 자바 입문 강의를 듣는 중이다

https://school.programmers.co.kr/learn/courses/5

 

자바 입문

자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금

school.programmers.co.kr

 

 

 

 


파트5 클래스와 객체:

클래스 선언

 

자바 = 객체지향 언어

객체는 프로그램을 구성하는 요소

객체끼리 상호작용하도록 프로그래밍해야 한다

 

자바는 무조건 객체를 위해 클래스를 만들고 시작해야 한다

 

클래스 = 객체를 만들기 위한 틀

객체는 붕어빵, 클래스는 붕어빵 틀(귀엽다)

 

클래스를 만들 땐 저렇게 public class 클래스이름 {} 으로 선언해야 하고

객체를 생성할 때는 new 연산자를 붙인다

 

붕어빵 틀을 만들었으면 붕어빵 여러 개를 만들 수 있으므로

클래스 하나에 객체 여러 개를 생성할 수 있다

 

new연산자 뒤에 선언된 Car 객체를 참조하는 변수 c1, c2가 생긴 것

 

실습

이렇게 Car.java 파일에 따로 Car class 선언하고 CarExam.java에서 객체를 생성했다

강의에서도 이런 식으로 진행했는데 왜 파일을 나눠서 하는 건지 모르겠다

https://mozi.tistory.com/547

이 글 보니까 분업을 편하게 하기 위해서인 듯하다

그리고 생활코딩에서 따로 함수를 정의해두면 수정에 용이하다고 했던 것 같은데 이와 같은 이치인듯..?

 

 

 


파트5 클래스와 객체:

참조타입

 

자바는 변수를 선언하기 전 무조건 타입을 정해주어야 한다

자바 변수 타입 중 참조형은 기본형을 제외한 모든 데이터 타입이다

배열, 클래스 등이 포함된다

 

위 그림처럼 변수가 참조한다는 것은 해당하는 데이터를 가지고 있는 게 아니라 가리키는 것

String이라는 클래스에 str 변수를 썼다

 

 

 


파트5 클래스와 객체:

String 클래스

 

문자열 클래스 String은 자바에서 가장 많이 사용하는 클래스

String은 유일하게 new연산자 없이 생성자를 만들 수 있다

다만 new 없이 생성하면 상수형 자리에 저장되기 때문에 값이 같으면 같은 레퍼런스를 참조한다

new를 이용해 생성자(인스턴스)를 만들었으면 각각의 객체를 가리키기 때문에 레퍼런스값이 같지 않다

때문에 위 예제에선 str1과 str2만 레퍼런스값이 같고 나머지는 모두 다르다

 

다만 레퍼런스값이 아닌 값(문자열)을 비교하고 싶으면

메소드 .equals를 사용해

예시로 str3.equals("hello")같이 할 수 있다

 

String은 다른 클래스들과 달리 고유값을 유지한다

때문에 .substring 메소드를 사용해 인덱스값(0부터 시작) 3부터 잘랐음에도 불구하고

다시 출력하면 처음값 그대로 나온다

 

 

 


파트5 클래스와 객체:

필드(field) 선언

 

클래스 안에 있는 요소인 필드

학생이 20명 있을 때 이름, 학번 등으로 구분하는데 이런 속성을 필드라고 한다

Car 클래스에 이름과 번호 필드를 주고 싶다면 예시처럼

타입 필드명

으로 각각 주면 된다

저렇게 만들면 참조변수를 선언한 파일에서 변수 메소드에 각각의 필드가 뜬다

 

이후 이렇게 값을 줄 수 있다

 

 

 

 


파트5 클래스와 객체:

메소드란?

 

객체의 상태/행동을 나누었을 때 상태는 필드 행동은 메소드

예시로 자동차가 전진/후진하는 것이 메소드다

 

메소드는 입력값을 처리해 결과값을 만들어낸다

 

 

 

 


파트5 클래스와 객체:

메소드(Method) 선언

 

객체의 상태/행동을 나누었을 때 상태는 필드 행동은 메소드

위처럼 입력값이 없는 경우, 입력값만 두개인 경우, 결과값만 있는 경우 등등

메소드는 다양한 형태가 있다

 

메소드는 public 리턴타입 메소드명 (매개변수) {구현} 으로 선언한다

아래 예시는 위의 그림을 차례대로 메소드로 만든 것이다

리턴타입이 없을 땐 void라고 적는다

 

 

 


파트5 클래스와 객체:

메소드 사용해보기

 

메소드를 사용하기 위해선 사용한 파일에서 메소드를 포함한 클래스를 객체로 선언하고 시작해야 한다

예시에선 MyClass myclass = new MyClass();

 

위처럼 이전 강의에서 선언한 메소드들을 불러왔다

이때 리턴타입이 선언된 것들은 이를 불러오기 위한 같은 데이터 타입을 변수로 만들어줘야 한다

 

 

실습에서는 기본형 타입과 참조형 타입의 결과가 다르게 나타나는 것을 보여준다

 

 

 


파트5 클래스와 객체:

String 클래스의 메소드

 

청소기 필요하다고 직접 만드는 사람은 없다고 시작하는 비유가 와닿았다

원래 있는 것의 사용법을 익히는 것!

 

String에서 자주 사용하는 메소드

.length 개수

.concat("붙일문자") 결합

.substring(숫자) 숫자에 맞는 인덱스값앞은 삭제하고 출력

.substring(숫자1, 숫자2) 숫자1부터 숫자2까지 해당하는 인덱스값을 출력

 

 

 


파트5 클래스와 객체:

변수의 scope와 static

 

변수의 범위는 아래 예시에서 확인해볼 수 있다

globalScope는 클래스 안, 메소드 밖에 선언했기 때문에 빨간 박스, 파란 박스 모두 적용한다

하지만 빨간 박스에서 {} 안에 선언한 localScope와 value는 파란 박스에서 유효하지 않다(왼쪽에 컴파일 에러 뜸)

 

하지만 globalScope도 static이 붙은 main에선 유효하지 않다

static 메소드 안에서는 static 하지 않은 변수는 사용할 수 없다

따라서 static 필드로 추가해준 것만 사용 가능하다

 

static하지 않은 변수를 메인 메소드에서 사용하려면 객체를 생성하면 된다

 

위의 강의노트처럼

static 변수가 아니면 변수는 인스턴스를 만들 때 생성해서 여러 값을 넣을 수 있지만

static 변수는 아니기 때문에 클래스 변수라고 하고, 객체생성시변수.변수명 보다는 클래스명.변수명이 낫다

 

 

 

 


파트5 클래스와 객체:

열거형(enum)

 

열거형은 enum 이름 { 값1, 값2 ; } 으로 선언한다

예시처럼 클래스 바깥에 열거형을 선언하고

클래스 안에서 활용한다

boy를 넣으려고 하자 컴파일 에러가 뜬 것처럼 열거형에 적은 값들 이외에는 적을 수 없게 된다

 

 

 

 


scope 등 중복되는 내용이 있으면서도 새롭게 배우는 내용이 있어 재밌다

일상에서 청소기나 붕어빵 틀 같은 걸로 비유해주니까 이해가 쉽다

열거형은 옵션 체크박스 같은 거 같다

수업 듣다가 궁금한 게 있어도 구글링하면 바로 나오니까 편하다

 

반응형
Comments