프로그래밍 공부

2025.01.16 java 공부

3452 2025. 1. 16. 17:36

변수

 

데이터타입 변수명; 또는 데이터타입 변수명 = 값; 의 형태로 생성한다.

 

int a = 10;(선언과 동시에 초기화) 또는 int a; a = 10;(선언과 초기화 따로)

 

 

데이터타입의 종류

 

정수형 : byte, short, int, long

 

실수형 : float, double

 

논리 : boolean

 

문자 : char, String

 

 

 

변수명의 첫 자리에는 숫자를 사용할수 없고, _이나 $를 제외한 특수문자도 첫 자리에 올수없다.

 

 

변수의 형변환은 변수의 데이터타입을 다른걸로 바꾸는것을 말하며,

 

크기가 작은거에서 큰걸로 옮기고, 데이터 왜곡이 일어나지 않으면 자바에서 자동으로 형변환을 해주는데 이를 자동형변환이라 한다.

예시) int a = 30; 일때 float b = a;를 대입하면 b는 실수이기 때문에 30.0이지만 데이터의 왜곡이 없기 때문에 가능하다.

 

크기가 작아지거나 데이터 왜곡이 발생하면 이를 감안하고 수동으로 형변환을 해야하는데 이를 명시적형변환이라 한다.

예시) float a = 3.14; 일때 int b = a;를 대입하면 int에서는 소수점을 쓸수 없기에 b에는 3이 대입되고, 0.14는 손실된다.

 

명시적형변환을 할때에는 대입할 값 앞에 (데이터타입)을 붙여주게 되는데, 괄호의 우선순위가 있기 때문에

int a = (int) 3.14+2.5;와 int a = (int) (3.14+2.5);는 다르다.

 

전자에는 3.14가 int화 되어 3이되고 2.5와 더해져 5.64가 되므로 int a에 대입하려고 하면 에러가 발생하고,

 

후자는 3.14와 2.5를 먼저 더해서 5.64를 만든 후 int가 적용되어 5로 바뀌어 int a에 대입되게 되어 int a = 5가 된다.

 

 

상수는 변하지 않는 값을 말하며, 변수선언과 동일하지만 앞에 final을 붙여 선언하고, 상수는 값을 변경할수 없다.

 

final 데이터타입 상수명 = 값;

 

final float PI = 3.14; // 상수 PI 선언

 

PI = 6.5; // 상수의 값을 변경하려 하면 에러 발생

 

 

클래스와 객체

 

클래스는 객체의 설계도와 같은 역할을 한다.

 

클래스에는 객체의 속성과 기능이 정의되어 있고, 이를 통해 객체를 생성한다.

 

클래스에는 변수(속성) 또는 메서드(기능) 밖에 넣지 못한다.

 

 

객체는 클래스를 이용하여 만들어진 형태이며, 인스턴스라고도 부른다.

 

객체를 생성할때는 "클래스명 변수명 = new 클래스명();" 의 형태로 생성한다.

 

이렇게 생성된 객체에 접근할때는 .을 이용하여 접근하는데

 

"변수명.변수or함수의 이름"으로 접근할수 있다.

 

만약 Car라는 클래스가 있고, 안에 color라는 변수와 powerOn이라는 메서드가 있다고 가정하면

 

Car myCar = new Car(); // Car 클래스를 이용해 myCar 객체 생성

 

myCar.color = "black"; // 객체를 통해 color를 "black"으로 설정

 

myCar.powerOn(); // 객체를 통해 powerOn() 메서드를 호출

 

이런식의 접근이 가능하고, 객체를 생성해서 변경하거나 호출하는것은 원본 Car 클래스에는 영향을 주지 않는다.

 

 

Car myCar = new Car();에서 myCar에는 Car 클래스의 주소가 담기게 되는데, 클래스의 주소를 담은 변수를

 

참조변수라고 한다.

 

 

변수라는 개념은 데이터를 저장하는 저장공간이지만, 참조변수는 데이터가 저장되어 있는 주소를 저장하는 특별한 변수이다.

 

연산자 new에 의해서 인스턴스(객체)가 메모리 공간에 생성되고 난 다음 대입연산자(=)에 의해 인스턴스가 저장된 메모리의 주소 값이 참조변수에 저장된다.

 

 

클래스에서 사용되는 변수는 인스턴스 변수와 클래스 변수가 있는데 이 둘의 차이는 다음과 같다

 

인스턴스 변수 1. new 연산자로 생성하기 전까지는 생성되어있지 않다.

2. 인스턴스 변수는 클래스의 내부에서 정의되며 메서드 내부에서는 정의되지 않는다.

