본문 바로가기

2023

포인터 대상의 const 선언 const 선언의 핵심 : 값을 변경하는 방법에 제한을 둔다. 이것은 엄밀히 말해 무엇인가를 상수로 만드는 것과는 다르다. 1. const int* ptr=# 포인터 변수가 참조하는 대상의 변경을 허용하지 않는 const 선언 해당 const 선언의 위치는 맨 앞부분이다. 의미 : 포인터 변수 ptr을 이용해서 ptr이 가리키는 변수에 저장된 값을 변경하는 것을 허용하지 않는다. 2. int* const ptr=# 포인터 변수의 상수화 포인터 변수 ptr은 상수가 된다. 이는 한번 주소값이 저장되면 그 값의 변경이 불가능하다. 즉, 한번 가리키기 시작한 변수를 끝까지 가리켜야 한다. 물론 ptr이 상수일 뿐이니 *ptr=40;과 같이 ptr이 가리키는 대상에 저장된 값을 변경하는 연산은 문.. 더보기
포인터와 배열, 포인터 연산 [1] 배열의 이름 배열의 이름은 포인터이다. 단, 그 값을 바꿀 수 없는 '상수 형태의 포인터'이다. 배열의 이름은 배열의 시작 주소 값을 의미하며, 그 형태는 값의 저장이 불가능한 상수이다. 배열의 이름도 포인터이므로 배열의 이름을 피연산자로 하는 * 연산이 가능하다. 위의 말들이 무슨 뜻인지 부연설명하면, 배열의 이름이 "상수 형태의 포인터"라는 개념은 C 언어에서의 배열과 포인터 사이의 관계를 설명하기 위한 개념이다. 이것은 배열과 포인터 간의 유사성을 강조하는 방식으로 설명할 수 있다. 1. 배열의 이름은 포인터 상수(constant pointer)이다. 배열을 선언하면 배열의 이름은 해당 배열의 첫 번째 요소를 가리키는 포인터 상수로 간주된다. 이 포인터는 상수이기 때문에 다른 메모리 주소로 .. 더보기
배열 기반의 문자열 표현 [배열기반의 문자열 표현] #define _CRT_SECURE_NO_WARNINGS #include int main(void) { char str[50]; int idx = 0; printf("문자열 입력 : "); scanf("%s", str); printf("입력 받은 문자열 : %s\n", str); printf("문자 단위 출력 : "); while (str[idx] != '\0') { printf("%c", str[idx]); idx++; } printf("\n"); return 0; } 위의 코드를 실행할 때 문자열 Hello World!를 입력하면 위와 같이 Hello까지만 입력받을 수 있다. 왜 공백 문자 뒤에 있는 World!는 입력받지 못하는 것일까? Hello 바로 뒤에는 공백문자(널.. 더보기
Super _15_Super 필요성과 사용법을 단계별로 코드를 수정해가며 확인해보자. [가 정] 공장 카메라에서는 동영상을 녹화함과 동시에 화재 감지 기능이 실행되고 과속 단속 카메라에서는 사진 촬영과 동시에 속도 측정과 번호판 인식 기능이 실행된다고 가정하자. [단계 1] 1. Camera.class package chap_07.camera; public class Camera { // 부모 클래스 public String name; public Camera() { // 생성자 this.name = "카메라"; } public void takePicture(){ // 사진 촬영 System.out.println(this.name + " : 사진을 촬영합니다."); } public void recordVideo().. 더보기
다형성 _14_Polymorphism (다형성) https://ruhaharu1107.tistory.com/14 메소드 오버라이딩 _13_MethodOverriding ( 메소드 오버라이딩) 메소드 오버라이딩 자식 클래스에서 부모 클래스에 있는 메소드를 덮어쓴다.(재정의) 같은 이름의 메소드임에도 불구하고 객체마다 다른 기능을 하게 된다 ruhaharu1107.tistory.com 카메라 패키지안에 있는 세 가지 클래스(Camera.class, FactoryCam.class, SpeedCam.class)는 위의 포스팅과 동일하다. class Person : 사람 class Student extends Person : 학생 (학생은 사람이다. Student is a person) class Teacher exte.. 더보기
메소드 오버라이딩 _13_MethodOverriding ( 메소드 오버라이딩) 메소드 오버라이딩 자식 클래스에서 부모 클래스에 있는 메소드를 덮어쓴다.(재정의) 같은 이름의 메소드임에도 불구하고 객체마다 다른 기능을 하게 된다. 1. 부모 클래스(Camera) package chap_07.camera; public class Camera { // 부모 클래스 public String name; public Camera() { // 생성자 this.name = "카메라"; } public void takePicture(){ // 사진 촬영 System.out.println(this.name + " : 사진을 촬영합니다."); } public void recordVideo(){ // 동영상 녹화 System.out.print.. 더보기
상속 1. Camera.class ( 부모클래스에 해당 ) package chap_07.camera; public class Camera { // 부모 클래스 public String name; public Camera() { // 생성자 this.name = "카메라"; } public void takePicture(){ // 사진 촬영 System.out.println(this.name + " : 사진을 촬영합니다."); } public void recordVideo(){ // 동영상 녹화 System.out.println(this.name + " : 동영상을 녹화합니다."); } } 2. FactoryCam.class (자식 클래스) package chap_07.camera; public class Fa.. 더보기
패키지 _11_Package package chap_07; import java.util.Random; public class _11_Package { public static void main(String[] args) { // 패키지 // 자바 클래스들을 비슷한 것들끼리 정리하는 폴더 구조. // 랜덤 클래스 사용해보자. Random random=new Random(); System.out.println("랜덤 정수 : "+random.nextInt()); // int의 범위 내에서 정수형 값 반환 System.out.println("랜덤 정수 (범위) : "+random.nextInt(10)); // 0이상 10 미만의 정수형 System.out.println("랜덤 실수 : "+random.nextDou.. 더보기