오버로딩 오버로딩이란 한클래스 내에서 같은 이름의 메서드를 여러개 정의하는 것을 뜻한다. 같은 이름이라고 해서 무조껀 오버로딩은 아니고 다음과 같은 조건을 만족해야만 오버로딩으로 간주한다. 1. 메서드 이름이 같아야 한다. 2. 매개변수의 개수 또는 타입이 달라야 한다. 3. 반환 타입은 상관없다. 1번의 경우를 가장 잘 반영한건 println 메서드 이다. println또한 java의 라이브러리 중 하나로 만들어져 있었는데 이것이 오버로딩의 한 종류라고 볼 수 있다. 오버로딩이 성립되지 않는 경우 int result(int a, int b) {return a+b;} int result(int a, int b) {return a*b;} 위 경우는 반환타입이 다르지만 매개변수의 개수 및 타입이 같기에 오버..
생성자 모든 클래스에는 하나 이상의 생성자가 있어야 한다. 사용자가 생성자를 생성하지 않는다면 매개변수가 없는 생성자가 자동으로 만들어진다. 클래스이름() {} 위와 같은 형태로 자동으로 생성되는데 보이지만 않을 뿐 항상 클래스가 있는한 항상 존재한다. 이와 같은 형태를 기본 생성자 라고 부른다. 생성자의 선언 사실 지금까지 클래스의 인스턴스 변수를 생성하기 위해 초기화를 했었는데 그때마다 기본 생성자를 호출함으로써 인스턴스 변수를 메모리에 할당한 것이었다. HangHae a = new HangHae(); 위의 코드를 통해 인스턴스 변수를 생성하고 메모리를 할당하는데 new뒤에 HangHae()가 바로 기본 생성자를 호출한다는 말이고 기본생성자는 이미 클래스를 생성했을때부터 자동으로 생성되어 있으므로 그..
java의 메소드는 아래와 같은 형태를 가진다. public 리턴타입 메소드명 (매개변수타입 매개변수이름) { 구현내용 } 매개변수는 파라메터(parameter)라고도 부른다. 리턴타입에 따라 반환값이 없을수도 있을수도 있다. 1. 매개변수 / 리턴하는 것이 없는 경우의 메소드 public void method1() { System.out.println("매개변수와 리턴타입이 없는 메소드"); } 리턴타입이 없을 경우 void로 선언하고 매개변수가 없으면 파라메터부분을 비워준다. 2. 매개변수가 있고 리턴하는 것이 없는 경우의 메소드 public void method2(int x) { System.out.println("리턴타입이 없고 매개변수는 있는 메소드"); } 3. 매개변수가 없고 리턴만 하는 경..
객체지향 프로그래밍의 변수 종류는 3가지가 있다. 변수의 종류 선언위치 생성시기 멤버변수 O 클래스 변수 클래스 영역 클래스가 메모리에 올라갈때 인스턴스 변수 인스턴스가 생성되었을때 멤버변수 X 지역변수 클래스 영역 이외의 영역 변수 선언문이 수행되었을 때 출처 : 자바의 정석 멤버 변수 : class안에 선언된 클래스 변수와 인스턴스 변수를 통들어 멤버 변수라고 부른다. 1. 인스턴스 변수 : 클래스 영역에 선언되며 인스턴스를 생성할 때 만들어 진다. 인스턴스마다 별도의 저장공간을 가지므로 서로 다른 값을 가질 수 있다. 인스턴스마다 고유한 상태를 유지해야하는 속성의 경우 인스턴스 변수로 선언한다 (ex 회사의 회사원 이름) 2. 클래스 변수 : 인스턴스 변수에 static을 붙였을때 클래스 변수가 된..
java에서 Math.random()이라는 함수가 있는데 난수 생성을 하는 함수이다. Math.random()은 임의의 로또 번호 생성, 숫자야구게임, 주사위 굴리기 등 많은 곳에서 활용할 수 있는데 주사위 굴리기의 코드 일부를 구현하면서 의문이 생겼다. 일단 먼저 Math.random() 함수는 난수를 생성하는 함수로 0 ~ 0.9 사이의 임의의 숫자를 난수로 생성해준다. 이후 이 난수에 * 10을 한 뒤 + 1을 해줘서 1 ~ 9까지의 랜덤한 정수를 생성한다. int number = (int)(Math.random() * 10 + 1); 주사위 만들기 그렇다면 주사위를 만들때는 어떻게 할까? 개인적으로는 1 ~ 9까지의 정수를 생성한후 7, 8, 9가 나올 경우에 대한 예외처리를 할것이라고 바로 생각..
public static void main(String[] args) 이 구문이 항상 메인 함수에 들어가는데 이 중에서 특히 static은 무엇일까 라는 것에 대해 궁금했고 static을 공부하다보니 그러면 무조껀 static으로 선언하면 좋을거 같은데 왜 그러지 않을까 라는 의문이 들었다. static이란? 정적인 이라는 의미로 일단 먼저 변수나 함수를 할당하는 방식으로 두가지가 있는데 static과 heap이라는 방식이 있다. static은 프로그램이 실행되는 순간 바로 메모리에 할당되고 모두 공유될 수 있지만 heap은 연산이 실행되는 순간 메모리에 할당되고 그 자체만 그 값을 가지고 또한 Garbage Collector에 의해 사라질 수 도 있다. static은 모두 공유가 된다는 큰 이점이 있기..
public static void main(String[] args)이 왜 들어가야 할까라는 의문이 들었는데 구글링 결과 이미 수 많은 사람들이 나와 같은 고민을 했다는 것을 알았다. 저 구문이 왜 들어가야 하는지 하나씩 뜯어보면서 기록하고자 한다. Public public은 접근제어자이다. java에서는 변수와 함수, 클래스에 대한 접근을 제한하는 문법이 있는데 객체지향 프로그래밍을 위한 하나의 안전장치라고 볼 수 있다. 총 4가지가 있는데 접근 허용 가능한 범위 순서를 나열해보자면 public > protected > default > private 순으로 허용 범위가 넓다. (즉 public이 허용범위가 가장 넓다) 실무에서 가장 많이 사용하는 범위는 public : 접근 제한이 없음 private..
클래스명이나 함수명에 대한 부분은 파스칼 표기법을 주로 사용하는데 변수에 대한 부분은 아직 스스로가 정리가 되질 않아 알아보았다. 카멜 표기법 (camel case) 소문자로 시작하고 이어지는 단어는 대문자로 작성하는 표기법 낙타의 혹과 비슷하다하여 붙여진 표기법 Java의 변수명을 선언할때 주로 사용 ex) userName, memberList 등 스네이크 표기법 (snake case) 단어 사이에 underbar를 사용하여 작성하는 표기법 python, C++, C등의 변수명을 선언할때 주로 사용 user_name, member_list 등 java에서 스네이크 표기법을 사용하는 이유는 대부분 python이나 C에서 사용하던 습관을 그대로 적용한 것으로 java 진영에서는 99% 카멜 표기법을 사용한..