3. 각각의 인스턴스 변수에 값을 다르게 줄수있다.

4. 참조변수.변수명 으로 접근할수있다.
클래스 변수 1. 데이터타입 앞에 static을 붙이며, 미리 생성되어있다.

2. 하나의 클래스 변수는 각각 생성되지 않고, 클래스 변수끼리 값을 공유한다.

3. 클래스이름.변수명으로 접근한다.

4. 참조변수.변수명으로도 접근가능하지만 권장되지 않는다.

 

 

 

메서드

 

메서드는 특정한 작업이나 논리를 구성하는 코드를 괄호로 묶어 놓은것이며, 입력값을 받아 내부에서 처리하여 결과를 출력 또는 반환한다.

 

메서드는 한 번 정해두면 언제든 호출할 수 있고, 코드의 중복을 피할 수 있게 해준다.

 

 

반환타입 메서드명 ( 타입 변수명, 타입 변수명, ...) {

 

                      // 메서드 내부동작

 

                     // return;

 

 

반환타입에는 int, float, boolean, char, 참조변수 또는 void가 들어가며, void가 들어가면 return이 없다.

 

또한, 참조변수가 들어간 경우에는 반환값이 있을수도 있고, 없을수도 있다.

 

참조변수가 들어갔을 때 반환이 필요하다면 반환타입과 return을, 필요없다면 void를 사용한다.

 

 

메서드의 형태를 보고

 

메서드명 () {} 은 메서드의 생성을 의미한다. 이때 소괄호() 안에 들어가는것은 매개변수 라고하고 데이터타입과 변수명을 함께 선언해야하며, 메서드 호출시 입력받는 파라미터를 대입하는 변수이다.

 

메서드 생성시 사용되는 매개변수는 함수 안에 있기때문에 지역변수 라고도 한다.

 

메서드 안에 들어가는 지역변수 a와 클래스 안의 전역변수 a의 이름이 같을 때 함수 내에서 a를 출력하면 지역변수 a가 출력되게 되는데, 이때는 this.a를 활용하여 this로 이 함수가 속한 클래스 안의 a라는 변수를 집어낼수 있다.

 

 

메서드명 () 은 메서드의 호출을 의미한다. 이때 소괄호() 안에 들어가는것은 파라미터 또는 전달값이라고 하며, 메서드를 호출할때는 반드시 메서드에서 요구하는 파라미터 갯수와 데이터타입을 만족해야한다.

 

 

클래스 멤버와 인스턴스 멤버간의 참조 및 호출

 

호출자 호출대상 결과
인스턴스 멤버 클래스 멤버 가능
클래스 멤버 인스턴트 멤버 에러
인스턴스 멤버 인스턴스 멤버 가능
클래스 멤버 클래스 멤버 가능

 

인스턴스 멤버가 클래스 멤버를 호출하려면 이미 인스턴스 멤버가 생성되어있기 때문에 가능하다.

 

클래스 멤버가 인스턴스 멤버를 호출하면 인스턴스 멤버가 생성되어 있지 않기 때문에 불가능하다.

 

인스턴스 멤버가 인스턴스 멤버를 호출하면 객체가 생성될때 인스턴스가 생성되기 때문에 가능하다.

 

클래스 멤버가 클래스 멤버를 호출하면 둘다 이미 생성되어있기 때문에 가능하다.

 

 

오버로딩

 

매개변수의 개수와 타입은 다르지만 이름은 같은 메서드를 여러 개 정의하는 것이다.

 

대표적인 예시로 println이 있다.

 

println은 자바에서 출력가능한 모든 경우를 오버로딩으로 미리 정의해두어 파라미터로 무엇을 넘기든지 출력할수 있다.

 

 

생성자

 

생성자는 클래스에서 객체를 생성하고 초기화할때 사용하며, 개발자가 생성자를 명시하지 않으면 컴파일러가 자동으로 기본생성자를 추가해준다.

 

생성자를 구분하는 방법은 생성자는 클래스 안에 일반 메서드처럼 보이지만 반환타입이 없고, 클래스와 이름이 같다.

 

생성자의 기능은 객체 생성시 객체의 전역변수의 초기값을 설정하는것이다.

 

이를 이용해 새로 생성하는 객체의 전역변수 값을 객체마다 다르게 둘수있다.

'프로그래밍 공부' 카테고리의 다른 글

2025.01.20 java 정리  (0) 2025.01.20
2025.01.17 java 공부  (0) 2025.01.17
2025.01.15 java 공부  (0) 2025.01.15
2025.01.14 java 공부  (0) 2025.01.14
2025.01.13 java 공부  (0) 2025.01.13