You can set 'fuses' when you program the ATmega328p that will prevent anyone without special resources from seeing your code. You will not be able to change the sketch without using high-voltage serial programming to reset the chip to factory settings.